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

1"""Testing Finders 

2""" 

3 

4import os 

5import tempfile 

6import unittest 

7from pathlib import Path 

8 

9from bim2sim.elements.mapping import ifc2python 

10from bim2sim.elements import hvac_elements as hvac 

11from bim2sim.elements.mapping.finder import TemplateFinder 

12 

13IFC_PATH = (Path( 

14 __file__).parent.parent.parent.parent / 

15 'resources/hydraulic/ifc' 

16 '/KM_DPM_Vereinshaus_Gruppe62_Heizung_with_pumps.ifc') 

17 

18 

19class TestTemplateFinder(unittest.TestCase): 

20 

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={}) 

32 

33 @classmethod 

34 def tearDownClass(cls): 

35 # Decision.reset_decisions() 

36 cls.root.cleanup() 

37 

38 def setUp(self): 

39 self.finder = TemplateFinder() 

40 for decision in self.finder.initialize(self.ifc): 

41 decision.value = 'Other' 

42 

43 def tearDown(self): 

44 del self.finder 

45 

46 def test_set_find(self): 

47 tool = self.finder.default_source_tool.templ_name 

48 

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') 

55 

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) 

68 

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') 

77 

78 data = self.finder.templates.copy() 

79 

80 path = os.path.join(self.root.name, 'templates') 

81 self.finder.save(path) 

82 

83 self.finder.templates.clear() 

84 

85 self.finder.load(path) 

86 

87 self.assertDictEqual(data, self.finder.templates) 

88 

89 

90if __name__ == '__main__': 

91 unittest.main()