2 # Copyright (C) 2006-2022 CEA/DEN, EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
25 class TestContainerRef(unittest.TestCase):
27 SALOMERuntime.RuntimeSALOME_setRuntime()
28 self.r=SALOMERuntime.getSALOMERuntime()
29 self.p=self.r.createProc("pr")
32 """test delete following creation from class"""
33 co=self.r.createContainer()
34 self.assertEqual(co.getRefCnt(), 1)
35 self.assertTrue(co.thisown)
39 """test delete following creation from createContainer and delitem from containerMap"""
40 co=self.p.createContainer("c2")
41 del self.p.containerMap["c2"]
42 self.assertTrue(co.thisown)
43 self.assertEqual(co.getRefCnt(), 1)
47 """test delete following creation from createContainer and
48 manipulations on containerMap
50 co=self.p.createContainer("c2")
51 self.p.containerMap["c2"]=co
52 del self.p.containerMap["c2"]
53 self.assertTrue(co.thisown)
54 self.assertEqual(co.getRefCnt(), 1)
58 """test existence on getitem followed by delitem"""
59 self.p.createContainer("c9")
60 co=self.p.containerMap["c9"]
61 self.assertEqual(co.getRefCnt(), 2)
62 del self.p.containerMap["c9"]
63 self.assertEqual(co.getName(), "c9")
64 self.assertEqual(co.getRefCnt(), 1)
65 self.assertTrue(co.thisown)
69 """test delete from containerMap following creation from createContainer"""
70 co=self.p.createContainer("c10")
71 del self.p.containerMap["c10"]
72 self.assertEqual(co.getName(), "c10")
73 self.assertEqual(co.getRefCnt(), 1)
74 self.assertTrue(co.thisown)
78 """test existence container following delete proc"""
79 co=self.p.createContainer("c10")
81 self.assertEqual(co.getName(), "c10")
82 self.assertEqual(co.getRefCnt(), 1)
83 self.assertTrue(co.thisown)
87 """test ownership of container on getitem from containerMap"""
88 co=self.p.createContainer("c8")
89 self.assertEqual(co.getRefCnt(), 2)
90 self.assertTrue(co.thisown)
92 self.assertEqual(self.p.containerMap["c8"].getRefCnt(), 2) # +1 for getitem
93 co=self.p.containerMap["c8"]
94 self.assertEqual(co.getRefCnt(), 2)
95 self.assertTrue(co.thisown)
97 self.assertEqual(self.p.containerMap["c8"].getRefCnt(), 2) # +1 for getitem
98 del self.p.containerMap["c8"]
101 """test getitem following creation from class"""
102 co=self.r.createContainer()
103 self.assertEqual(co.getRefCnt(), 1)
104 self.p.containerMap["c8"]=co
105 self.assertEqual(co.getRefCnt(), 2)
106 d=self.p.containerMap["c8"]
107 self.assertEqual(d.getRefCnt(), 3)
108 del self.p.containerMap["c8"]
109 self.assertEqual(d.getRefCnt(), 2)
110 self.assertEqual(co.getRefCnt(), 2)
112 self.assertEqual(d.getRefCnt(), 1)
115 """test setitem following creation from class"""
116 co=self.r.createContainer()
117 self.p.containerMap["c8"]=co
118 d=self.p.containerMap["c8"]
119 self.p.containerMap["c9"]=d
120 self.assertEqual(d.getRefCnt(), 4)
123 """test method values"""
124 self.p.createContainer("c8")
125 for co in list(self.p.containerMap.values()):
126 self.assertTrue(co.thisown)
127 self.assertEqual(co.getRefCnt(), 2)
130 """test method items"""
131 self.p.createContainer("c8")
132 for k,co in list(self.p.containerMap.items()):
133 self.assertTrue(co.thisown)
134 self.assertEqual(co.getRefCnt(), 2)
137 """test method clear"""
138 co=self.p.createContainer("c8")
139 self.p.containerMap.clear()
140 self.assertTrue(co.thisown)
141 self.assertEqual(co.getRefCnt(), 1)
144 """test method update"""
145 co=self.p.createContainer("c8")
147 self.p.containerMap.update(d)
148 self.assertTrue(co.thisown)
149 self.assertEqual(co.getRefCnt(), 3)
151 class TestTypeCodeRef(unittest.TestCase):
153 self.r=SALOMERuntime.getSALOMERuntime()
154 self.p=self.r.createProc("pr")
157 """test delete following creation from createSequenceTc"""
158 tc=pilot.TypeCode(pilot.Double)
159 self.assertEqual(tc.getRefCnt(), 1)
160 self.assertTrue(tc.thisown)
163 """test delete following creation from createInterfaceTc and delitem from typeMap"""
164 tc=self.p.createInterfaceTc("","obj",[])
165 del self.p.typeMap["obj"]
166 self.assertTrue(tc.thisown)
167 self.assertEqual(tc.getRefCnt(), 1)
170 """test delete following creation from createInterfaceTc and
171 manipulations on typeMap
173 tc=self.p.createInterfaceTc("","obj",[])
174 self.p.typeMap["obj"]=tc
175 del self.p.typeMap["obj"]
176 self.assertTrue(tc.thisown)
177 self.assertEqual(tc.getRefCnt(), 1)
180 """test existence on getitem followed by delitem"""
181 self.p.createInterfaceTc("","obj",[])
182 tc=self.p.typeMap["obj"]
183 self.assertEqual(tc.getRefCnt(), 2)
184 del self.p.typeMap["obj"]
185 self.assertEqual(tc.getRefCnt(), 1)
186 self.assertTrue(tc.thisown)
189 """test delete from typeMap following creation from createInterfaceTc"""
190 tc=self.p.createInterfaceTc("","obj",[])
191 del self.p.typeMap["obj"]
192 self.assertEqual(tc.getRefCnt(), 1)
193 self.assertTrue(tc.thisown)
196 """test existence TypeCode following delete proc"""
197 tc=self.p.createInterfaceTc("","obj",[])
199 self.assertEqual(tc.getRefCnt(), 1)
200 self.assertTrue(tc.thisown)
203 """test ownership of TypeCode on getitem from typeMap"""
204 tc=self.p.createInterfaceTc("","obj",[])
205 self.assertEqual(tc.getRefCnt(), 2)
206 self.assertTrue(tc.thisown)
208 self.assertEqual(self.p.typeMap["obj"].getRefCnt(), 2) # +1 for getitem
209 tc=self.p.typeMap["obj"]
210 self.assertEqual(tc.getRefCnt(), 2)
211 self.assertTrue(tc.thisown)
213 self.assertEqual(self.p.typeMap["obj"].getRefCnt(), 2) # +1 for getitem
214 del self.p.typeMap["obj"]
217 """test getitem following creation from class"""
218 tc=pilot.TypeCode.interfaceTc("obj","obj")
219 self.assertEqual(tc.getRefCnt(), 1)
220 self.p.typeMap["obj"]=tc
221 self.assertEqual(tc.getRefCnt(), 2)
222 d=self.p.typeMap["obj"]
223 self.assertEqual(d.getRefCnt(), 3)
224 del self.p.typeMap["obj"]
225 self.assertEqual(d.getRefCnt(), 2)
226 self.assertEqual(tc.getRefCnt(), 2)
228 self.assertEqual(d.getRefCnt(), 1)
231 """test setitem following creation from class"""
232 tc=pilot.TypeCodeObjref("obj","obj")
233 self.p.typeMap["obj"]=tc
234 d=self.p.typeMap["obj"]
235 self.p.typeMap["t9"]=d
236 self.assertEqual(d.getRefCnt(), 4)
239 """test method values"""
240 self.p.createInterfaceTc("","obj",[])
241 for tc in list(self.p.typeMap.values()):
242 if tc.name()!="obj":continue
243 self.assertTrue(tc.thisown)
244 self.assertEqual(tc.getRefCnt(), 2)
247 """test method items"""
248 self.p.createInterfaceTc("","obj",[])
249 for k,tc in list(self.p.typeMap.items()):
250 if tc.name()!="obj":continue
251 self.assertTrue(tc.thisown)
252 self.assertEqual(tc.getRefCnt(), 2)
255 """test method clear"""
256 tc=self.p.createInterfaceTc("","obj",[])
257 self.p.typeMap.clear()
258 self.assertTrue(tc.thisown)
259 self.assertEqual(tc.getRefCnt(), 1)
262 """test method update"""
263 tc=self.p.createInterfaceTc("","obj",[])
265 self.p.typeMap.update(d)
266 self.assertTrue(tc.thisown)
267 self.assertEqual(tc.getRefCnt(), 3)
269 if __name__ == '__main__':
272 dir_test = tempfile.mkdtemp(suffix=".yacstest")
273 file_test = os.path.join(dir_test,"UnitTestsResult")
274 with open(file_test, 'a') as f:
275 f.write(" --- TEST src/yacsloader: testRefcount.py\n")
276 suite1 = unittest.makeSuite(TestContainerRef)
277 suite2 = unittest.makeSuite(TestTypeCodeRef)
278 suite = unittest.TestSuite((suite1, suite2))
279 result=unittest.TextTestRunner(f, descriptions=1, verbosity=1).run(suite)
280 sys.exit(not result.wasSuccessful())