1from PyObjCTools.TestSupport import *
2
3import objc
4from PyObjCTest.properties import OCPropertyDefinitions
5
6
7class TestPropertiesForClass (TestCase):
8    @min_os_level('10.6')
9    def testBasic(self):
10        props = objc.propertiesForClass(OCPropertyDefinitions)
11        self.assertIsInstance(props, list)
12
13        p = self.get_prop(props, "prop1")
14        self.assertEqual(p['name'], "prop1")
15        self.assertIsInstance(p['raw_attr'], bytes)
16        self.assertEqual(p['typestr'], objc._C_INT)
17        self.assertFalse(p.get('readonly', False))
18        self.assertFalse(p.get('copy', False))
19        self.assertFalse(p.get('retain', False))
20        self.assertFalse(p.get('nonatomic', False))
21        self.assertFalse(p.get('dynamic', False))
22
23        p = self.get_prop(props, "prop2")
24        self.assertEqual(p['name'], "prop2")
25        self.assertEqual(p['typestr'], objc._C_FLT)
26        self.assertFalse(p.get('readonly', False))
27        self.assertFalse(p.get('copy', False))
28        self.assertFalse(p.get('retain', False))
29        self.assertFalse(p.get('nonatomic', False))
30        self.assertFalse(p.get('dynamic', False))
31
32        p = self.get_prop(props, "prop3")
33        self.assertEqual(p['name'], "prop3")
34        self.assertEqual(p['typestr'], b"{s=ic}")
35        self.assertFalse(p.get('readonly', False))
36        self.assertFalse(p.get('copy', False))
37        self.assertFalse(p.get('retain', False))
38        self.assertFalse(p.get('nonatomic', False))
39        self.assertFalse(p.get('dynamic', False))
40
41        p = self.get_prop(props, "prop4")
42        self.assertEqual(p['name'], "prop4")
43        self.assertEqual(p['typestr'], objc._C_ID)
44        self.assertFalse(p.get('readonly', False))
45        self.assertFalse(p.get('copy', False))
46        self.assertFalse(p.get('retain', False))
47        self.assertFalse(p.get('nonatomic', False))
48        self.assertFalse(p.get('dynamic', False))
49
50        p = self.get_prop(props, "prop5")
51        self.assertEqual(p['name'], "prop5")
52        self.assertEqual(p['typestr'], objc._C_ID)
53        self.assertTrue(p.get('readonly', False))
54        self.assertFalse(p.get('copy', False))
55        self.assertFalse(p.get('retain', False))
56        self.assertFalse(p.get('nonatomic', False))
57        self.assertFalse(p.get('dynamic', False))
58
59        p = self.get_prop(props, "prop6")
60        self.assertEqual(p['name'], "prop6")
61        self.assertEqual(p['typestr'], objc._C_ID)
62        self.assertFalse(p.get('readonly', False))
63        self.assertFalse(p.get('copy', False))
64        self.assertFalse(p.get('retain', False))
65        self.assertFalse(p.get('nonatomic', False))
66        self.assertFalse(p.get('dynamic', False))
67
68        p = self.get_prop(props, "prop7")
69        self.assertEqual(p['name'], "prop7")
70        self.assertEqual(p['typestr'], objc._C_ID)
71        self.assertFalse(p.get('readonly', False))
72        self.assertFalse(p.get('copy', False))
73        self.assertFalse(p.get('retain', False))
74        self.assertFalse(p.get('nonatomic', False))
75        self.assertFalse(p.get('dynamic', False))
76
77        p = self.get_prop(props, "prop8")
78        self.assertEqual(p['name'], "prop8")
79        self.assertEqual(p['typestr'], objc._C_ID)
80        self.assertFalse(p.get('readonly', False))
81        self.assertFalse(p.get('copy', False))
82        self.assertTrue(p.get('retain', False))
83        self.assertFalse(p.get('nonatomic', False))
84        self.assertFalse(p.get('dynamic', False))
85
86        p = self.get_prop(props, "prop9")
87        self.assertEqual(p['name'], "prop9")
88        self.assertEqual(p['typestr'], objc._C_ID)
89        self.assertFalse(p.get('readonly', False))
90        self.assertTrue(p.get('copy', False))
91        self.assertFalse(p.get('retain', False))
92        self.assertFalse(p.get('nonatomic', False))
93        self.assertFalse(p.get('dynamic', False))
94
95        p = self.get_prop(props, "prop10")
96        self.assertEqual(p['name'], "prop10")
97        self.assertEqual(p['typestr'], b"{s=ic}")
98        self.assertFalse(p.get('readonly', False))
99        self.assertFalse(p.get('copy', False))
100        self.assertFalse(p.get('retain', False))
101        self.assertFalse(p.get('dynamic', False))
102
103        # This seems to be a bug in the objc runtime:
104        #self.assertTrue(p.get('nonatomic', False))
105
106        p = self.get_prop(props, "prop11")
107        self.assertEqual(p['name'], "prop11")
108        self.assertEqual(p['typestr'], objc._C_ID)
109        self.assertFalse(p.get('readonly', False))
110        self.assertFalse(p.get('copy', False))
111        self.assertFalse(p.get('retain', False))
112        self.assertFalse(p.get('nonatomic', False))
113        self.assertEqual(p.get('setter'), b"propSetter:")
114        self.assertEqual(p.get('getter'), b"propGetter")
115        self.assertFalse(p.get('dynamic', False))
116
117        #p = self.get_prop(props, "prop12")
118        #self.assertEqual(p['name'], "prop12")
119        #self.assertEqual(p['typestr'], objc._C_ID)
120        #self.assertFalse(p.get('readonly', False))
121        #self.assertFalse(p.get('copy', False))
122        #self.assertTrue(p.get('retain', False))
123        #self.assertTrue(p.get('nonatomic', False))
124        #self.assertFalse(p.get('dynamic', False))
125
126        p = self.get_prop(props, "prop13")
127        self.assertEqual(p['name'], "prop13")
128        self.assertEqual(p['typestr'], objc._C_ID)
129        self.assertFalse(p.get('readonly', False))
130        self.assertTrue(p.get('copy', False))
131        self.assertFalse(p.get('retain', False))
132        self.assertTrue(p.get('dynamic', False))
133
134    def get_prop(self, lst, name):
135        for item in lst:
136            if item['name'] == name:
137                return item
138        self.fail("property not found: %s"%(name,))
139
140
141
142if __name__ == "__main__":
143    main()
144