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