Coverage for src / ocarina / custom_invariants / testing / oc_test_runners_names.py: 100.00%

9 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-05-31 10:31 +0200

1"""Validation of test runner names: unique and valid cross-platform filenames.""" 

2 

3from typing import TYPE_CHECKING 

4 

5from ocarina.dsl.invariants.assertions import ( 

6 each, 

7 has_unique_elements, 

8 is_valid_filename, 

9) 

10from ocarina.dsl.invariants.validate import FrameworkInvariantValidator 

11 

12if TYPE_CHECKING: 

13 from collections.abc import Sequence 

14 

15 from ocarina.dsl.invariants.internals.validation_chain import ( 

16 ValidationAssertBlock, 

17 ValidationStartBlock, 

18 ) 

19 from ocarina.dsl.testing.oc_test import Test 

20 

21 

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 

28 

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 ) 

36 

37 

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)