Coverage for src / ocarina / custom_invariants / testing / oc_test_runners_names.py: 55.56%
9 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-06-01 09:23 +0200
« prev ^ index » next coverage.py v7.13.5, created at 2026-06-01 09:23 +0200
1"""Validation of test runner names: unique and valid cross-platform filenames."""
3from typing import TYPE_CHECKING
5from ocarina.dsl.invariants.assertions import (
6 each,
7 has_unique_elements,
8 is_valid_filename,
9)
10from ocarina.dsl.invariants.validate import FrameworkInvariantValidator
12if TYPE_CHECKING:
13 from collections.abc import Sequence
15 from ocarina.dsl.invariants.internals.validation_chain import (
16 ValidationAssertBlock,
17 ValidationStartBlock,
18 )
19 from ocarina.dsl.testing.oc_test import Test
22def _test_runners_names_chain[Driver](
23 chain: ValidationStartBlock[Sequence[Test[Driver]]],
24 _: Sequence[Test[Driver]],
25) -> ValidationAssertBlock[Sequence[Test[Driver]]]:
26 def get_runner_name(t: Test[Driver]) -> str:
27 return t.name
29 return chain.assert_that(
30 has_unique_elements(key=get_runner_name),
31 msg="Test runner names must be unique.",
32 ).assert_that(
33 each(lambda t: is_valid_filename(t.name)),
34 msg="Test runner names must be valid cross-platform filenames.",
35 )
38def validate_test_runners_names[Driver](
39 *, tests: Sequence[Test[Driver]], name: str
40) -> ValidationAssertBlock[Sequence[Test[Driver]]]:
41 """Validate that test runner names are unique and valid cross-platform filenames."""
42 return FrameworkInvariantValidator.create(tests, name, _test_runners_names_chain)