Coverage for tests / unit / parsers / streaming / conftest.py: 100%

28 statements  

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

1"""Shared fixtures for streaming parser tests.""" 

2 

3from __future__ import annotations 

4 

5from dataclasses import dataclass 

6from typing import TYPE_CHECKING 

7 

8import pytest 

9 

10from lintro.parsers.base_issue import BaseIssue 

11 

12if TYPE_CHECKING: 

13 from collections.abc import Callable 

14 

15 

16@dataclass 

17class SimpleIssue(BaseIssue): 

18 """Simple issue for testing.""" 

19 

20 code: str = "" 

21 

22 

23@pytest.fixture 

24def parse_test_item() -> Callable[[dict[str, object]], SimpleIssue | None]: 

25 """Provide a parser function for test items. 

26 

27 Returns: 

28 A function that parses dictionaries into SimpleIssue objects. 

29 """ 

30 

31 def _parse(item: dict[str, object]) -> SimpleIssue | None: 

32 file_val = item.get("file") 

33 msg_val = item.get("message") 

34 code_val = item.get("code") 

35 return SimpleIssue( 

36 file=str(file_val) if file_val else "", 

37 message=str(msg_val) if msg_val else "", 

38 code=str(code_val) if code_val else "", 

39 ) 

40 

41 return _parse 

42 

43 

44@pytest.fixture 

45def parse_error_line() -> Callable[[str], SimpleIssue | None]: 

46 """Provide a parser function for error lines. 

47 

48 Returns: 

49 A function that parses lines starting with ERROR: into SimpleIssue objects. 

50 """ 

51 

52 def _parse(line: str) -> SimpleIssue | None: 

53 if line.startswith("ERROR:"): 

54 return SimpleIssue(message=line[6:].strip()) 

55 return None 

56 

57 return _parse 

58 

59 

60@pytest.fixture 

61def identity_line_parser() -> Callable[[str], SimpleIssue]: 

62 """Provide a parser that converts any line to an issue. 

63 

64 Returns: 

65 A function that wraps any line in a SimpleIssue. 

66 """ 

67 

68 def _parse(line: str) -> SimpleIssue: 

69 return SimpleIssue(message=line) 

70 

71 return _parse