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

Revision 1859, 7.3 kB (checked in by arj..@yirdis.nl, 1 year ago)

All tests run, except test_activitynodes.py.

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