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