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.assertEquals(p['name'], "prop1") 15 self.assertIsInstance(p['raw_attr'], bytes) 16 self.assertEquals(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.assertEquals(p['name'], "prop2") 25 self.assertEquals(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.assertEquals(p['name'], "prop3") 34 self.assertEquals(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.assertEquals(p['name'], "prop4") 43 self.assertEquals(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.assertEquals(p['name'], "prop5") 52 self.assertEquals(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.assertEquals(p['name'], "prop6") 61 self.assertEquals(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.assertEquals(p['name'], "prop7") 70 self.assertEquals(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.assertEquals(p['name'], "prop8") 79 self.assertEquals(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.assertEquals(p['name'], "prop9") 88 self.assertEquals(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.assertEquals(p['name'], "prop10") 97 self.assertEquals(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.assertEquals(p['name'], "prop11") 108 self.assertEquals(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.assertEquals(p.get('setter'), b"propSetter:") 114 self.assertEquals(p.get('getter'), b"propGetter") 115 self.assertFalse(p.get('dynamic', False)) 116 117 #p = self.get_prop(props, "prop12") 118 #self.assertEquals(p['name'], "prop12") 119 #self.assertEquals(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.assertEquals(p['name'], "prop13") 128 self.assertEquals(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