1from PyObjCTools.TestSupport import * 2from CoreFoundation import * 3from Foundation import NSArray, NSMutableArray 4 5class TestCFArray (TestCase): 6 def testCFArrayIsNSArray(self): 7 self.assert_(issubclass(CFArrayRef, NSArray)) 8 self.assert_(issubclass(CFMutableArrayRef, NSMutableArray)) 9 10 def testCFArrayCreate(self): 11 array = CFArrayCreate(None, [1,2,3,4], 4, kCFTypeArrayCallBacks) 12 self.assertEquals(array, [1,2,3,4]) 13 self.assert_(isinstance(array, CFArrayRef)) 14 15 array = CFArrayCreateMutable(None, 0, kCFTypeArrayCallBacks) 16 CFArrayAppendValue(array, 42) 17 CFArrayAppendValue(array, 43) 18 CFArrayAppendValue(array, 44) 19 self.assertEquals(array, [42, 43, 44]) 20 self.assert_(isinstance(array, CFMutableArrayRef)) 21 22 def testCFArrayApplyFunction(self): 23 array = CFArrayCreate(None, [1,2,3,4], 4, kCFTypeArrayCallBacks) 24 25 self.failUnlessArgIsFunction(CFArrayApplyFunction, 2, 'v@@', False) 26 self.failUnlessArgHasType(CFArrayApplyFunction, 3, '@') 27 28 items = [] 29 infos = [] 30 31 def applier(item, info): 32 items.append(item * item) 33 infos.append(info) 34 35 CFArrayApplyFunction(array, (0, 4), applier, 42) 36 self.assertEquals(items, [1,4,9,16]) 37 self.assertEquals(infos, [42,42,42,42]) 38 39 items = [] 40 infos = [] 41 CFArrayApplyFunction(array, (1, 2), applier, 42) 42 self.assertEquals(items, [4,9]) 43 self.assertEquals(infos, [42,42]) 44 45 def testBSearchValues(self): 46 # This method causes a hard crash, reason unclear. 47 array = CFArrayCreate(None, range(20), 20, kCFTypeArrayCallBacks) 48 49 self.failUnlessArgHasType(CFArrayBSearchValues, 2, '@') 50 self.failUnlessArgIsFunction(CFArrayBSearchValues, 3, 'l@@@', False) 51 self.failUnlessArgHasType(CFArrayBSearchValues, 4, '@') 52 53 def compare(l, r, context): 54 return cmp(l, r) 55 56 r = CFArrayBSearchValues(array, (0, 20), 10, compare, None) 57 self.assertEquals(r, 10) 58 59 r = CFArrayBSearchValues(array, (0, 20), 9.5, compare, None) 60 self.assertEquals(r, 10) 61 62 r = CFArrayBSearchValues(array, (0, 20), 99, compare, None) 63 self.assert_(r >= 20) 64 65 r = CFArrayBSearchValues(array, (0, 20), -1, compare, None) 66 self.assertEquals(r, 0) 67 68 def testSortValues(self): 69 array = NSMutableArray.arrayWithArray_([4,2,1,3,0,5]) 70 71 self.failUnlessArgIsFunction(CFArraySortValues, 2, 'l@@@', False) 72 self.failUnlessArgHasType(CFArraySortValues, 3, '@') 73 74 def compare(l, r, context): 75 return cmp(l, r) 76 CFArraySortValues(array, (0, 6), compare, None) 77 78 self.assertEquals(array, [0, 1, 2, 3, 4, 5]) 79 80 def testTypeID(self): 81 v = CFArrayGetTypeID() 82 self.failUnless( isinstance(v, (int, long)) ) 83 84 def testCopy(self): 85 array = CFArrayCreate(None, [1,2,3,4], 4, kCFTypeArrayCallBacks) 86 self.assertEquals(array, [1,2,3,4]) 87 self.assert_(isinstance(array, CFArrayRef)) 88 89 cpy = CFArrayCreateCopy(None, array) 90 self.assertEquals(cpy, [1,2,3,4]) 91 self.assert_(isinstance(cpy, CFArrayRef)) 92 93 cpy = CFArrayCreateMutableCopy(None, 0, array) 94 self.assertEquals(cpy, [1,2,3,4]) 95 self.assert_(isinstance(cpy, CFMutableArrayRef)) 96 self.failIf( cpy is array ) 97 98 99 def testCounts(self): 100 array = CFArrayCreate(None, [1,2,3,4,4,2], 6, kCFTypeArrayCallBacks) 101 self.assertEquals(array, [1,2,3,4,4,2]) 102 self.assert_(isinstance(array, CFArrayRef)) 103 104 self.failUnless( CFArrayGetCount(array) == 6 ) 105 self.failUnless( CFArrayGetCountOfValue(array, (0,6), 4) == 2 ) 106 self.failUnless( CFArrayGetCountOfValue(array, (0,6), 2) == 2 ) 107 self.failUnless( CFArrayGetCountOfValue(array, (0,6), 3) == 1 ) 108 109 def testContains(self): 110 array = CFArrayCreate(None, [u"a",2,3,4,4,2], 6, kCFTypeArrayCallBacks) 111 self.assertEquals(array, [u"a",2,3,4,4,2]) 112 self.assert_(isinstance(array, CFArrayRef)) 113 114 self.failIf( CFArrayContainsValue(array, (0, 6), u"hello") ) 115 self.failUnless( CFArrayContainsValue(array, (0, 6), 4) ) 116 self.failIf( CFArrayContainsValue(array, (0, 2), 4) ) 117 118 self.failUnless( CFArrayGetFirstIndexOfValue(array, (0, 6), 3) == 2 ) 119 self.failUnless( CFArrayGetFirstIndexOfValue(array, (0, 6), 2) == 1 ) 120 self.failUnless( CFArrayGetFirstIndexOfValue(array, (0, 6), u"hello") == kCFNotFound ) 121 122 self.failUnless( CFArrayGetLastIndexOfValue(array, (0, 6), 3) == 2 ) 123 self.failUnless( CFArrayGetLastIndexOfValue(array, (0, 6), 2) == 5 ) 124 self.failUnless( CFArrayGetLastIndexOfValue(array, (0, 6), u"hello") == kCFNotFound ) 125 126 self.failUnlessArgHasType(CFArrayGetFirstIndexOfValue, 2, '@') 127 self.failUnlessArgHasType(CFArrayGetLastIndexOfValue, 2, '@') 128 129 130 def testGetting(self): 131 array = CFArrayCreate(None, [u"a",2,3,4,4,2], 6, kCFTypeArrayCallBacks) 132 self.assertEquals(array, [u"a",2,3,4,4,2]) 133 self.assert_(isinstance(array, CFArrayRef)) 134 135 self.failUnless( CFArrayGetValueAtIndex(array, 0) == u"a" ) 136 self.failUnless( CFArrayGetValueAtIndex(array, 1) == 2 ) 137 138 139 self.failUnlessArgHasType(CFArrayGetValues, 2, 'o^@') 140 self.failUnlessArgSizeInArg(CFArrayGetValues, 2, 1) 141 142 vals = CFArrayGetValues(array, (0, 3), None) 143 self.failUnless( isinstance(vals, tuple) ) 144 self.failUnless( vals == (u"a", 2, 3) ) 145 146 147 def testUpdating(self): 148 array = CFArrayCreate(None, [u"a",2,3,4,4,2], 6, kCFTypeArrayCallBacks) 149 self.assertEquals(array, [u"a",2,3,4,4,2]) 150 self.assert_(isinstance(array, CFArrayRef)) 151 array = CFArrayCreateMutableCopy(None, 0, array) 152 153 154 self.failUnlessArgHasType(CFArrayAppendValue, 1, '@') 155 self.failUnlessArgHasType(CFArrayInsertValueAtIndex, 2, '@') 156 self.failUnlessArgHasType(CFArraySetValueAtIndex, 2, '@') 157 158 CFArrayAppendValue(array, u"foo") 159 self.assertEquals(array, [u"a",2,3,4,4,2,u"foo"]) 160 161 CFArrayInsertValueAtIndex(array, 1, 4) 162 self.assertEquals(array, [u"a",4, 2,3,4,4,2,u"foo"]) 163 164 CFArrayRemoveValueAtIndex(array, 2) 165 self.assertEquals(array, [u"a",4, 3,4,4,2,u"foo"]) 166 167 CFArraySetValueAtIndex(array, 2, u"two") 168 self.assertEquals(array, [u"a",4, u"two",4,4,2,u"foo"]) 169 170 171 CFArrayExchangeValuesAtIndices(array, 1,2) 172 self.assertEquals(array, [u"a",u"two",4,4,4,2,u"foo"]) 173 174 self.failUnlessArgHasType(CFArrayReplaceValues, 2, 'n^@') 175 self.failUnlessArgSizeInArg(CFArrayReplaceValues, 2, 3) 176 CFArrayReplaceValues(array, (2,3), (u'a', u'b', u'c', u'd', u'e', u'f'), 6) 177 self.assertEquals(array, [u"a",u"two",u'a', u'b', u'c', u'd', u'e', u'f', 2, u'foo']) 178 179 array2 = CFArrayCreate(None, [u'hello', u'earth'], 2, kCFTypeArrayCallBacks) 180 CFArrayAppendArray(array, array2, (0,2)) 181 self.assertEquals(array, [u"a",u"two",u'a', u'b', u'c', u'd', u'e', u'f', 2, u'foo', u'hello', u'earth']) 182 183 CFArrayRemoveAllValues(array) 184 self.assertEquals(array, []) 185 186 187if __name__ == "__main__": 188 main() 189