Coverage for bim2sim/utilities/test.py: 0%

44 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2025-03-12 17:09 +0000

1import logging 

2import os 

3import tempfile 

4from pathlib import Path 

5from typing import Union 

6 

7from bim2sim.project import Project 

8 

9# Set up logging at the module level 

10log_level = os.environ.get('BIM2SIM_LOG_LEVEL', 'ERROR') 

11logging.getLogger('bim2sim.QualityReport').setLevel(getattr(logging, log_level)) 

12 

13 

14class IntegrationBase: 

15 """Base class mixin for Integration tests""" 

16 

17 def setUp(self) -> None: 

18 self.project = None 

19 self.is_ci = any(var in os.environ for var in ( 

20 'GITLAB_CI', 'TRAVIS', 'CIRCLECI', 'GITHUB_ACTIONS' 

21 )) 

22 print(f"Current Infrastructure is CI: {self.is_ci}") 

23 

24 def tearDown(self): 

25 if self.project: 

26 self.project.delete() 

27 self.assertFalse(self.project.paths.root.exists()) 

28 self.project = None 

29 

30 def create_project( 

31 self, ifc_names: dict, 

32 plugin: str) -> Project: 

33 """create project in temporary directory which is cleaned automatically 

34 after test. 

35 

36 Args: 

37 ifc_names: dict with key: IFCDomain and value: name of ifc located 

38 in directory test/resources/hydraulic/ifc 

39 plugin: e.g. 'hkesim', 'aixlib', ... 

40 

41 Returns: 

42 project: bim2sim project 

43 """ 

44 # create paths to IFCs based on ifc_names dict 

45 ifc_paths = {} 

46 for domain, ifc_name in ifc_names.items(): 

47 ifc_paths[domain] = \ 

48 self.test_resources_path() / self.model_domain_path() / \ 

49 "ifc" / ifc_name 

50 

51 self.project = Project.create( 

52 tempfile.TemporaryDirectory(prefix='bim2sim_').name, 

53 ifc_paths=ifc_paths, 

54 plugin=plugin) 

55 # set weather file data 

56 self.project.sim_settings.weather_file_path = self.weather_file_path() 

57 return self.project 

58 

59 @staticmethod 

60 def test_resources_path() -> Path: 

61 return Path(__file__).parent.parent.parent / 'test/resources' 

62 

63 def model_domain_path(self) -> Union[str, None]: 

64 return None 

65 

66 def weather_file_path(self) -> Path: 

67 return (self.test_resources_path() / 

68 'weather_files/DEU_NW_Aachen.105010_TMYx.mos') 

69 

70 

71class RegressionTestBase(IntegrationBase): 

72 """Base class for regression tests.""" 

73 def setUp(self): 

74 self.results_src_dir = None 

75 self.results_dst_dir = None 

76 self.tester = None 

77 super().setUp() 

78 

79 def create_regression_setup(self, tolerance): 

80 raise NotImplementedError 

81 

82 def run_regression_test(self): 

83 raise NotImplementedError 

84 

85 def model_domain_path(self) -> str: 

86 return 'arch'