Coverage for lobster/tools/cpptest/parser/requirements_parser.py: 91%

26 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2025-06-26 14:55 +0000

1""" 

2This script verifies if the test files of a given 

3target contains @requirement tag or not 

4""" 

5import logging 

6from pathlib import Path 

7from typing import List 

8 

9from lobster.tools.cpptest.parser.test_case import TestCase 

10 

11 

12class ParserForRequirements: 

13 @staticmethod 

14 def collect_test_cases_for_test_files( 

15 test_files: List[Path], 

16 codebeamer_url: str = "", 

17 ) -> List: 

18 """ 

19 Parse a list of source files for test cases 

20 

21 Parameters 

22 ---------- 

23 test_files: List[Path] 

24 Source files to parse 

25 codebeamer_url: str 

26 

27 Returns 

28 ------- 

29 List[TestCase] 

30 List of parsed TestCase 

31 """ 

32 test_cases = [] 

33 

34 for file in set(test_files): 

35 file_test_cases = ( 

36 ParserForRequirements.collect_test_cases(file, codebeamer_url)) 

37 test_cases.extend(file_test_cases) 

38 

39 return test_cases 

40 

41 @staticmethod 

42 def collect_test_cases( 

43 file: Path, 

44 codebeamer_url: str = "", 

45 ) -> List[TestCase]: 

46 """ 

47 Parse a source file for test cases 

48 

49 Parameters 

50 ---------- 

51 file: Path 

52 Source file to parse 

53 codebeamer_url: str 

54 

55 Returns 

56 ------- 

57 List[TestCase] 

58 List of parsed TestCase 

59 """ 

60 

61 try: 

62 with open(file, "r", encoding="UTF-8", errors="ignore") as f: 

63 lines = f.readlines() 

64 

65 except Exception as e: # pylint: disable=broad-exception-caught 

66 logging.error("exception %s", e) 

67 return [] 

68 

69 test_cases = [] 

70 

71 for i in range(0, len(lines)): 

72 test_case = TestCase.try_parse(file, lines, i, codebeamer_url) 

73 

74 if test_case: 

75 test_cases.append(test_case) 

76 return test_cases