1
2from PyObjCTools.TestSupport import *
3from PyObjCTest.test_object_property import OCObserve
4import objc
5
6NSObject = objc.lookUpClass('NSObject')
7
8class TestDictPropertyHelper (NSObject):
9    aDict = objc.dict_property()
10
11class TestDictProperty (TestCase):
12    # objc.dict_property is currently just an object_property with a default value
13
14    def testDefault(self):
15        observer = OCObserve.alloc().init()
16
17        o = TestDictPropertyHelper.alloc().init()
18        observer.register(o, 'aDict')
19        try:
20            self.assertEquals(len(o.aDict), 0)
21            self.assertEquals(o.aDict, {})
22            self.assertEquals(len(observer.values), 0)
23
24            o.aDict['key'] = 42
25            self.assertEquals(len(observer.values), 0)
26
27            observer.register(o, 'aDict.key')
28
29            o.aDict['key'] = 43
30            self.assertEquals(len(observer.values), 1)
31
32            self.assertNotIn('indexes', observer.values[-1][-1])
33            self.assertEquals(observer.values[-1][-1]['old'], 42)
34            self.assertEquals(observer.values[-1][-1]['new'], 43)
35
36            del o.aDict['key']
37
38            self.assertEquals(len(observer.values), 2)
39            self.assertNotIn('indexes', observer.values[-1][-1])
40            self.assertEquals(observer.values[-1][-1]['old'], 43)
41            self.assertEquals(observer.values[-1][-1]['new'], None)
42
43        finally:
44            observer.unregister(o, 'aDict')
45            observer.unregister(o, 'aDict.key')
46
47if __name__ == "__main__":
48    main()
49