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
« prev ^ index » next coverage.py v7.13.0, created at 2026-04-03 18:53 +0000
1"""Shared fixtures for streaming parser tests."""
3from __future__ import annotations
5from dataclasses import dataclass
6from typing import TYPE_CHECKING
8import pytest
10from lintro.parsers.base_issue import BaseIssue
12if TYPE_CHECKING:
13 from collections.abc import Callable
16@dataclass
17class SimpleIssue(BaseIssue):
18 """Simple issue for testing."""
20 code: str = ""
23@pytest.fixture
24def parse_test_item() -> Callable[[dict[str, object]], SimpleIssue | None]:
25 """Provide a parser function for test items.
27 Returns:
28 A function that parses dictionaries into SimpleIssue objects.
29 """
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 )
41 return _parse
44@pytest.fixture
45def parse_error_line() -> Callable[[str], SimpleIssue | None]:
46 """Provide a parser function for error lines.
48 Returns:
49 A function that parses lines starting with ERROR: into SimpleIssue objects.
50 """
52 def _parse(line: str) -> SimpleIssue | None:
53 if line.startswith("ERROR:"):
54 return SimpleIssue(message=line[6:].strip())
55 return None
57 return _parse
60@pytest.fixture
61def identity_line_parser() -> Callable[[str], SimpleIssue]:
62 """Provide a parser that converts any line to an issue.
64 Returns:
65 A function that wraps any line in a SimpleIssue.
66 """
68 def _parse(line: str) -> SimpleIssue:
69 return SimpleIssue(message=line)
71 return _parse