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