1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
#!/usr/bin/env python
# vim: sw=4
# Canvas items should be able to be constructed like diacanvas.CanvasBox()
import diacanvas as dia
import unittest
import sys, gobject, weakref, gc
class CanvasTestCase(unittest.TestCase):
def testConstruction(self):
c = dia.Canvas()
self.failUnless(sys.getrefcount(c) == 3)
# One for the wrapper object
self.failUnless(c.__grefcount__ == 1)
w_c = weakref.ref(c)
self.failUnless(isinstance(c, dia.Canvas))
self.failUnless(isinstance(c.root, dia.CanvasGroup))
del c
gc.collect()
self.failIf(w_c(), 'Canvas not freed')
def testConstruction_2(self):
c = dia.Canvas()
self.failUnless(sys.getrefcount(c) == 3)
self.failUnless(c.__grefcount__ == 1)
i = dia.CanvasBox()
self.failUnless(isinstance(i, dia.CanvasBox))
self.failUnless(sys.getrefcount(i) == 3)
self.failUnless(i.__grefcount__ == 1)
w_c = weakref.ref(c)
w_i = weakref.ref(i)
i.set(parent=c.root)
# Only the refcount of the GObject increments ;-)
self.failUnless(sys.getrefcount(i) == 3)
self.failUnless(i.__grefcount__ == 2)
self.failIf(i.parent != c.root)
self.failIf(c.root.children[0] != i)
self.failUnless(sys.getrefcount(c) == 3)
self.failUnless(c.__grefcount__ == 1)
#self.failUnless(i.parent is None)
#self.failUnless(len(c.root.children) == 0)
del c, i
# HELP: We should do gc.collect() three times!?!
gc.collect()
gc.collect()
gc.collect()
self.failIf(w_c(), 'Canvas not freed')
self.failIf(w_i(), 'CanvasItem not freed: %s/%s' % (w_i() and sys.getrefcount(w_i()), w_i() and w_i().__grefcount__))
def testRemoveItem(self):
c = dia.Canvas()
i = dia.CanvasBox()
w_c = weakref.ref(c)
w_i = weakref.ref(i)
i.set(parent=c.root)
self.failUnless(isinstance(i, dia.CanvasBox))
self.failUnless(i.__grefcount__ == 2) # parent + wrapper
self.failUnless(len(c.root.children) == 1)
self.failIf(i.parent != c.root)
self.failIf(c.root.children[0] != i)
c.root.remove(i)
self.failUnless(len(c.root.children) == 0)
self.failUnless(sys.getrefcount(i) == 3)
self.failUnless(i.__grefcount__ == 1)
del c, i
gc.collect()
self.failIf(w_c(), 'Canvas not freed')
self.failIf(w_i(), 'CanvasItem not freed')
def testConnection(self):
c = dia.Canvas()
b1 = dia.CanvasBox()
b2 = dia.CanvasBox()
l = dia.CanvasLine()
b1.set(parent=c.root)
self.failUnless(sys.getrefcount(b1) == 3)
self.failUnless(b1.__grefcount__ == 2)
c.root.add(b2)
self.failUnless(sys.getrefcount(b2) == 3)
self.failUnless(b2.__grefcount__ == 2)
c.root.add(l)
self.failUnless(sys.getrefcount(l) == 3)
self.failUnless(l.__grefcount__ == 2)
b1.connect_handle(l.handles[0])
self.failUnless(sys.getrefcount(b1) == 3)
self.failUnless(b1.__grefcount__ == 2)
self.failUnless(sys.getrefcount(l) == 3)
self.failUnless(l.__grefcount__ == 2)
b2.connect_handle(l.handles[-1])
self.failUnless(sys.getrefcount(b2) == 3)
self.failUnless(b2.__grefcount__ == 2)
self.failUnless(sys.getrefcount(l) == 3)
self.failUnless(l.__grefcount__ == 2)
del c, b1, b2, l
gc.collect()
def testConstraint(self):
c = dia.Canvas()
con = dia.Constraint()
v = dia.Variable()
w_c = weakref.ref(c)
w_con = weakref.ref(con)
w_v = weakref.ref(v)
con.add(v, 1.0)
c.add_constraint(con)
del con
gc.collect()
self.failUnless(w_con(), 'Constraint shouldn\'t be freed')
del v
gc.collect()
self.failUnless(w_v(), 'Variable shouldn\'t be freed')
del c
gc.collect()
gc.collect()
gc.collect()
self.failIf(w_c(), 'Canvas not freed')
self.failIf(w_con(), 'Constraint not freed')
self.failIf(w_v(), 'Variable not freed')
if __name__ == '__main__':
unittest.main()
|