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
Example #2
0
 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