Coverage for tests / unit / formatters / styles / test_csv.py: 100%
26 statements
« prev ^ index » next coverage.py v7.13.0, created at 2026-04-03 18:53 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2026-04-03 18:53 +0000
1"""Tests for lintro.formatters.styles.csv module."""
3from __future__ import annotations
5from assertpy import assert_that
7from lintro.formatters.styles.csv import CsvStyle
10def test_csv_style_empty_rows(csv_style: CsvStyle) -> None:
11 """CsvStyle returns empty string for empty rows.
13 Args:
14 csv_style: CsvStyle fixture.
15 """
16 result = csv_style.format(["File", "Line"], [])
17 assert_that(result).is_equal_to("")
20def test_csv_style_single_row(csv_style: CsvStyle) -> None:
21 """CsvStyle formats single row correctly.
23 Args:
24 csv_style: CsvStyle fixture.
25 """
26 result = csv_style.format(
27 ["File", "Line", "Message"],
28 [["test.py", "10", "Error"]],
29 )
30 assert_that(result).contains("File,Line,Message")
31 assert_that(result).contains("test.py,10,Error")
34def test_csv_style_multiple_rows(csv_style: CsvStyle) -> None:
35 """CsvStyle formats multiple rows correctly.
37 Args:
38 csv_style: CsvStyle fixture.
39 """
40 result = csv_style.format(
41 ["File", "Line"],
42 [["a.py", "1"], ["b.py", "2"]],
43 )
44 lines = result.strip().split("\n")
45 assert_that(len(lines)).is_equal_to(3) # header + 2 data rows
48def test_csv_style_pads_short_rows(csv_style: CsvStyle) -> None:
49 """CsvStyle pads short rows with empty strings.
51 Args:
52 csv_style: CsvStyle fixture.
53 """
54 result = csv_style.format(
55 ["File", "Line", "Message"],
56 [["test.py"]],
57 )
58 assert_that(result).contains("test.py,,")
61def test_csv_style_escapes_special_characters(csv_style: CsvStyle) -> None:
62 """CsvStyle escapes special CSV characters.
64 Args:
65 csv_style: CsvStyle fixture.
66 """
67 result = csv_style.format(
68 ["Message"],
69 [["Value with, comma"]],
70 )
71 # CSV writer should quote fields containing commas
72 assert_that(result).contains('"Value with, comma"')
75def test_csv_style_ignores_tool_name(csv_style: CsvStyle) -> None:
76 """CsvStyle ignores tool_name parameter.
78 Args:
79 csv_style: CsvStyle fixture.
80 """
81 result = csv_style.format(
82 ["File"],
83 [["test.py"]],
84 tool_name="ruff",
85 )
86 assert_that(result).does_not_contain("ruff")
89def test_csv_style_ignores_kwargs(csv_style: CsvStyle) -> None:
90 """CsvStyle ignores extra kwargs.
92 Args:
93 csv_style: CsvStyle fixture.
94 """
95 result = csv_style.format(
96 ["File"],
97 [["test.py"]],
98 extra_param="ignored",
99 )
100 assert_that(result).contains("test.py")