Coverage for src / ocarina / custom_invariants / testing / oc_test_runners_names.py: 75.00%
8 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-06-04 16:22 +0200
« prev ^ index » next coverage.py v7.13.5, created at 2026-06-04 16:22 +0200
1"""Validation of test runner names: unique and valid cross-platform filenames."""
3import unicodedata
4from typing import TYPE_CHECKING
6from ocarina.dsl.invariants.assertions import (
7 each,
8 has_unique_elements,
9 is_valid_filename,
10)
11from ocarina.dsl.invariants.validate import FrameworkInvariantValidator
13if TYPE_CHECKING:
14 from collections.abc import Sequence
16 from ocarina.dsl.invariants.internals.validation_chain import (
17 ValidationAssertBlock,
18 ValidationStartBlock,
19 )
20 from ocarina.dsl.testing.oc_test import Test
23def _test_runners_names_chain[Driver](
24 chain: ValidationStartBlock[Sequence[Test[Driver]]],
25 _: Sequence[Test[Driver]],
26) -> ValidationAssertBlock[Sequence[Test[Driver]]]:
27 return chain.assert_that(
28 has_unique_elements(
29 key=lambda t: unicodedata.normalize("NFC", t.name).casefold()
30 ),
31 msg="Test runner names must be unique (case-insensitive).",
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)