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
« prev ^ index » next coverage.py v7.13.0, created at 2026-04-03 18:53 +0000
1"""Unit tests for CsvStyle formatter.
3Tests verify CsvStyle correctly formats tabular data as valid CSV
4with proper quoting for special characters.
5"""
7from __future__ import annotations
9from assertpy import assert_that
11from lintro.formatters.styles.csv import CsvStyle
13from .conftest import MULTI_ROW_DATA, SINGLE_ROW_DATA, STANDARD_COLUMNS, TWO_COLUMNS
16def test_csv_style_single_row_produces_valid_csv(csv_style: CsvStyle) -> None:
17 """CsvStyle formats single row as valid CSV with header.
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")
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")
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.
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")
41 assert_that(lines).is_length(3) # header + 2 data rows
44def test_csv_style_quotes_values_with_commas(csv_style: CsvStyle) -> None:
45 """CsvStyle properly quotes values containing commas.
47 Args:
48 csv_style: The CsvStyle formatter instance.
49 """
50 result = csv_style.format(["Message"], [["Error, with comma"]])
52 assert_that(result).contains('"Error, with comma"')
55def test_csv_style_row_shorter_than_columns(csv_style: CsvStyle) -> None:
56 """CsvStyle handles row with fewer elements than columns.
58 Args:
59 csv_style: The CsvStyle formatter instance.
60 """
61 result = csv_style.format(STANDARD_COLUMNS, [["src/main.py"]])
63 assert_that(result).contains("src/main.py")