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

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

2 

3import unicodedata 

4from typing import TYPE_CHECKING 

5 

6from ocarina.dsl.invariants.assertions import ( 

7 each, 

8 has_unique_elements, 

9 is_valid_filename, 

10) 

11from ocarina.dsl.invariants.validate import FrameworkInvariantValidator 

12 

13if TYPE_CHECKING: 

14 from collections.abc import Sequence 

15 

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

17 ValidationAssertBlock, 

18 ValidationStartBlock, 

19 ) 

20 from ocarina.dsl.testing.oc_test import Test 

21 

22 

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 ) 

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)