1import objc 2import PyObjCTest.fnd as Foundation 3from PyObjCTools.TestSupport import * 4import os 5 6NSObject = objc.lookUpClass('NSObject') 7 8def S(*args): 9 return b''.join(args) 10 11FUNCTIONS=[ 12 ( u'NSHomeDirectory', S(objc._C_ID)), 13 ( u'NSIsFreedObject', S(objc._C_NSBOOL, objc._C_ID) ), 14 ( u'NSCountFrames', S(objc._C_UINT) ), 15 ( u'NSClassFromString', S(objc._C_CLASS, objc._C_ID) ), 16] 17 18class TestBundleFunctions (TestCase): 19 def setUp(self): 20 self.bundle = Foundation.NSBundle.bundleForClass_(Foundation.NSBundle) 21 22 def testSimple(self): 23 d = {} 24 objc.loadBundleFunctions(self.bundle, d, FUNCTIONS) 25 26 self.assertIn('NSIsFreedObject', d) 27 self.assertIn('NSCountFrames', d) 28 self.assertIn('NSHomeDirectory', d) 29 30 # Don't use this API, it is unsupported and causes warnings. 31 #fn = d[u'NSIsFreedObject'] 32 #obj = NSObject.alloc().init() 33 #value = fn(obj) 34 #self.assertTrue(not value) 35 36 fn = d[u'NSHomeDirectory'] 37 value = fn() 38 self.assertEquals(value, os.path.expanduser('~')) 39 40 fn = d[u'NSClassFromString'] 41 value = fn(u'NSObject') 42 self.assertIs(value, NSObject) 43 44 # Need to look for a different example, NSCountFrames crashes 45 # (that is the actual function, not the dynamic wrapper) 46 #fn = d[u'NSCountFrames'] 47 #import Foundation 48 #fn = Foundation.NSCountFrames 49 #value = fn() 50 #self.assertIsInstance(value, int) 51 52 53if __name__ == "__main__": 54 main() 55 56 57