1import objc
2import PyObjCTest.fnd as Foundation
3from PyObjCTools.TestSupport import *
4import os
5
6NSObject = objc.lookUpClass('NSObject')
7
8def S(*args):
9    return ''.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.assert_('NSIsFreedObject' in d)
27        self.assert_('NSCountFrames' in d)
28        self.assert_('NSHomeDirectory' in 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.assert_(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.assert_(value is 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.assert_(isistance(value, int))
51
52
53if __name__ == "__main__":
54    main()
55
56
57