Coverage for src / ocarina / custom_invariants / testing / oc_test_suites_names.py: 55.56%

9 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-06-01 09:23 +0200

1"""Validation of test suite 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_suite import TestSuite 

20 

21 

22def _test_suites_names_chain[Driver]( 

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

24 _: Sequence[TestSuite[Driver]], 

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

26 def get_suite_name(s: TestSuite[Driver]) -> str: 

27 return s.name 

28 

29 return chain.assert_that( 

30 has_unique_elements(key=get_suite_name), 

31 msg="Test suite names must be unique.", 

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)