1from PyObjCTools.TestSupport import *
2from CoreFoundation import *
3import CoreFoundation
4
5try:
6    unicode
7except NameError:
8    unicode = str
9
10
11try:
12    long
13except NameError:
14    long = int
15
16
17class TestBase (TestCase):
18    @min_os_level('10.8')
19    def testConstants10_8(self):
20        self.assertEqual(kCFCoreFoundationVersionNumber10_6_6, 550.42)
21        self.assertEqual(kCFCoreFoundationVersionNumber10_6_7, 550.42)
22        self.assertEqual(kCFCoreFoundationVersionNumber10_6_8, 550.43)
23        self.assertEqual(kCFCoreFoundationVersionNumber10_7, 635.00)
24        self.assertEqual(kCFCoreFoundationVersionNumber10_7_1, 635.00)
25        self.assertEqual(kCFCoreFoundationVersionNumber10_7_2, 635.15)
26        self.assertEqual(kCFCoreFoundationVersionNumber10_7_3, 635.19)
27        self.assertEqual(kCFCoreFoundationVersionNumber10_7_4, 635.21)
28
29
30    def testConstants(self):
31        self.assertEqual(TRUE, 1)
32        self.assertEqual(FALSE, 0)
33
34        self.assertEqual(kCFCoreFoundationVersionNumber10_0,      196.40)
35        self.assertEqual(kCFCoreFoundationVersionNumber10_0_3,    196.50)
36        self.assertEqual(kCFCoreFoundationVersionNumber10_1,      226.00)
37        self.assertEqual(kCFCoreFoundationVersionNumber10_1_1,    226.00)
38        self.assertEqual(kCFCoreFoundationVersionNumber10_1_2,    227.20)
39        self.assertEqual(kCFCoreFoundationVersionNumber10_1_3,    227.20)
40        self.assertEqual(kCFCoreFoundationVersionNumber10_1_4,    227.30)
41        self.assertEqual(kCFCoreFoundationVersionNumber10_2,      263.00)
42        self.assertEqual(kCFCoreFoundationVersionNumber10_2_1,    263.10)
43        self.assertEqual(kCFCoreFoundationVersionNumber10_2_2,    263.10)
44        self.assertEqual(kCFCoreFoundationVersionNumber10_2_3,    263.30)
45        self.assertEqual(kCFCoreFoundationVersionNumber10_2_4,    263.30)
46        self.assertEqual(kCFCoreFoundationVersionNumber10_2_5,    263.50)
47        self.assertEqual(kCFCoreFoundationVersionNumber10_2_6,    263.50)
48        self.assertEqual(kCFCoreFoundationVersionNumber10_2_7,    263.50)
49        self.assertEqual(kCFCoreFoundationVersionNumber10_2_8,    263.50)
50        self.assertEqual(kCFCoreFoundationVersionNumber10_3,      299.00)
51        self.assertEqual(kCFCoreFoundationVersionNumber10_3_1,    299.00)
52        self.assertEqual(kCFCoreFoundationVersionNumber10_3_2,    299.00)
53        self.assertEqual(kCFCoreFoundationVersionNumber10_3_3,    299.30)
54        self.assertEqual(kCFCoreFoundationVersionNumber10_3_4,    299.31)
55        self.assertEqual(kCFCoreFoundationVersionNumber10_3_5,    299.31)
56        self.assertEqual(kCFCoreFoundationVersionNumber10_3_6,    299.32)
57        self.assertEqual(kCFCoreFoundationVersionNumber10_3_7,    299.33)
58        self.assertEqual(kCFCoreFoundationVersionNumber10_3_8,    299.33)
59        self.assertEqual(kCFCoreFoundationVersionNumber10_3_9,    299.35)
60        self.assertEqual(kCFCoreFoundationVersionNumber10_4,      368.00)
61        self.assertEqual(kCFCoreFoundationVersionNumber10_4_1,    368.10)
62        self.assertEqual(kCFCoreFoundationVersionNumber10_4_2,    368.11)
63        self.assertEqual(kCFCoreFoundationVersionNumber10_4_3,    368.18)
64        self.assertEqual(kCFCoreFoundationVersionNumber10_4_4_Intel,      368.26)
65        self.assertEqual(kCFCoreFoundationVersionNumber10_4_4_PowerPC,    368.25)
66        self.assertEqual(kCFCoreFoundationVersionNumber10_4_5_Intel,      368.26)
67        self.assertEqual(kCFCoreFoundationVersionNumber10_4_5_PowerPC,    368.25)
68        self.assertEqual(kCFCoreFoundationVersionNumber10_4_6_Intel,      368.26)
69        self.assertEqual(kCFCoreFoundationVersionNumber10_4_6_PowerPC,    368.25)
70        self.assertEqual(kCFCoreFoundationVersionNumber10_4_7,    368.27)
71        self.assertEqual(kCFCoreFoundationVersionNumber10_4_8,    368.27)
72        self.assertEqual(kCFCoreFoundationVersionNumber10_4_9,    368.28)
73        self.assertEqual(kCFCoreFoundationVersionNumber10_4_10,   368.28)
74        self.assertEqual(kCFCoreFoundationVersionNumber10_4_11,   368.31)
75        self.assertEqual(kCFCoreFoundationVersionNumber10_5,      476.00)
76        self.assertEqual(kCFCoreFoundationVersionNumber10_5_1,    476.00)
77        self.assertEqual(kCFCoreFoundationVersionNumber10_5_2,    476.10)
78        self.assertEqual(kCFCoreFoundationVersionNumber10_5_3,    476.13)
79        self.assertEqual(kCFCoreFoundationVersionNumber10_5_4,    476.14)
80        self.assertEqual(kCFCoreFoundationVersionNumber10_5_5,    476.15)
81        self.assertEqual(kCFCoreFoundationVersionNumber10_5_6,    476.17)
82        self.assertEqual(kCFCoreFoundationVersionNumber10_5_7,    476.18)
83        #XXX
84        #self.assertEqual(CFCoreFoundationVersionNumber10_5_8,    476.19)
85        self.assertEqual(kCFCoreFoundationVersionNumber10_6,      550.00)
86        self.assertEqual(kCFCoreFoundationVersionNumber10_6_1,    550.00)
87        self.assertEqual(kCFCoreFoundationVersionNumber10_6_2,    550.13)
88        self.assertEqual(kCFCoreFoundationVersionNumber10_6_3,    550.19)
89        self.assertEqual(kCFCoreFoundationVersionNumber10_6_4,    550.29)
90        self.assertEqual(kCFCoreFoundationVersionNumber10_6_5,    550.42)
91
92
93        self.assertEqual(kCFCompareLessThan, -1)
94        self.assertEqual(kCFCompareEqualTo, 0)
95        self.assertEqual(kCFCompareGreaterThan, 1)
96
97        self.assertEqual(kCFNotFound, -1)
98
99
100    def testStructs(self):
101
102        o = CFRange()
103        self.assertHasAttr(o, 'location')
104        self.assertHasAttr(o, 'length')
105
106    def testCFRangeMake(self):
107        r = CFRangeMake(42, 99)
108        self.assertIsInstance(r, CFRange)
109        self.assertEqual(r.location, 42)
110        self.assertEqual(r.length, 99)
111
112    def testCFNull(self):
113        self.assertIsInstance(CFNullGetTypeID(), (int, long))
114        self.assertIsInstance(kCFNull, CFNullRef)
115        self.assertIsCFType(CFNullRef)
116
117    def testCFAllocator(self):
118        self.assertIsCFType(CFAllocatorRef)
119
120        self.assertIsInstance(CFAllocatorGetTypeID(), (int, long))
121        self.assertIsInstance(kCFAllocatorDefault, (CFAllocatorRef, type(None)))
122        self.assertIsInstance(kCFAllocatorSystemDefault, CFAllocatorRef)
123        self.assertIsInstance(kCFAllocatorMalloc, CFAllocatorRef)
124        self.assertIsInstance(kCFAllocatorMallocZone, CFAllocatorRef)
125        self.assertIsInstance(kCFAllocatorNull, CFAllocatorRef)
126        self.assertIsInstance(kCFAllocatorUseContext, CFAllocatorRef)
127        r = CFAllocatorGetDefault()
128        self.assertIsInstance(r, CFAllocatorRef)
129        CFAllocatorSetDefault(kCFAllocatorMalloc)
130        r2 = CFAllocatorGetDefault()
131        self.assertIsInstance(r2, CFAllocatorRef)
132        self.assertIs(r2, kCFAllocatorMalloc)
133        # Restore default allocator
134        CFAllocatorSetDefault(r)
135
136        self.assertNotHasAttr(CoreFoundation, 'CFAllocatorCreate')
137        self.assertNotHasAttr(CoreFoundation, 'CFAllocatorAllocate')
138        self.assertNotHasAttr(CoreFoundation, 'CFAllocatorReallocate')
139        self.assertNotHasAttr(CoreFoundation, 'CFAllocatorDeallocate')
140        self.assertNotHasAttr(CoreFoundation, 'CFAllocatorGetContext')
141        r = CFAllocatorGetPreferredSizeForSize(kCFAllocatorDefault, 15, 0)
142        self.assertIsInstance(r, (int, long))
143        self.assertGreaterEqual(r , 15)
144
145    def testGenericFunctions(self):
146        id = CFGetTypeID(kCFAllocatorMalloc)
147        self.assertEqual(id, CFAllocatorGetTypeID())
148
149        v = CFCopyTypeIDDescription(CFAllocatorGetTypeID())
150        self.assertIsInstance(v, unicode)
151        obj = CFURLCreateWithString(None, b"http://www.apple.com/".decode('ascii'), None)
152        i = CFGetRetainCount(obj)
153        self.assertIsInstance(i, (int, long))
154        CFRetain(obj)
155        self.assertEqual(CFGetRetainCount(obj), i + 1)
156        CFRelease(obj)
157        self.assertEqual(CFGetRetainCount(obj), i)
158
159        CFRetain(obj)
160        CFMakeCollectable(obj)
161
162        del obj
163
164        i = CFEqual(kCFAllocatorMalloc, kCFAllocatorNull)
165        self.assertIs(i, False)
166        i = CFEqual(kCFAllocatorMalloc, kCFAllocatorMalloc)
167        self.assertIs(i, True)
168        i = CFHash(kCFAllocatorMalloc)
169        self.assertTrue(i, (int, long))
170
171        v = CFCopyDescription(kCFAllocatorMalloc)
172        self.assertIsInstance(v, unicode)
173        v = CFGetAllocator(kCFAllocatorMalloc)
174        if v is not None:
175            self.assertIsInstance(v, CFAllocatorRef)
176
177    @min_os_level('10.6')
178    def testConstants10_6(self):
179        self.assertEqual(kCFCoreFoundationVersionNumber10_5, 476.00)
180        self.assertEqual(kCFCoreFoundationVersionNumber10_5_1, 476.00)
181        self.assertEqual(kCFCoreFoundationVersionNumber10_5_2, 476.10)
182        self.assertEqual(kCFCoreFoundationVersionNumber10_5_3, 476.13)
183        self.assertEqual(kCFCoreFoundationVersionNumber10_5_4, 476.14)
184        self.assertEqual(kCFCoreFoundationVersionNumber10_5_5, 476.15)
185        self.assertEqual(kCFCoreFoundationVersionNumber10_5_6, 476.17)
186
187
188if __name__ == "__main__":
189    main()
190