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.assertEqual(CFBagGetCountOfValue(bag, 1), 2) 10 self.assertEqual(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.assertEqual(CFBagGetCountOfValue(bag, 9), 2) 18 self.assertEqual(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.assertEqual(items, [1,1,4,9,16]) 33 self.assertEqual(contexts, [99,99,99,99,99]) 34 35 def testTypeID(self): 36 v = CFBagGetTypeID() 37 self.assertIsInstance(v, (int, long)) 38 def testCopy(self): 39 bag = CFBagCreate(None, [1,1,2,3,4], 5) 40 self.assertIsInstance(bag, CFBagRef) 41 bag2 = CFBagCreateCopy(None, bag) 42 self.assertIsInstance(bag2, CFBagRef) 43 bag3 = CFBagCreateMutableCopy(None, 0, bag) 44 self.assertIsInstance(bag3, CFBagRef) 45 self.assertIsNot(bag3, bag ) 46 def testInspect(self): 47 bag = CFBagCreate(None, [u"Hello", 42, u"World", 42, u"a", u"a", u"a"], 7) 48 self.assertIsInstance(bag, CFBagRef) 49 self.assertEqual(CFBagGetCount(bag) , 7) 50 self.assertEqual(CFBagGetCountOfValue(bag, u"Hello") , 1) 51 self.assertEqual(CFBagGetCountOfValue(bag, 42) , 2) 52 self.assertEqual(CFBagGetCountOfValue(bag, u"a") , 3) 53 self.assertTrue( CFBagContainsValue(bag, u"a") ) 54 self.assertFalse( CFBagContainsValue(bag, u"b") ) 55 56 v = CFBagGetValue(bag, u"b") 57 self.assertIs(v, None) 58 v = CFBagGetValue(bag, u"a") 59 self.assertEqual(v , u"a") 60 exists, value = CFBagGetValueIfPresent(bag, u"a", None) 61 self.assertTrue( exists ) 62 self.assertEqual(value , u"a" ) 63 exists, value = CFBagGetValueIfPresent(bag, u"b", None) 64 self.assertFalse( exists ) 65 self.assertIs(value, None ) 66 values = set(CFBagGetValues(bag)) 67 l = set([u"Hello", 42, u"World", 42, u"a", u"a", u"a"]) 68 self.assertEqual(values , l ) 69 70 def testMutation(self): 71 bag = CFBagCreateMutable(None, 0) 72 self.assertEqual(CFBagGetCount(bag) , 0) 73 CFBagAddValue(bag, u"hello") 74 self.assertEqual(CFBagGetCount(bag) , 1) 75 CFBagAddValue(bag, u"hello") 76 self.assertEqual(CFBagGetCount(bag) , 2) 77 CFBagReplaceValue(bag, u"hello") 78 self.assertEqual(CFBagGetCount(bag) , 2) 79 CFBagReplaceValue(bag, u"world") 80 self.assertEqual(CFBagGetCount(bag) , 2) 81 CFBagSetValue(bag, u"world") 82 self.assertEqual(CFBagGetCount(bag) , 3) 83 CFBagSetValue(bag, u"world") 84 self.assertEqual(CFBagGetCount(bag) , 3) 85 CFBagRemoveValue(bag, u"hello") 86 self.assertEqual(CFBagGetCount(bag) , 2) 87 CFBagRemoveValue(bag, u"hello") 88 self.assertEqual(CFBagGetCount(bag) , 1) 89 CFBagRemoveAllValues(bag) 90 self.assertEqual(CFBagGetCount(bag) , 0) 91 def testFunctions(self): 92 self.assertArgHasType(CFBagGetCountOfValue, 1, b'@') 93 self.assertArgHasType(CFBagContainsValue, 1, b'@') 94 self.assertArgHasType(CFBagGetValue, 1, b'@') 95 self.assertResultHasType(CFBagGetValue, b'@') 96 self.assertArgHasType(CFBagGetValueIfPresent, 1, b'@') 97 self.assertArgHasType(CFBagGetValueIfPresent, 2, b'o^@') 98 self.assertResultHasType(CFBagGetValueIfPresent, objc._C_NSBOOL) 99 self.assertArgIsFunction(CFBagApplyFunction, 1, b'v@@', False) 100 self.assertArgHasType(CFBagApplyFunction, 2, b'@') 101 self.assertArgHasType(CFBagAddValue, 1, b'@') 102 self.assertArgHasType(CFBagReplaceValue, 1, b'@') 103 self.assertArgHasType(CFBagSetValue, 1, b'@') 104 self.assertArgHasType(CFBagRemoveValue, 1, b'@') 105 106 107if __name__ == "__main__": 108 main() 109