Coverage for src / ocarina / custom_invariants / testing / oc_test_suites_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 suite 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_suite import TestSuite 

21 

22 

23def _test_suites_names_chain[Driver]( 

24 chain: ValidationStartBlock[Sequence[TestSuite[Driver]]], 

25 _: Sequence[TestSuite[Driver]], 

26) -> ValidationAssertBlock[Sequence[TestSuite[Driver]]]: 

27 return chain.assert_that( 

28 has_unique_elements( 

29 key=lambda s: unicodedata.normalize("NFC", s.name).casefold() 

30 ), 

31 msg="Test suite names must be unique (case-insensitive).", 

32 ).assert_that( 

33 each(lambda s: is_valid_filename(s.name)), 

34 msg="Test suites names must be valid cross-platform filenames.", 

35 ) 

36 

37 

38def validate_test_suites_names[Driver]( 

39 *, suites: Sequence[TestSuite[Driver]], name: str 

40) -> ValidationAssertBlock[Sequence[TestSuite[Driver]]]: 

41 """Validate that test suite names are unique and valid cross-platform filenames.""" 

42 return FrameworkInvariantValidator.create(suites, name, _test_suites_names_chain)