Salome HOME
Copyrights update 2015.
[modules/yacs.git] / src / yacsloader_swig / Test / testRefcount.py
1 # Copyright (C) 2006-2015  CEA/DEN, EDF R&D
2 #
3 # This library is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU Lesser General Public
5 # License as published by the Free Software Foundation; either
6 # version 2.1 of the License, or (at your option) any later version.
7 #
8 # This library is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 # Lesser General Public License for more details.
12 #
13 # You should have received a copy of the GNU Lesser General Public
14 # License along with this library; if not, write to the Free Software
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 #
17 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 #
19
20 import unittest
21 import pilot
22 import SALOMERuntime
23
24 class TestContainerRef(unittest.TestCase):
25   def setUp(self):
26     SALOMERuntime.RuntimeSALOME_setRuntime()
27     self.r=SALOMERuntime.getSALOMERuntime()
28     self.p=self.r.createProc("pr")
29
30   def test0(self):
31     """test delete following creation from class"""
32     co=self.r.createContainer()
33     self.assertEqual(co.getRefCnt(), 1)
34     self.assert_(co.thisown)
35     del co
36
37   def test1(self):
38     """test delete following creation from createContainer and delitem from containerMap"""
39     co=self.p.createContainer("c2")
40     del self.p.containerMap["c2"]
41     self.assert_(co.thisown)
42     self.assertEqual(co.getRefCnt(), 1)
43     del co
44
45   def test2(self):
46     """test delete following creation from createContainer and
47        manipulations on containerMap
48     """
49     co=self.p.createContainer("c2")
50     self.p.containerMap["c2"]=co
51     del self.p.containerMap["c2"]
52     self.assert_(co.thisown)
53     self.assertEqual(co.getRefCnt(), 1)
54     del co
55
56   def test3(self):
57     """test existence on getitem followed by delitem"""
58     self.p.createContainer("c9")
59     co=self.p.containerMap["c9"]
60     self.assertEqual(co.getRefCnt(), 2)
61     del self.p.containerMap["c9"]
62     self.assertEqual(co.getName(), "c9")
63     self.assertEqual(co.getRefCnt(), 1)
64     self.assert_(co.thisown)
65     del co
66
67   def test4(self):
68     """test delete from containerMap following creation from createContainer"""
69     co=self.p.createContainer("c10")
70     del self.p.containerMap["c10"]
71     self.assertEqual(co.getName(), "c10")
72     self.assertEqual(co.getRefCnt(), 1)
73     self.assert_(co.thisown)
74     del co
75
76   def test5(self):
77     """test existence container following delete proc"""
78     co=self.p.createContainer("c10")
79     del self.p
80     self.assertEqual(co.getName(), "c10")
81     self.assertEqual(co.getRefCnt(), 1)
82     self.assert_(co.thisown)
83     del co
84
85   def test6(self):
86     """test ownership of container on getitem from containerMap"""
87     co=self.p.createContainer("c8")
88     self.assertEqual(co.getRefCnt(), 2)
89     self.assert_(co.thisown)
90     del co
91     self.assertEqual(self.p.containerMap["c8"].getRefCnt(), 2) # +1 for getitem
92     co=self.p.containerMap["c8"]
93     self.assertEqual(co.getRefCnt(), 2)
94     self.assert_(co.thisown)
95     del co
96     self.assertEqual(self.p.containerMap["c8"].getRefCnt(), 2) # +1 for getitem
97     del self.p.containerMap["c8"]
98
99   def test7(self):
100     """test getitem following creation from class"""
101     co=self.r.createContainer()
102     self.assertEqual(co.getRefCnt(), 1)
103     self.p.containerMap["c8"]=co
104     self.assertEqual(co.getRefCnt(), 2)
105     d=self.p.containerMap["c8"]
106     self.assertEqual(d.getRefCnt(), 3)
107     del self.p.containerMap["c8"]
108     self.assertEqual(d.getRefCnt(), 2)
109     self.assertEqual(co.getRefCnt(), 2)
110     del co
111     self.assertEqual(d.getRefCnt(), 1)
112
113   def test8(self):
114     """test setitem following creation from class"""
115     co=self.r.createContainer()
116     self.p.containerMap["c8"]=co
117     d=self.p.containerMap["c8"]
118     self.p.containerMap["c9"]=d
119     self.assertEqual(d.getRefCnt(), 4)
120
121   def test9(self):
122     """test method values"""
123     self.p.createContainer("c8")
124     for co in self.p.containerMap.values():
125       self.assert_(co.thisown)
126       self.assertEqual(co.getRefCnt(), 2)
127
128   def test10(self):
129     """test method items"""
130     self.p.createContainer("c8")
131     for k,co in self.p.containerMap.items():
132       self.assert_(co.thisown)
133       self.assertEqual(co.getRefCnt(), 2)
134
135   def test11(self):
136     """test method clear"""
137     co=self.p.createContainer("c8")
138     self.p.containerMap.clear()
139     self.assert_(co.thisown)
140     self.assertEqual(co.getRefCnt(), 1)
141
142   def test12(self):
143     """test method update"""
144     co=self.p.createContainer("c8")
145     d={"c1":co}
146     self.p.containerMap.update(d)
147     self.assert_(co.thisown)
148     self.assertEqual(co.getRefCnt(), 3)
149
150 class TestTypeCodeRef(unittest.TestCase):
151   def setUp(self):
152     self.r=SALOMERuntime.getSALOMERuntime()
153     self.p=self.r.createProc("pr")
154
155   def test0(self):
156     """test delete following creation from createSequenceTc"""
157     tc=pilot.TypeCode(pilot.Double)
158     self.assertEqual(tc.getRefCnt(), 1)
159     self.assert_(tc.thisown)
160
161   def test1(self):
162     """test delete following creation from createInterfaceTc and delitem from typeMap"""
163     tc=self.p.createInterfaceTc("","obj",[])
164     del self.p.typeMap["obj"]
165     self.assert_(tc.thisown)
166     self.assertEqual(tc.getRefCnt(), 1)
167
168   def test2(self):
169     """test delete following creation from createInterfaceTc and
170        manipulations on typeMap
171     """
172     tc=self.p.createInterfaceTc("","obj",[])
173     self.p.typeMap["obj"]=tc
174     del self.p.typeMap["obj"]
175     self.assert_(tc.thisown)
176     self.assertEqual(tc.getRefCnt(), 1)
177
178   def test3(self):
179     """test existence on getitem followed by delitem"""
180     self.p.createInterfaceTc("","obj",[])
181     tc=self.p.typeMap["obj"]
182     self.assertEqual(tc.getRefCnt(), 2)
183     del self.p.typeMap["obj"]
184     self.assertEqual(tc.getRefCnt(), 1)
185     self.assert_(tc.thisown)
186
187   def test4(self):
188     """test delete from typeMap following creation from createInterfaceTc"""
189     tc=self.p.createInterfaceTc("","obj",[])
190     del self.p.typeMap["obj"]
191     self.assertEqual(tc.getRefCnt(), 1)
192     self.assert_(tc.thisown)
193
194   def test5(self):
195     """test existence TypeCode following delete proc"""
196     tc=self.p.createInterfaceTc("","obj",[])
197     del self.p
198     self.assertEqual(tc.getRefCnt(), 1)
199     self.assert_(tc.thisown)
200
201   def test6(self):
202     """test ownership of TypeCode on getitem from typeMap"""
203     tc=self.p.createInterfaceTc("","obj",[])
204     self.assertEqual(tc.getRefCnt(), 2)
205     self.assert_(tc.thisown)
206     del tc
207     self.assertEqual(self.p.typeMap["obj"].getRefCnt(), 2) # +1 for getitem
208     tc=self.p.typeMap["obj"]
209     self.assertEqual(tc.getRefCnt(), 2)
210     self.assert_(tc.thisown)
211     del tc
212     self.assertEqual(self.p.typeMap["obj"].getRefCnt(), 2) # +1 for getitem
213     del self.p.typeMap["obj"]
214
215   def test7(self):
216     """test getitem following creation from class"""
217     tc=pilot.TypeCode.interfaceTc("obj","obj")
218     self.assertEqual(tc.getRefCnt(), 1)
219     self.p.typeMap["obj"]=tc
220     self.assertEqual(tc.getRefCnt(), 2)
221     d=self.p.typeMap["obj"]
222     self.assertEqual(d.getRefCnt(), 3)
223     del self.p.typeMap["obj"]
224     self.assertEqual(d.getRefCnt(), 2)
225     self.assertEqual(tc.getRefCnt(), 2)
226     del tc
227     self.assertEqual(d.getRefCnt(), 1)
228
229   def test8(self):
230     """test setitem following creation from class"""
231     tc=pilot.TypeCodeObjref("obj","obj")
232     self.p.typeMap["obj"]=tc
233     d=self.p.typeMap["obj"]
234     self.p.typeMap["t9"]=d
235     self.assertEqual(d.getRefCnt(), 4)
236
237   def test9(self):
238     """test method values"""
239     self.p.createInterfaceTc("","obj",[])
240     for tc in self.p.typeMap.values():
241       if tc.name()!="obj":continue
242       self.assert_(tc.thisown)
243       self.assertEqual(tc.getRefCnt(), 2)
244
245   def test10(self):
246     """test method items"""
247     self.p.createInterfaceTc("","obj",[])
248     for k,tc in self.p.typeMap.items():
249       if tc.name()!="obj":continue
250       self.assert_(tc.thisown)
251       self.assertEqual(tc.getRefCnt(), 2)
252
253   def test11(self):
254     """test method clear"""
255     tc=self.p.createInterfaceTc("","obj",[])
256     self.p.typeMap.clear()
257     self.assert_(tc.thisown)
258     self.assertEqual(tc.getRefCnt(), 1)
259
260   def test12(self):
261     """test method update"""
262     tc=self.p.createInterfaceTc("","obj",[])
263     d={"c1":tc}
264     self.p.typeMap.update(d)
265     self.assert_(tc.thisown)
266     self.assertEqual(tc.getRefCnt(), 3)
267
268 import os
269 U = os.getenv('USER')
270 f=open("/tmp/" + U + "/UnitTestsResult", 'a')
271 f.write("  --- TEST src/yacsloader: testRefcount.py\n")
272 suite1 = unittest.makeSuite(TestContainerRef)
273 suite2 = unittest.makeSuite(TestTypeCodeRef)
274 suite = unittest.TestSuite((suite1, suite2))
275 result=unittest.TextTestRunner(f, descriptions=1, verbosity=1).run(suite)
276 f.close()
277 sys.exit(not result.wasSuccessful())