def test__registerDoubleAttribute(self): """check Attributes._registerDoubleAttribute() """ d = {'g_called': False, 's_called': False, 'value': 0} def g(obj): d['g_called'] = True return d['value'] def s(obj, value): d['s_called'] = True d['value'] = value return a = Attributes() wa = weakref.ref(a) self.failIf(wa() is None) a._registerDoubleAttribute('a1', g, s) self.failIf('a1' in a.__dict__) self.failIf(d['g_called']) self.failIf(d['s_called']) self.assertEqual(0, a.a1) self.failUnless(d['g_called']) self.failIf(d['s_called']) a.a1 = 47 self.failUnless(d['s_called']) self.assertEqual(47, d['value']) self.failUnless(hasattr(a, 'a1')) a._registerDoubleAttribute('a1readonly', g) self.assertEqual(47, a.a1readonly) self.failUnless(hasattr(a, 'a1readonly')) self.assertRaises(AttributeError, a._setDoubleAttr, 'a1readonly', 7) self.assertRaises(AttributeError, setattr, a, 'a1readonly', 5) self.assertEqual(47, a.a1readonly) a.a1 = 9 self.assertEqual(9, a.a1readonly) del a self.failUnless(wa() is None) return
def test__registerDoubleAttribute(self): """check Attributes._registerDoubleAttribute() """ d = {'g_called' : False, 's_called' : False, 'value' : 0} def g(obj): d['g_called'] = True return d['value'] def s(obj, value): d['s_called'] = True d['value'] = value return a = Attributes() wa = weakref.ref(a) a._registerDoubleAttribute('a1', g, s) self.assertFalse('a1' in a.__dict__) self.assertFalse(d['g_called']) self.assertFalse(d['s_called']) self.assertEqual(0, a.a1) self.assertTrue(d['g_called']) self.assertFalse(d['s_called']) a.a1 = 47 self.assertTrue(d['s_called']) self.assertEqual(47, d['value']) self.assertTrue(hasattr(a, 'a1')) a._registerDoubleAttribute('a1readonly', g) self.assertEqual(47, a.a1readonly) self.assertTrue(hasattr(a, 'a1readonly')) self.assertRaises(AttributeError, a._setDoubleAttr, 'a1readonly', 7) self.assertRaises(AttributeError, setattr, a, 'a1readonly', 5) self.assertEqual(47, a.a1readonly) a.a1 = 9 self.assertEqual(9, a.a1readonly) self.assertFalse(wa() is None) del a gc.collect() self.assertTrue(wa() is None) return