root/gaphor/tags/gaphor-0.11.1/tests/test-diagramitems.py

Revision 421, 7.2 kB (checked in by arjanmol, 4 years ago)

*** empty log message ***

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1 # vim:sw=4:et:ai
2
3 import unittest
4 from weakref import ref as wref
5 from sys import getrefcount
6 import gaphor.UML as UML
7 import gaphor.diagram as diagram
8
9 factory = UML.ElementFactory()
10
11 class TestDiagramItems(unittest.TestCase):
12
13     def gc_collect(self):
14         import gc
15         for x in range(6): gc.collect()
16
17     def _testTemplate1(self, uml_class, item_class):
18         m = factory.create(UML.Package)
19         d = factory.create(UML.Diagram)
20         d.package = m
21         p1 = factory.create(uml_class)
22         p1.package = m
23         pi1 = d.create(item_class)
24         pi1.subject = p1
25         w_m = wref(m)
26         w_d = wref(d)
27         w_p1 = wref(p1)
28         w_pi1 = wref(pi1)
29         del m, d, p1, pi1
30         factory.flush()
31         self.gc_collect()
32         self.assertEquals(w_m(), None)
33         self.failUnless(w_d() is None)
34         self.failUnless(w_p1() is None)
35         self.failUnless(w_pi1() is None)
36
37     def _testTemplate2(self, uml_class, item_class):
38         m = factory.create(UML.Package)
39         d = factory.create(UML.Diagram)
40         d.package = m
41         p1 = factory.create(uml_class)
42         p1.package = m
43         pi1 = d.create(item_class)
44         pi1.subject = p1
45         rc_p1 = getrefcount(p1)
46         rc_pi1 = getrefcount(pi1)
47         p2 = factory.create(uml_class)
48         p2.package = m
49         pi2 = d.create(item_class)
50         pi2.subject = p2
51         self.assertEquals(getrefcount(p1), rc_p1)
52         self.assertEquals(getrefcount(pi1), rc_pi1)
53         d.canvas.update_now()
54         self.assertEquals(getrefcount(p1), rc_p1)
55         self.assertEquals(getrefcount(pi1), rc_pi1)
56         w_m = wref(m)
57         w_d = wref(d)
58         w_p1 = wref(p1)
59         w_pi1 = wref(pi1)
60         w_p2 = wref(p2)
61         w_pi2 = wref(pi2)
62         self.assertEquals(getrefcount(p1), rc_p1)
63         self.assertEquals(getrefcount(pi1), rc_pi1)
64         del m, d, p1, pi1, p2, pi2
65         self.assertEquals(getrefcount(w_p1()), rc_p1 - 1)
66         self.assertEquals(getrefcount(w_pi1()), rc_pi1 - 1)
67         factory.flush()
68         self.gc_collect()
69         self.failUnless(w_p1() is None, getrefcount(w_p1()))
70         self.failUnless(w_pi1() is None, getrefcount(w_p1()))
71         self.failUnless(w_p2() is None, getrefcount(w_p1()))
72         self.failUnless(w_pi2() is None, getrefcount(w_p1()))
73         self.failUnless(w_m() is None, getrefcount(w_p1()))
74         self.failUnless(w_d() is None, getrefcount(w_p1()))
75
76     def testPackage1(self):
77         self._testTemplate1(UML.Package, diagram.PackageItem)
78
79     def testPackage2(self):
80         self._testTemplate2(UML.Package, diagram.PackageItem)
81
82     def testClass1(self):
83         self._testTemplate1(UML.Class, diagram.ClassItem)
84
85     def testClass2(self):
86         self._testTemplate2(UML.Class, diagram.ClassItem)
87
88     def testDependency1(self):
89         self._testTemplate1(UML.Dependency, diagram.DependencyItem)
90
91     def testDependency2(self):
92         self._testTemplate2(UML.Dependency, diagram.DependencyItem)
93
94     def _testTemplate3(self, uml_class, item_class):
95         import gtk
96         import gaphor.ui as ui
97         m = factory.create(UML.Package)
98         d = factory.create(UML.Diagram)
99         d.package = m
100         p1 = factory.create(uml_class)
101         p1.package = m
102         pi1 = d.create(item_class)
103         pi1.subject = p1
104         rc_p1 = getrefcount(p1)
105         rc_pi1 = getrefcount(pi1)
106         p2 = factory.create(uml_class)
107         p2.package = m
108         pi2 = d.create(item_class)
109         pi2.subject = p2
110         self.assertEquals(getrefcount(p1), rc_p1)
111         self.assertEquals(getrefcount(pi1), rc_pi1)
112         d.canvas.update_now()
113         win = gtk.Window()
114         view = ui.DiagramView(d)
115         win.add(view)
116         win.show_all()
117         win.destroy()
118         self.assertEquals(getrefcount(p1), rc_p1)
119         self.assertEquals(getrefcount(pi1), rc_pi1)
120         w_m = wref(m)
121         w_d = wref(d)
122         w_p1 = wref(p1)
123         w_pi1 = wref(pi1)
124         w_p2 = wref(p2)
125         w_pi2 = wref(pi2)
126         self.assertEquals(getrefcount(p1), rc_p1)
127         self.assertEquals(getrefcount(pi1), rc_pi1)
128         del m, d, p1, pi1, p2, pi2
129         del win, view
130         self.assertEquals(getrefcount(w_p1()), rc_p1 - 1)
131         self.assertEquals(getrefcount(w_pi1()), rc_pi1 - 1)
132         factory.flush()
133         self.gc_collect()
134         self.failUnless(w_p1() is None, getrefcount(w_p1()))
135         self.failUnless(w_pi1() is None, getrefcount(w_p1()))
136         self.failUnless(w_p2() is None, getrefcount(w_p1()))
137         self.failUnless(w_pi2() is None, getrefcount(w_p1()))
138         self.failUnless(w_m() is None, getrefcount(w_p1()))
139         self.failUnless(w_d() is None, getrefcount(w_p1()))
140
141     def testSubjectNotify(self):
142         """Test the working of the DiagramItem.on_subject_notify().
143         """
144         p1 = factory.create(UML.Package)
145         p2 = factory.create(UML.Package)
146         c = factory.create(UML.Class)
147         d = factory.create(UML.Diagram)
148         self.failUnless(getrefcount(c) == 3, getrefcount(c))
149         ci = d.create(diagram.ClassItem)
150
151         # Add the class to the item
152         #c.package = p1
153         ci.subject = c
154         self.failUnless(len(c._observers['appliedStereotype']) == 1,
155                         c._observers['appliedStereotype'])
156         self.failUnless(len(c._observers['isAbstract']) == 1,
157                         c._observers['isAbstract'])
158         self.failUnless(len(c._observers['namespace']) == 2,
159                         c._observers['namespace'])
160         self.failUnless(len(c._observers['ownedOperation']) == 1,
161                         c._observers['ownedOperation'])
162         self.failUnless(len(c._observers['ownedAttribute']) == 1,
163                         c._observers['ownedAttribute'])
164        
165         # Change the package:
166         #print '\n\nPhase 2:'
167         c.package = p1
168         self.failUnless(len(c._observers['namespace']) == 2,
169                         c._observers['namespace'])
170         self.failUnless(len(p1._observers.get('name', [])) == 1,
171                         p1._observers.get('name'))
172
173         #print '\n\nPhase 3:'
174         c.package = p2
175         self.failUnless(len(c._observers['namespace']) == 2,
176                         c._observers['namespace'])
177         self.failUnless(len(p1._observers.get('name', [])) == 0,
178                         p1._observers.get('name'))
179         self.failUnless(len(p2._observers.get('name', [])) == 1,
180                         p2._observers.get('name'))
181
182         ci.subject = None
183         # Note: does a __unlink__ on all elements -> c.package = None
184         self.failUnless(len(c._observers['namespace']) == 0,
185                         c._observers['namespace'])
186         self.failUnless(len(p1._observers.get('name', [])) == 0,
187                         p1._observers.get('name'))
188         self.failUnless(len(p2._observers.get('name', [])) == 0,
189                         p2._observers.get('name'))
190        
191         #print '\nLast:'
192         c.package = p2
193         ci.subject = c
194         self.failUnless(len(c._observers['namespace']) == 2,
195                         c._observers['namespace'])
196         self.failUnless(len(p1._observers.get('name', [])) == 0,
197                         p1._observers.get('name'))
198         self.failUnless(len(p2._observers.get('name', [])) == 1,
199                         p2._observers.get('name'))
200        
201 if __name__ == '__main__':
202     unittest.main()
203
Note: See TracBrowser for help on using the browser.