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
« 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
7from bim2sim.project import Project
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))
14class IntegrationBase:
15 """Base class mixin for Integration tests"""
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}")
24 def tearDown(self):
25 if self.project:
26 self.project.delete()
27 self.assertFalse(self.project.paths.root.exists())
28 self.project = None
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.
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', ...
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
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
59 @staticmethod
60 def test_resources_path() -> Path:
61 return Path(__file__).parent.parent.parent / 'test/resources'
63 def model_domain_path(self) -> Union[str, None]:
64 return None
66 def weather_file_path(self) -> Path:
67 return (self.test_resources_path() /
68 'weather_files/DEU_NW_Aachen.105010_TMYx.mos')
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()
79 def create_regression_setup(self, tolerance):
80 raise NotImplementedError
82 def run_regression_test(self):
83 raise NotImplementedError
85 def model_domain_path(self) -> str:
86 return 'arch'