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