1from PyObjCTools.TestSupport import * 2import objc 3 4NSObject = objc.lookUpClass('NSObject') 5 6class TestKVOPropHelper (NSObject): 7 def init(self): 8 self = super(TestKVOPropHelper, self).init() 9 if self is None: return None 10 11 self.__helper = None 12 self.accessing = [] 13 return self 14 15 def get_helper(self): 16 self.accessing.append(('get_helper',)) 17 return self.__helper 18 19 def set_helper(self, value): 20 self.accessing.append(('set_helper', value)) 21 self.__helper = value 22 23 helper = property(get_helper, set_helper) 24 25 26class TestKVOProp (TestCase): 27 def testKVOProperty(self): 28 o = TestKVOPropHelper.alloc().init() 29 self.assertIsInstance(o, TestKVOPropHelper) 30 31 self.assertEqual(len(o.accessing), 0) 32 o.helper = 42 33 self.assertEqual(len(o.accessing), 1) 34 self.assertEqual(o.accessing[-1], ('set_helper', 42)) 35 36 self.assertEqual(o.helper, 42) 37 self.assertEqual(len(o.accessing), 2) 38 self.assertEqual(o.accessing[-1], ('get_helper',)) 39 40 o.accessing[:] = [] 41 42 self.assertEqual(len(o.accessing), 0) 43 o.setValue_forKey_(42, 'helper') 44 self.assertEqual(len(o.accessing), 1) 45 self.assertEqual(o.accessing[-1], ('set_helper', 42)) 46 47 self.assertEqual(o.valueForKey_('helper'), 42) 48 self.assertEqual(len(o.accessing), 2) 49 self.assertEqual(o.accessing[-1], ('get_helper',)) 50 51 def testKVOWillChange(self): 52 o = TestKVOPropHelper.alloc().init() 53 self.assertIsInstance(o, TestKVOPropHelper) 54 55 self.assertEqual(len(o.accessing), 0) 56 o.willChangeValueForKey_('helper') 57 o.helper = 42 58 o.didChangeValueForKey_('helper') 59 self.assertEqual(len(o.accessing), 1) 60 self.assertEqual(o.accessing[-1], ('set_helper', 42)) 61 62if __name__ == "__main__": 63 main() 64