Coverage for tests / unit / formatters / styles / test_style_csv.py: 100%

20 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-04-03 18:53 +0000

1"""Unit tests for CsvStyle formatter. 

2 

3Tests verify CsvStyle correctly formats tabular data as valid CSV 

4with proper quoting for special characters. 

5""" 

6 

7from __future__ import annotations 

8 

9from assertpy import assert_that 

10 

11from lintro.formatters.styles.csv import CsvStyle 

12 

13from .conftest import MULTI_ROW_DATA, SINGLE_ROW_DATA, STANDARD_COLUMNS, TWO_COLUMNS 

14 

15 

16def test_csv_style_single_row_produces_valid_csv(csv_style: CsvStyle) -> None: 

17 """CsvStyle formats single row as valid CSV with header. 

18 

19 Args: 

20 csv_style: The CsvStyle formatter instance. 

21 """ 

22 result = csv_style.format(STANDARD_COLUMNS, SINGLE_ROW_DATA) 

23 lines = result.strip().split("\n") 

24 

25 assert_that(lines).is_length(2) # header + 1 data row 

26 assert_that(lines[0]).contains("File,Line,Message") 

27 assert_that(lines[1]).contains("src/main.py,10,Error found") 

28 

29 

30def test_csv_style_multiple_rows_produces_correct_line_count( 

31 csv_style: CsvStyle, 

32) -> None: 

33 """CsvStyle formats multiple rows with correct number of lines. 

34 

35 Args: 

36 csv_style: The CsvStyle formatter instance. 

37 """ 

38 result = csv_style.format(TWO_COLUMNS, MULTI_ROW_DATA) 

39 lines = result.strip().split("\n") 

40 

41 assert_that(lines).is_length(3) # header + 2 data rows 

42 

43 

44def test_csv_style_quotes_values_with_commas(csv_style: CsvStyle) -> None: 

45 """CsvStyle properly quotes values containing commas. 

46 

47 Args: 

48 csv_style: The CsvStyle formatter instance. 

49 """ 

50 result = csv_style.format(["Message"], [["Error, with comma"]]) 

51 

52 assert_that(result).contains('"Error, with comma"') 

53 

54 

55def test_csv_style_row_shorter_than_columns(csv_style: CsvStyle) -> None: 

56 """CsvStyle handles row with fewer elements than columns. 

57 

58 Args: 

59 csv_style: The CsvStyle formatter instance. 

60 """ 

61 result = csv_style.format(STANDARD_COLUMNS, [["src/main.py"]]) 

62 

63 assert_that(result).contains("src/main.py")