Coverage for tests / unit / parsers / base_parser / test_continuation_lines.py: 100%

28 statements  

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

1"""Tests for collect_continuation_lines function.""" 

2 

3from __future__ import annotations 

4 

5from assertpy import assert_that 

6 

7from lintro.parsers.base_parser import collect_continuation_lines 

8 

9 

10def test_collect_continuation_lines_with_indented_lines() -> None: 

11 """Collect indented continuation lines.""" 

12 lines = ["main message", " continued", " more", "next item"] 

13 message, next_idx = collect_continuation_lines( 

14 lines, 

15 1, 

16 lambda line: line.startswith(" "), 

17 ) 

18 assert_that(message).is_equal_to("continued more") 

19 assert_that(next_idx).is_equal_to(3) 

20 

21 

22def test_collect_continuation_lines_with_colon_prefix() -> None: 

23 """Collect lines with colon prefix.""" 

24 lines = ["error:", ": detail1", ": detail2", "next"] 

25 message, next_idx = collect_continuation_lines( 

26 lines, 

27 1, 

28 lambda line: line.strip().startswith(":"), 

29 ) 

30 assert_that(message).is_equal_to("detail1 detail2") 

31 assert_that(next_idx).is_equal_to(3) 

32 

33 

34def test_collect_continuation_lines_no_continuations() -> None: 

35 """Return empty message when no continuation lines found.""" 

36 lines = ["main message", "not indented"] 

37 message, next_idx = collect_continuation_lines( 

38 lines, 

39 1, 

40 lambda line: line.startswith(" "), 

41 ) 

42 assert_that(message).is_equal_to("") 

43 assert_that(next_idx).is_equal_to(1) 

44 

45 

46def test_collect_continuation_lines_at_end() -> None: 

47 """Handle continuation at end of lines list.""" 

48 lines = ["main", " last"] 

49 message, next_idx = collect_continuation_lines( 

50 lines, 

51 1, 

52 lambda line: line.startswith(" "), 

53 ) 

54 assert_that(message).is_equal_to("last") 

55 assert_that(next_idx).is_equal_to(2) 

56 

57 

58def test_collect_continuation_lines_empty_continuation() -> None: 

59 """Skip empty continuation lines.""" 

60 lines = ["main", " ", " content"] 

61 message, next_idx = collect_continuation_lines( 

62 lines, 

63 1, 

64 lambda line: line.startswith(" "), 

65 ) 

66 assert_that(message).is_equal_to("content") 

67 assert_that(next_idx).is_equal_to(3)