Coverage for src/zapy/test/test_runner.py: 100%

24 statements  

« prev     ^ index     » next       coverage.py v7.4.1, created at 2024-02-10 19:35 +0000

1import unittest 

2import unittest.case 

3from typing import Any, List 

4from unittest.runner import TextTestResult 

5 

6from .models import TestResult as TestResultModel 

7 

8 

9class TestResult(TextTestResult): 

10 def __init__(self, *args: Any, **kwargs: Any) -> None: 

11 super().__init__(*args, **kwargs) 

12 self.successes: list[Any] = [] 

13 

14 def addSuccess(self, test: Any) -> None: # noqa: N802 

15 super().addSuccess(test) 

16 self.successes.append(test) 

17 

18 def as_list(self) -> List[TestResultModel]: 

19 successes = [ 

20 TestResultModel( 

21 method=test._testMethodName, 

22 status="success", 

23 ) 

24 for test in self.successes 

25 ] 

26 errors = [ 

27 TestResultModel( 

28 method=test._testMethodName, 

29 traceback=traceback_str, 

30 status="error", 

31 ) 

32 for test, traceback_str in self.errors 

33 ] 

34 failures = [ 

35 TestResultModel( 

36 method=test._testMethodName, 

37 traceback=traceback_str, 

38 status="failure", 

39 ) 

40 for test, traceback_str in self.failures 

41 ] 

42 return successes + errors + failures 

43 

44 

45def run_tests(*test_classes: type[unittest.TestCase]) -> TestResult: 

46 loader = unittest.TestLoader() 

47 suites_list = (loader.loadTestsFromTestCase(test_class) for test_class in test_classes) 

48 test_suit = unittest.TestSuite(suites_list) 

49 

50 test_runner = unittest.runner.TextTestRunner(resultclass=TestResult) 

51 test_result = test_runner.run(test_suit) 

52 

53 return test_result # type: ignore