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

1"""Tests for lintro.formatters.styles.csv module.""" 

2 

3from __future__ import annotations 

4 

5from assertpy import assert_that 

6 

7from lintro.formatters.styles.csv import CsvStyle 

8 

9 

10def test_csv_style_empty_rows(csv_style: CsvStyle) -> None: 

11 """CsvStyle returns empty string for empty rows. 

12 

13 Args: 

14 csv_style: CsvStyle fixture. 

15 """ 

16 result = csv_style.format(["File", "Line"], []) 

17 assert_that(result).is_equal_to("") 

18 

19 

20def test_csv_style_single_row(csv_style: CsvStyle) -> None: 

21 """CsvStyle formats single row correctly. 

22 

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") 

32 

33 

34def test_csv_style_multiple_rows(csv_style: CsvStyle) -> None: 

35 """CsvStyle formats multiple rows correctly. 

36 

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 

46 

47 

48def test_csv_style_pads_short_rows(csv_style: CsvStyle) -> None: 

49 """CsvStyle pads short rows with empty strings. 

50 

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,,") 

59 

60 

61def test_csv_style_escapes_special_characters(csv_style: CsvStyle) -> None: 

62 """CsvStyle escapes special CSV characters. 

63 

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"') 

73 

74 

75def test_csv_style_ignores_tool_name(csv_style: CsvStyle) -> None: 

76 """CsvStyle ignores tool_name parameter. 

77 

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") 

87 

88 

89def test_csv_style_ignores_kwargs(csv_style: CsvStyle) -> None: 

90 """CsvStyle ignores extra kwargs. 

91 

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")