1from CoreFoundation import *
2from PyObjCTools.TestSupport import *
3
4
5class TestCFBundle (TestCase):
6
7    def testTypes(self):
8        self.failUnlessIsCFType(CFBundleRef)
9
10    def testMainBundle(self):
11        bundle = CFBundleGetMainBundle()
12        self.failUnless( isinstance(bundle, CFBundleRef) )
13
14    def testBundleLoader(self):
15        bundle = CFBundleGetBundleWithIdentifier(u"com.apple.CoreFoundation")
16        self.failUnless( isinstance(bundle, CFBundleRef) )
17
18        array = list(CFBundleGetAllBundles())
19        self.failUnless(len(array) != 0)
20        for b in array:
21            self.failUnless( isinstance(b, CFBundleRef) )
22
23
24        url = CFURLCreateWithFileSystemPath(None, u"/System/Library/Frameworks/Foundation.framework", kCFURLPOSIXPathStyle, True)
25        bundle = CFBundleCreate(None, url)
26        self.failUnless( isinstance(bundle, CFBundleRef) )
27
28        url = CFURLCreateWithFileSystemPath(None, u"/System/Library/Frameworks", kCFURLPOSIXPathStyle, True)
29        array = CFBundleCreateBundlesFromDirectory(None, url, u"frameworkX")
30        self.assertEquals(len(array), 0)
31
32        array = CFBundleCreateBundlesFromDirectory(None, url, u"framework")
33        self.assertNotEquals(len(array), 0)
34
35        array = CFBundleCreateBundlesFromDirectory(None, url, None)
36        self.assertNotEquals(len(array), 0)
37
38
39
40    def testTypeID(self):
41        v = CFBundleGetTypeID()
42        self.failUnless( isinstance(v, (int, long)) )
43
44
45    def testInspection(self):
46        bundle = CFBundleGetBundleWithIdentifier(u"com.apple.CoreFoundation")
47        self.failUnless( isinstance(bundle, CFBundleRef) )
48
49        url = CFBundleCopyBundleURL(bundle)
50        self.failUnless( isinstance(url, CFURLRef) )
51
52        v = CFBundleGetValueForInfoDictionaryKey(bundle, u"CFBundleIdentifier")
53        self.failUnless(v == u"com.apple.CoreFoundation")
54
55        v = CFBundleGetInfoDictionary(bundle)
56        self.failUnless( isinstance(v, CFDictionaryRef) )
57        self.failUnless( v['CFBundleIdentifier'], 'com.apple.CoreFoundation')
58
59        v = CFBundleGetLocalInfoDictionary(bundle)
60        self.failUnless( v is None or isinstance(v, CFDictionaryRef) )
61
62        type, creator = CFBundleGetPackageInfo(bundle, None, None)
63        self.failUnless(isinstance(type, (int, long)))
64        self.failUnless(isinstance(creator, (int, long)))
65
66        identifier = CFBundleGetIdentifier(bundle)
67        self.failUnless( identifier == u'com.apple.CoreFoundation')
68
69        v = CFBundleGetVersionNumber(bundle)
70        self.failUnless( isinstance(v, (int, long)))
71
72        v = CFBundleGetDevelopmentRegion(bundle)
73        self.failUnless( isinstance(v, unicode))
74
75        v = CFBundleCopySupportFilesDirectoryURL(bundle)
76        self.failUnless( v is None or isinstance(v, CFURLRef) )
77
78        v = CFBundleCopyResourcesDirectoryURL(bundle)
79        self.failUnless( v is None or isinstance(v, CFURLRef) )
80
81        v = CFBundleCopyPrivateFrameworksURL(bundle)
82        self.failUnless( v is None or isinstance(v, CFURLRef) )
83
84        v = CFBundleCopySharedFrameworksURL(bundle)
85        self.failUnless( v is None or isinstance(v, CFURLRef) )
86
87        v = CFBundleCopySharedSupportURL(bundle)
88        self.failUnless( v is None or isinstance(v, CFURLRef) )
89
90        v = CFBundleCopyBuiltInPlugInsURL(bundle)
91        self.failUnless( v is None or isinstance(v, CFURLRef) )
92
93    def testDirectAccess(self):
94        url = CFURLCreateWithFileSystemPath(None, u"/System/Library/Frameworks/Foundation.framework", kCFURLPOSIXPathStyle, True)
95
96        v = CFBundleCopyInfoDictionaryInDirectory(url)
97        self.failUnless( isinstance(v, CFDictionaryRef) )
98        self.failUnless( v[u"CFBundleIdentifier"] == u"com.apple.Foundation")
99
100        ok, type, creator = CFBundleGetPackageInfoInDirectory(url, None, None)
101        self.failUnless(ok is True)
102        self.failUnless(isinstance(type, (int, long)))
103        self.failUnless(isinstance(creator, (int, long)))
104
105    def testResources(self):
106        url = CFURLCreateWithFileSystemPath(None, u"/System/Library/Frameworks/Foundation.framework", kCFURLPOSIXPathStyle, True)
107        bundle = CFBundleCreate(None, url)
108        self.failUnless( isinstance(bundle, CFBundleRef) )
109
110        url = CFURLCreateWithFileSystemPath(None, u"/System/Library/Frameworks/Tcl.framework", kCFURLPOSIXPathStyle, True)
111        bundle2 = CFBundleCreate(None, url)
112        self.failUnless( isinstance(bundle2, CFBundleRef) )
113
114
115        url = CFBundleCopyResourceURL(bundle, "Formatter", "strings", None)
116        self.failUnless( isinstance(url, CFURLRef) )
117
118        url = CFBundleCopyResourceURL(bundle, "Formatter", "strings", "dummy")
119        self.failUnless(url is None)
120
121        array = CFBundleCopyResourceURLsOfType(bundle, "strings", None)
122        self.failIf(array is None)
123        self.failUnless(isinstance(array, CFArrayRef))
124
125        val = CFBundleCopyLocalizedString(bundle, "Err640.f", "value", "FoundationErrors")
126        self.failUnless(isinstance(val, unicode))
127        self.failIf(val == "value")
128
129        CFCopyLocalizedString("python", "error")
130        CFCopyLocalizedStringFromTable("pyobjc", "python", "error")
131        CFCopyLocalizedStringFromTableInBundle("pyobjc", "python", bundle, "comment")
132        CFCopyLocalizedStringWithDefaultValue("pyobjc", "python", bundle, "default", "comment")
133
134        array = CFBundleCopyBundleLocalizations(bundle)
135        self.failIf(array is None)
136        self.failUnless(isinstance(array, CFArrayRef))
137
138        arr2 = CFBundleCopyPreferredLocalizationsFromArray(array)
139        self.failIf(arr2 is None)
140        self.failUnless(isinstance(arr2, CFArrayRef))
141
142        arr2 = CFBundleCopyLocalizationsForPreferences(array, None)
143        self.failIf(arr2 is None)
144        self.failUnless(isinstance(arr2, CFArrayRef))
145
146        url = CFBundleCopyResourceURLForLocalization(bundle, "Formatter", "strings", None, "Dutch");
147        self.failUnless( isinstance(url, CFURLRef) )
148
149        array = CFBundleCopyResourceURLsOfTypeForLocalization(bundle, "strings", None, "Dutch")
150        self.failIf(array is None)
151        self.failUnless(isinstance(array, CFArrayRef))
152
153        url = CFBundleCopyExecutableURL(bundle)
154        self.failUnless( isinstance(url, CFURLRef) )
155
156        array = CFBundleCopyExecutableArchitectures(bundle)
157        self.failIf(array is None)
158        self.failUnless(isinstance(array, CFArrayRef))
159
160        self.failUnlessArgIsOut(CFBundlePreflightExecutable, 1)
161        ok, error = CFBundlePreflightExecutable(bundle, None)
162        self.failUnless((ok is True) or (ok is False))
163        if ok:
164            self.failUnless(error is None)
165        else:
166            self.failUnless(isinstance(error, CFErrorRef))
167
168        self.failUnlessArgIsOut(CFBundleLoadExecutableAndReturnError, 1)
169        ok, error = CFBundleLoadExecutableAndReturnError(bundle2, None)
170        self.failUnless((ok is True) or (ok is False))
171        if ok:
172            self.failUnless(error is None)
173        else:
174            self.failUnless(isinstance(error, CFErrorRef))
175
176        ok = CFBundleLoadExecutable(bundle2)
177        self.failUnless(ok)
178
179        ok = CFBundleIsExecutableLoaded(bundle2)
180        self.failUnless(ok)
181
182        CFBundleUnloadExecutable(bundle2)
183        ok = CFBundleIsExecutableLoaded(bundle2)
184        #self.failIf(ok)
185        ok = CFBundleLoadExecutable(bundle2)
186        self.failUnless(ok)
187
188        try:
189            CFBundleGetFunctionPointerForName
190        except NameError:
191            pass
192        else:
193            self.fail("CFBundleGetFunctionPointerForName")
194
195        try:
196            CFBundleGetFunctionPointersForNames
197        except NameError:
198            pass
199        else:
200            self.fail("CFBundleGetFunctionPointersForNames")
201
202        try:
203            CFBundleGetDataPointerForName
204        except NameError:
205            pass
206        else:
207            self.fail("CFBundleGetDataPointerForName")
208
209        try:
210            CFBundleGetDataPointersForNames
211        except NameError:
212            pass
213        else:
214            self.fail("CFBundleGetDataPointersForNames")
215
216        url =  CFBundleCopyAuxiliaryExecutableURL(bundle, "Foundation")
217        self.failUnless( isinstance(url, CFURLRef) )
218
219        id = CFBundleOpenBundleResourceMap(bundle)
220        self.failUnless(isinstance(id, (int, long)))
221
222        CFBundleCloseBundleResourceMap(bundle, id)
223
224        err,  id1, id2 = CFBundleOpenBundleResourceFiles(bundle, None, None)
225        self.failUnless(isinstance(err, (int, long)))
226        self.failUnless(isinstance(id1, (int, long)))
227        self.failUnless(isinstance(id2, (int, long)))
228        if id1 != -1:
229            CFBundleCloseBundleResourceMap(bundle, id1)
230        if id2 != -1:
231            CFBundleCloseBundleResourceMap(bundle, id2)
232
233    def testResourcesDirect(self):
234        bundle = CFURLCreateWithFileSystemPath(None, u"/System/Library/Frameworks/Foundation.framework", kCFURLPOSIXPathStyle, True)
235        url = CFBundleCopyResourceURLInDirectory(bundle, "Formatter", "strings", None)
236        self.failUnless( isinstance(url, CFURLRef) )
237
238        array = CFBundleCopyResourceURLsOfTypeInDirectory(bundle, "strings", None)
239        self.failIf(array is None)
240        self.failUnless(isinstance(array, CFArrayRef))
241
242        infoDict = CFBundleCopyInfoDictionaryForURL(bundle)
243        self.failUnless(isinstance(infoDict, CFDictionaryRef))
244
245        array = CFBundleCopyLocalizationsForURL(bundle)
246        self.failUnless(isinstance(array, CFArrayRef))
247
248        array = CFBundleCopyExecutableArchitecturesForURL(bundle)
249        self.failUnless(isinstance(array, CFArrayRef))
250        for a in array:
251            self.failUnless(isinstance(a, (int, long)))
252
253    def testPlugin(self):
254        url = CFURLCreateWithFileSystemPath(None, u"/System/Library/Components/AppleScript.component", kCFURLPOSIXPathStyle, True)
255        bundle = CFBundleCreate(None, url)
256        self.failUnless( isinstance(bundle, CFBundleRef) )
257
258        ref = CFBundleGetPlugIn(bundle)
259        self.failUnless(ref is None)
260
261
262
263    def testConstants(self):
264        self.failUnless( isinstance(kCFBundleInfoDictionaryVersionKey, unicode))
265        self.failUnless( isinstance(kCFBundleExecutableKey, unicode))
266        self.failUnless( isinstance(kCFBundleIdentifierKey, unicode))
267        self.failUnless( isinstance(kCFBundleVersionKey, unicode))
268        self.failUnless( isinstance(kCFBundleDevelopmentRegionKey, unicode))
269        self.failUnless( isinstance(kCFBundleNameKey, unicode))
270        self.failUnless( isinstance(kCFBundleLocalizationsKey, unicode))
271
272        self.failUnless( kCFBundleExecutableArchitectureI386     == 0x00000007)
273        self.failUnless( kCFBundleExecutableArchitecturePPC      == 0x00000012)
274        self.failUnless( kCFBundleExecutableArchitectureX86_64   == 0x01000007)
275        self.failUnless( kCFBundleExecutableArchitecturePPC64    == 0x01000012)
276
277
278
279if __name__ == "__main__":
280    main()
281