1import sys 2 3sys.path.insert(0, sys.argv[1]) 4 5import objc 6if not objc.__file__.startswith(sys.argv[1]): 7 print("Loaded objc from unexpected path") 8 sys.exit(1) 9 10try: 11 unicode 12except NameError: 13 unicode = str 14 15passed = True 16g = {} 17objc.initFrameworkWrapper("AddressBook", 18 "/System/Library/Frameworks/AddressBook.framework", 19 "com.apple.AddressBook.framework", 20 g, scan_classes=False) 21 22if 'ABAddPropertiesAndTypes' not in g: 23 print("Cannot find 'ABAddPropertiesAndTypes'") 24 passed = False 25 26else: 27 func = g['ABAddPropertiesAndTypes'] 28 if not isinstance(func, objc.function): 29 print("'ABAddPropertiesAndTypes' not an objc.function") 30 passed = False 31 32 else: 33 if func.__metadata__() != { 34 'retval': { 35 'already_retained': False, 36 'already_cfretained': False, 37 'type': 'q' if sys.maxint > 2**32 else 'l', 38 }, 39 'arguments': ( 40 { 41 'null_accepted': True, 42 'already_retained': False, 43 'already_cfretained': False, 44 'type': '^{__ABAddressBookRef=}', 45 }, 46 { 47 'null_accepted': True, 48 'already_retained': False, 49 'already_cfretained': False, 50 'type': '^{__CFString=}', 51 }, { 52 'null_accepted': True, 53 'already_retained': False, 54 'already_cfretained': False, 55 'type': '^{__CFDictionary=}', 56 } 57 ), 58 'variadic': False 59 }: 60 61 print("Unexpected metadata for 'ABAddPropertiesAndTypes'") 62 passed = False 63 64if 'ABAddressBookErrorDomain' not in g: 65 print("'ABAddressBookErrorDomain' not found") 66 passed = False 67 68elif not isinstance(g['ABAddressBookErrorDomain'], unicode): 69 print("'ABAddressBookErrorDomain' not a string") 70 passed = False 71 72if 'ABAddRecordsError' not in g: 73 print("'ABAddRecordsError' not found") 74 passed = False 75 76elif g['ABAddRecordsError'] != 1001: 77 print("'ABAddRecordsError' has wrong value") 78 passed = False 79 80if 'NSObject' in g: 81 print("No scan_classes, but 'NSObject' found") 82 passed = False 83 84if 'ABAddressBook' in g: 85 print("No scan_classes, but 'ABAddressBook' found") 86 passed = False 87 88g = {} 89objc.initFrameworkWrapper("AddressBook", 90 "/System/Library/Frameworks/AddressBook.framework", 91 "com.apple.AddressBook.framework", 92 g, scan_classes=True) 93 94if 'ABAddressBook' not in g: 95 print("'ABAddressBook' not found") 96 passed = False 97 98elif not isinstance(g['ABAddressBook'], objc.objc_class): 99 print("'ABAddressBook' not a class") 100 passed = False 101 102else: 103 m = g['ABAddressBook'].addRecord_.__metadata__() 104 if m['retval']['type'] != objc._C_NSBOOL: 105 print("'ABAddressBook' -addRecord: metadata not processed") 106 passed = False 107 108if passed: 109 sys.exit(0) 110else: 111 sys.exit(1) 112