1from PyObjCTools.TestSupport import * 2import objc 3 4class hidden_method (object): 5 def __pyobjc_class_setup__(self, name, class_dict, instance_methods, class_methods): 6 @objc.selector 7 def method(self): 8 return 42 9 10 method.isHidden = True 11 12 def clsmethod(self): 13 return 99 14 clsmethod=objc.selector(clsmethod, isClassMethod=True) 15 clsmethod.isHidden = True 16 17 instance_methods.add(method) 18 class_methods.add(clsmethod) 19 20 21 22class OCTestHidden (objc.lookUpClass('NSObject')): 23 m = hidden_method() 24 25 @objc.selector 26 def body(self): 27 return "BODY" 28 body.isHidden = True 29 30 31 def bodyclass(self): 32 return "BODYCLASS" 33 bodyclass=objc.selector(bodyclass, isClassMethod=True) 34 bodyclass.isHidden=True 35 36 @objc.selector 37 def somebody(self): 38 return "instance" 39 somebody.isHidden = True 40 41 def boolMethod(self): 42 return 1 43 boolMethod = objc.selector(boolMethod, signature=objc._C_NSBOOL + b'@:') 44 boolMethod.isHidden = True 45 46class OCTestSubHidden (OCTestHidden): 47 def body(self): 48 return "BODY2" 49 50 @classmethod 51 def bodyclass(self): 52 return "BODYCLASS2" 53 54 @classmethod 55 def somebody(self): 56 return "class" 57 58 def boolMethod(self): 59 return 0 60 61class TestHiddenSelector (TestCase): 62 def testHiddenInClassDef(self): 63 o = OCTestHidden.alloc().init() 64 self.assertRaises(AttributeError, getattr, o, 'body') 65 66 v = o.performSelector_(b'body') 67 self.assertEqual(v, "BODY") 68 69 v = o.pyobjc_instanceMethods.body() 70 self.assertEqual(v, "BODY") 71 72 self.assertRaises(AttributeError, getattr, OCTestHidden, 'bodyclass') 73 v = OCTestHidden.performSelector_(b'bodyclass') 74 self.assertEqual(v, "BODYCLASS") 75 76 v = OCTestHidden.pyobjc_classMethods.bodyclass() 77 self.assertEqual(v, "BODYCLASS") 78 79 o = OCTestHidden.alloc().init() 80 self.assertRaises(AttributeError, getattr, o, 'boolMethod') 81 v = o.pyobjc_instanceMethods.boolMethod() 82 self.assertIs(v, True) 83 84 85 def testHiddenInSetupHook(self): 86 o = OCTestHidden.alloc().init() 87 88 # Instance method 89 self.assertRaises(AttributeError, getattr, o, 'method') 90 91 v = o.performSelector_(b'method') 92 self.assertEqual(v, 42) 93 94 v = o.pyobjc_instanceMethods.method() 95 self.assertEqual(v, 42) 96 97 # Class method 98 self.assertRaises(AttributeError, getattr, OCTestHidden, 'clsmethod') 99 100 v = OCTestHidden.performSelector_(b'clsmethod') 101 self.assertEqual(v, 99) 102 103 v = OCTestHidden.pyobjc_classMethods.clsmethod() 104 self.assertEqual(v, 99) 105 106 107 def testHiddenAddMethods(self): 108 109 @objc.selector 110 def addedmethod(self): 111 return "NEW" 112 addedmethod.isHidden = True 113 114 def addedclass(self): 115 return "NEWCLASS" 116 addedclass=objc.selector(addedclass, isClassMethod=True) 117 addedclass.isHidden=True 118 119 objc.classAddMethods(OCTestHidden, [addedmethod, addedclass]) 120 121 o = OCTestHidden.alloc().init() 122 123 # Instance method 124 self.assertRaises(AttributeError, getattr, o, 'addedmethod') 125 126 v = o.performSelector_(b'addedmethod') 127 self.assertEqual(v, "NEW") 128 129 v = o.pyobjc_instanceMethods.addedmethod() 130 self.assertEqual(v, "NEW") 131 132 # Class method 133 self.assertRaises(AttributeError, getattr, OCTestHidden, 'addedclass') 134 135 v = OCTestHidden.performSelector_(b'addedclass') 136 self.assertEqual(v, "NEWCLASS") 137 138 v = OCTestHidden.pyobjc_classMethods.addedclass() 139 self.assertEqual(v, "NEWCLASS") 140 141 def testClassVsInstance(self): 142 o = OCTestHidden.alloc().init() 143 self.assertRaises(AttributeError, getattr, o, "sombody") 144 v = o.performSelector_(b'somebody') 145 self.assertEqual(v, "instance") 146 147 v = OCTestSubHidden.somebody() 148 self.assertEqual(v, "class") 149 150 def testHiddenInSubClass(self): 151 152 # Instance 153 o = OCTestSubHidden.alloc().init() 154 self.assertRaises(AttributeError, getattr, o, "body") 155 v = o.performSelector_(b'body') 156 self.assertEqual(v, "BODY2") 157 158 @objc.selector 159 def subclassbody(self): 160 return "base" 161 subclassbody.isHidden = True 162 163 @objc.selector 164 def subclassbody2(self): 165 return "base2" 166 subclassbody.isHidden = True 167 168 objc.classAddMethods(OCTestHidden, [subclassbody, subclassbody2]) 169 170 171 @objc.selector 172 def subclassbody(self): 173 return "sub" 174 175 @objc.selector 176 def subclassbody2(self): 177 return "sub2" 178 179 objc.classAddMethods(OCTestSubHidden, [subclassbody]) 180 self.assertRaises(AttributeError, getattr, o, "subclassbody") 181 v = o.performSelector_(b'subclassbody') 182 self.assertEqual(v, "sub") 183 184 OCTestSubHidden.subclassbody2 = subclassbody2 185 #self.assertRaises(AttributeError, getattr, o, "subclassbody2") 186 v = o.performSelector_(b'subclassbody2') 187 self.assertEqual(v, "sub2") 188 189 self.assertRaises(AttributeError, getattr, o, 'boolMethod') 190 v = o.pyobjc_instanceMethods.boolMethod() 191 self.assertIs(v, False) 192 193 # Class 194 self.assertRaises(AttributeError, getattr, OCTestSubHidden, 'bodyclass') 195 v = OCTestSubHidden.performSelector_(b'bodyclass') 196 self.assertEqual(v, "BODYCLASS2") 197 198if __name__ == "__main__": 199 main() 200