Coverage for test/unit/elements/mapping/test_finder.py: 97%
59 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
1"""Testing Finders
2"""
4import os
5import tempfile
6import unittest
7from pathlib import Path
9from bim2sim.elements.mapping import ifc2python
10from bim2sim.elements import hvac_elements as hvac
11from bim2sim.elements.mapping.finder import TemplateFinder
13IFC_PATH = (Path(
14 __file__).parent.parent.parent.parent /
15 'resources/hydraulic/ifc'
16 '/KM_DPM_Vereinshaus_Gruppe62_Heizung_with_pumps.ifc')
19class TestTemplateFinder(unittest.TestCase):
21 @classmethod
22 def setUpClass(cls):
23 cls.root = tempfile.TemporaryDirectory(prefix='bim2sim_')
24 os.mkdir(os.path.join(cls.root.name, 'templates'))
25 cls.ifc = ifc2python.load_ifc(IFC_PATH)
26 pipefittings = TestTemplateFinder.ifc.by_type("IfcPipeFitting")
27 pipes = TestTemplateFinder.ifc.by_type("IfcPipeSegment")
28 cls.pipe1 = hvac.Pipe(ifc=pipes[0], ifc_units={})
29 cls.pipe2 = hvac.Pipe(ifc=pipes[1], ifc_units={})
30 cls.pipefitting1 = hvac.PipeFitting(ifc=pipefittings[0], ifc_units={})
31 cls.pipefitting2 = hvac.PipeFitting(ifc=pipefittings[1], ifc_units={})
33 @classmethod
34 def tearDownClass(cls):
35 # Decision.reset_decisions()
36 cls.root.cleanup()
38 def setUp(self):
39 self.finder = TemplateFinder()
40 for decision in self.finder.initialize(self.ifc):
41 decision.value = 'Other'
43 def tearDown(self):
44 del self.finder
46 def test_set_find(self):
47 tool = self.finder.default_source_tool.templ_name
49 self.finder.set(tool, 'Pipe', 'length', 'Abmessungen',
50 'Länge')
51 self.finder.set(tool, 'Pipe', 'diameter', 'Abmessungen',
52 'Innendurchmesser')
53 self.finder.set(tool, 'PipeFitting', 'diameter', 'Abmessungen',
54 'Nenndurchmesser')
56 l1 = self.finder.find(self.pipe1, 'length')
57 d1 = self.finder.find(self.pipe1, 'diameter')
58 l2 = self.finder.find(self.pipe2, 'length')
59 d2 = self.finder.find(self.pipe2, 'diameter')
60 l3 = self.finder.find(self.pipefitting1, 'length')
61 d3 = self.finder.find(self.pipefitting1, 'diameter')
62 self.assertEqual(l1, 118.000000000006)
63 self.assertEqual(l2, 157.999999999979)
64 self.assertEqual(l3, 12.0)
65 self.assertEqual(d1, 10.66)
66 self.assertEqual(d2, 10.66)
67 self.assertEqual(d3, 15.0)
69 def test_save_load(self):
70 tool = self.finder.default_source_tool.templ_name
71 self.finder.set(tool, 'Pipe', 'length', 'Abmessungen',
72 'Länge')
73 self.finder.set(tool, 'Pipe', 'diameter', 'Abmessungen',
74 'Innendurchmesser')
75 self.finder.set(tool, 'PipeFitting', 'diameter', 'Abmessungen',
76 'Nenndurchmesser')
78 data = self.finder.templates.copy()
80 path = os.path.join(self.root.name, 'templates')
81 self.finder.save(path)
83 self.finder.templates.clear()
85 self.finder.load(path)
87 self.assertDictEqual(data, self.finder.templates)
90if __name__ == '__main__':
91 unittest.main()