Coverage for tests / unit / parsers / pydoclint_parser / test_edge_cases.py: 100%
53 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 pydoclint parser edge cases."""
3from __future__ import annotations
5from assertpy import assert_that
7from lintro.parsers.pydoclint.pydoclint_parser import parse_pydoclint_output
10def test_parse_unicode_path() -> None:
11 """Parse issue with unicode characters in path."""
12 output = """src/模块/helper.py
13 10: DOC101: Test message"""
14 result = parse_pydoclint_output(output=output)
16 assert_that(result).is_length(1)
17 assert_that(result[0].file).is_equal_to("src/模块/helper.py")
20def test_parse_path_with_spaces() -> None:
21 """Parse issue with spaces in file path.
23 Note: pydoclint file path pattern requires the path to end with .py/.pyi.
24 Paths with spaces are preserved as-is.
25 """
26 output = """src/my module/helper file.py
27 10: DOC101: Test message"""
28 result = parse_pydoclint_output(output=output)
30 assert_that(result).is_length(1)
31 assert_that(result[0].file).is_equal_to("src/my module/helper file.py")
34def test_parse_message_with_special_characters() -> None:
35 """Parse issue with special characters in message."""
36 output = """test.py
37 10: DOC101: Function `foo` has 'special' chars: [a, b]"""
38 result = parse_pydoclint_output(output=output)
40 assert_that(result).is_length(1)
41 assert_that(result[0].message).is_equal_to(
42 "Function `foo` has 'special' chars: [a, b]",
43 )
46def test_parse_very_long_message() -> None:
47 """Parse issue with very long message."""
48 long_message = "A" * 1000
49 output = f"""test.py
50 10: DOC101: {long_message}"""
51 result = parse_pydoclint_output(output=output)
53 assert_that(result).is_length(1)
54 assert_that(result[0].message).is_equal_to(long_message)
57def test_parse_high_line_numbers() -> None:
58 """Parse issue with high line numbers.
60 Note: pydoclint doesn't provide column information, so column is always 0.
61 """
62 output = """test.py
63 99999: DOC101: Test message"""
64 result = parse_pydoclint_output(output=output)
66 assert_that(result).is_length(1)
67 assert_that(result[0].line).is_equal_to(99999)
68 assert_that(result[0].column).is_equal_to(0) # pydoclint doesn't report columns
71def test_parse_nested_path() -> None:
72 """Parse issue with nested directory path."""
73 output = """src/module/test.py
74 10: DOC101: Test message"""
75 result = parse_pydoclint_output(output=output)
77 assert_that(result).is_length(1)
78 assert_that(result[0].file).is_equal_to("src/module/test.py")
81def test_parse_multiple_colons_in_message() -> None:
82 """Parse issue with colons in the message."""
83 output = """test.py
84 10: DOC101: Error: Function `foo`: missing args: [x, y]"""
85 result = parse_pydoclint_output(output=output)
87 assert_that(result).is_length(1)
88 assert_that(result[0].message).is_equal_to(
89 "Error: Function `foo`: missing args: [x, y]",
90 )
93def test_parse_empty_lines_between_issues() -> None:
94 """Parse output with empty lines between issues."""
95 output = """test.py
96 10: DOC101: First issue
98 20: DOC201: Second issue
100"""
101 result = parse_pydoclint_output(output=output)
103 assert_that(result).is_length(2)
104 assert_that(result[0].code).is_equal_to("DOC101")
105 assert_that(result[1].code).is_equal_to("DOC201")
108def test_parse_multiple_files() -> None:
109 """Parse output with issues from multiple files."""
110 output = """src/module_a.py
111 10: DOC101: First issue
112 20: DOC102: Second issue
113src/module_b.py
114 5: DOC201: Third issue"""
115 result = parse_pydoclint_output(output=output)
117 assert_that(result).is_length(3)
118 assert_that(result[0].file).is_equal_to("src/module_a.py")
119 assert_that(result[1].file).is_equal_to("src/module_a.py")
120 assert_that(result[2].file).is_equal_to("src/module_b.py")