1from PyObjCTools.TestSupport import * 2from CoreFoundation import * 3 4class TestCFBag (TestCase): 5 6 def testCreation(self): 7 bag = CFBagCreate(None, [1,1,2,3,4], 5) 8 self.assert_(isinstance(bag, CFBagRef)) 9 self.assertEquals(CFBagGetCountOfValue(bag, 1), 2) 10 self.assertEquals(CFBagGetCountOfValue(bag, 3), 1) 11 12 bag = CFBagCreateMutable(None, 0) 13 self.assert_(isinstance(bag, CFBagRef)) 14 CFBagAddValue(bag, 9) 15 CFBagAddValue(bag, 8) 16 CFBagAddValue(bag, 9) 17 self.assertEquals(CFBagGetCountOfValue(bag, 9), 2) 18 self.assertEquals(CFBagGetCountOfValue(bag, 8), 1) 19 20 def testApplyFunction(self): 21 items = [] 22 contexts = [] 23 24 bag = CFBagCreate(None, [1,1,2,3,4], 5) 25 26 def func(item, context): 27 items.append(item*item) 28 contexts.append(context) 29 30 CFBagApplyFunction(bag, func, 99) 31 items.sort() 32 self.assertEquals(items, [1,1,4,9,16]) 33 self.assertEquals(contexts, [99,99,99,99,99]) 34 35 def testTypeID(self): 36 v = CFBagGetTypeID() 37 self.failUnless( isinstance(v, (int, long)) ) 38 39 def testCopy(self): 40 bag = CFBagCreate(None, [1,1,2,3,4], 5) 41 self.failUnless( isinstance(bag, CFBagRef) ) 42 43 bag2 = CFBagCreateCopy(None, bag) 44 self.failUnless( isinstance(bag2, CFBagRef) ) 45 46 bag3 = CFBagCreateMutableCopy(None, 0, bag) 47 self.failUnless( isinstance(bag3, CFBagRef) ) 48 self.failIf( bag3 is bag ) 49 50 def testInspect(self): 51 bag = CFBagCreate(None, [u"Hello", 42, u"World", 42, u"a", u"a", u"a"], 7) 52 self.failUnless( isinstance(bag, CFBagRef) ) 53 54 self.failUnless( CFBagGetCount(bag) == 7) 55 self.failUnless( CFBagGetCountOfValue(bag, u"Hello") == 1) 56 self.failUnless( CFBagGetCountOfValue(bag, 42) == 2) 57 self.failUnless( CFBagGetCountOfValue(bag, u"a") == 3) 58 59 self.failUnless( CFBagContainsValue(bag, u"a") ) 60 self.failIf( CFBagContainsValue(bag, u"b") ) 61 62 v = CFBagGetValue(bag, u"b") 63 self.failUnless( v is None) 64 65 v = CFBagGetValue(bag, u"a") 66 self.failUnless( v == u"a") 67 68 exists, value = CFBagGetValueIfPresent(bag, u"a", None) 69 self.failUnless( exists ) 70 self.failUnless( value == u"a" ) 71 72 exists, value = CFBagGetValueIfPresent(bag, u"b", None) 73 self.failIf( exists ) 74 self.failUnless( value is None ) 75 76 values = list(CFBagGetValues(bag)) 77 values.sort() 78 l = [u"Hello", 42, u"World", 42, u"a", u"a", u"a"] 79 l.sort() 80 self.failUnless( values == l ) 81 82 83 def testMutation(self): 84 bag = CFBagCreateMutable(None, 0) 85 self.failUnless( CFBagGetCount(bag) == 0) 86 87 CFBagAddValue(bag, u"hello") 88 self.failUnless( CFBagGetCount(bag) == 1) 89 CFBagAddValue(bag, u"hello") 90 self.failUnless( CFBagGetCount(bag) == 2) 91 92 CFBagReplaceValue(bag, u"hello") 93 self.failUnless( CFBagGetCount(bag) == 2) 94 95 CFBagReplaceValue(bag, u"world") 96 self.failUnless( CFBagGetCount(bag) == 2) 97 98 CFBagSetValue(bag, u"world") 99 self.failUnless( CFBagGetCount(bag) == 3) 100 101 CFBagSetValue(bag, u"world") 102 self.failUnless( CFBagGetCount(bag) == 3) 103 104 CFBagRemoveValue(bag, u"hello") 105 self.failUnless( CFBagGetCount(bag) == 2) 106 CFBagRemoveValue(bag, u"hello") 107 self.failUnless( CFBagGetCount(bag) == 1) 108 109 CFBagRemoveAllValues(bag) 110 self.failUnless( CFBagGetCount(bag) == 0) 111 112 def testFunctions(self): 113 self.failUnlessArgHasType(CFBagGetCountOfValue, 1, '@') 114 self.failUnlessArgHasType(CFBagContainsValue, 1, '@') 115 self.failUnlessArgHasType(CFBagGetValue, 1, '@') 116 self.failUnlessResultHasType(CFBagGetValue, '@') 117 self.failUnlessArgHasType(CFBagGetValueIfPresent, 1, '@') 118 self.failUnlessArgHasType(CFBagGetValueIfPresent, 2, 'o^@') 119 self.failUnlessResultHasType(CFBagGetValueIfPresent, objc._C_NSBOOL) 120 self.failUnlessArgIsFunction(CFBagApplyFunction, 1, 'v@@', False) 121 self.failUnlessArgHasType(CFBagApplyFunction, 2, '@') 122 self.failUnlessArgHasType(CFBagAddValue, 1, '@') 123 self.failUnlessArgHasType(CFBagReplaceValue, 1, '@') 124 self.failUnlessArgHasType(CFBagSetValue, 1, '@') 125 self.failUnlessArgHasType(CFBagRemoveValue, 1, '@') 126 127 128if __name__ == "__main__": 129 main() 130