Coverage for tests / unit / parsers / pydoclint_parser / test_invalid_input.py: 100%

24 statements  

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

1"""Tests for pydoclint parser handling of invalid/empty input.""" 

2 

3from __future__ import annotations 

4 

5import pytest 

6from assertpy import assert_that 

7 

8from lintro.parsers.pydoclint.pydoclint_parser import parse_pydoclint_output 

9 

10 

11@pytest.mark.parametrize( 

12 "output", 

13 [ 

14 None, 

15 "", 

16 " \n \n ", 

17 ], 

18 ids=["none", "empty", "whitespace_only"], 

19) 

20def test_parse_returns_empty_for_no_content( 

21 output: str | None, 

22) -> None: 

23 """Parse empty, None, or whitespace-only output returns empty list. 

24 

25 Args: 

26 output: The pydoclint output to parse. 

27 """ 

28 result = parse_pydoclint_output(output=output) 

29 assert_that(result).is_empty() 

30 

31 

32def test_parse_returns_empty_for_malformed_line() -> None: 

33 """Parse malformed lines returns empty list.""" 

34 result = parse_pydoclint_output(output="this is not valid output") 

35 assert_that(result).is_empty() 

36 

37 

38def test_parse_returns_empty_for_missing_code() -> None: 

39 """Parse line without DOC code returns empty list.""" 

40 result = parse_pydoclint_output(output="test.py:10:5: Missing code message") 

41 assert_that(result).is_empty() 

42 

43 

44def test_parse_skips_malformed_lines_in_mixed_output() -> None: 

45 """Parse mixed valid and invalid lines only returns valid issues.""" 

46 output = """test.py 

47 10: DOC101: Valid issue 

48malformed line without proper format 

49another.py 

50 20: DOC201: Another valid issue 

51""" 

52 result = parse_pydoclint_output(output=output) 

53 

54 assert_that(result).is_length(2) 

55 assert_that(result[0].code).is_equal_to("DOC101") 

56 assert_that(result[1].code).is_equal_to("DOC201") 

57 

58 

59def test_parse_handles_missing_line_number() -> None: 

60 """Parse issue line without proper line number returns empty.""" 

61 output = """test.py 

62 : DOC101: Message without line number""" 

63 result = parse_pydoclint_output(output=output) 

64 assert_that(result).is_empty()