1from CoreFoundation import * 2from Foundation import NSDictionary, NSMutableDictionary, NSCFDictionary 3from PyObjCTools.TestSupport import * 4 5class TestCFDictionary (TestCase): 6 7 def testTypes(self): 8 self.failUnless(CFDictionaryRef is NSCFDictionary) 9 10 def testCreation(self): 11 dictionary = CFDictionaryCreate(None, 12 ('aap', 'noot', 'mies', 'wim'), 13 ('monkey', 'nut', 'missy', 'john'), 14 4, kCFTypeDictionaryKeyCallBacks, kCFTypeDictionaryValueCallBacks) 15 self.assert_(isinstance(dictionary, CFDictionaryRef)) 16 self.assertEquals(dictionary, { 17 'aap': 'monkey', 18 'noot': 'nut', 19 'mies': 'missy', 20 'wim': 'john' 21 }) 22 23 dictionary = CFDictionaryCreateMutable(None, 0, kCFTypeDictionaryKeyCallBacks, kCFTypeDictionaryValueCallBacks) 24 self.assert_(isinstance(dictionary, CFMutableDictionaryRef)) 25 CFDictionarySetValue(dictionary, 'hello', 'world') 26 self.assertEquals(dictionary, {'hello': 'world'}) 27 28 def testApplyFunction(self): 29 dictionary = CFDictionaryCreate(None, 30 ('aap', 'noot', 'mies', 'wim'), 31 ('monkey', 'nut', 'missy', 'john'), 4, kCFTypeDictionaryKeyCallBacks, kCFTypeDictionaryValueCallBacks) 32 33 context = [] 34 35 def function(key, value, context): 36 context.append((key, value)) 37 38 self.failUnlessArgIsFunction(CFDictionaryApplyFunction, 1, 'v@@@', False) 39 self.failUnlessArgHasType(CFDictionaryApplyFunction, 2, '@') 40 CFDictionaryApplyFunction(dictionary, function, context) 41 42 context.sort() 43 self.failUnless(len(context) == 4) 44 self.assertEquals(context, 45 [ 46 (u'aap', u'monkey'), 47 (u'mies', u'missy'), 48 (u'noot', u'nut'), 49 (u'wim', u'john') 50 ]) 51 52 def testTypeID(self): 53 self.failUnless(isinstance(CFDictionaryGetTypeID(), (int, long))) 54 55 def testCreation(self): 56 dct = CFDictionaryCreate(None, [u"key1", u"key2"], [42, 43], 2, kCFTypeDictionaryKeyCallBacks, kCFTypeDictionaryValueCallBacks) 57 self.failUnless(isinstance(dct, CFDictionaryRef)) 58 59 dct = CFDictionaryCreateCopy(None, dct) 60 self.failUnless(isinstance(dct, CFDictionaryRef)) 61 62 dct = CFDictionaryCreateMutable(None, 0, kCFTypeDictionaryKeyCallBacks, kCFTypeDictionaryValueCallBacks) 63 self.failUnless(isinstance(dct, CFDictionaryRef)) 64 65 dct = CFDictionaryCreateMutableCopy(None, 0, dct) 66 self.failUnless(isinstance(dct, CFDictionaryRef)) 67 68 def testInspection(self): 69 dct = CFDictionaryCreate(None, [u"key1", u"key2"], [42, 42], 2, kCFTypeDictionaryKeyCallBacks, kCFTypeDictionaryValueCallBacks) 70 self.failUnless(isinstance(dct, CFDictionaryRef)) 71 72 self.failUnless(CFDictionaryGetCount(dct) == 2) 73 self.failUnless(CFDictionaryGetCountOfKey(dct, u"key1") == 1) 74 self.failUnless(CFDictionaryGetCountOfKey(dct, u"key3") == 0) 75 76 self.failUnless(CFDictionaryGetCountOfValue(dct, 42) == 2) 77 self.failUnless(CFDictionaryGetCountOfValue(dct, 44) == 0) 78 79 self.failUnlessResultHasType(CFDictionaryContainsKey, objc._C_NSBOOL) 80 self.failUnless(CFDictionaryContainsKey(dct, u"key1")) 81 self.failIf(CFDictionaryContainsKey(dct, u"key3")) 82 83 self.failUnlessResultHasType(CFDictionaryContainsValue, objc._C_NSBOOL) 84 self.failUnless(CFDictionaryContainsValue(dct, 42)) 85 self.failIf(CFDictionaryContainsValue(dct, u"key3")) 86 87 self.failUnless(CFDictionaryGetValue(dct, "key2") == 42) 88 self.failUnless(CFDictionaryGetValue(dct, "key3") is None) 89 90 self.failUnlessResultHasType(CFDictionaryGetValueIfPresent, objc._C_NSBOOL) 91 self.failUnlessArgIsOut(CFDictionaryGetValueIfPresent, 2) 92 ok, value = CFDictionaryGetValueIfPresent(dct, "key2", None) 93 self.failUnless(ok) 94 self.failUnless(value == 42) 95 96 ok, value = CFDictionaryGetValueIfPresent(dct, "key3", None) 97 self.failIf(ok) 98 self.failUnless(value is None) 99 100 101 keys, values = CFDictionaryGetKeysAndValues(dct, None, None) 102 self.failUnless(values == (42, 42)) 103 keys = list(keys) 104 keys.sort() 105 self.failUnless(keys == ['key1', 'key2']) 106 107 def testMutation(self): 108 dct = CFDictionaryCreateMutable(None, 0, kCFTypeDictionaryKeyCallBacks, kCFTypeDictionaryValueCallBacks) 109 self.failUnless(CFDictionaryGetCount(dct) == 0) 110 111 CFDictionaryAddValue(dct, u"key1", u"value1") 112 self.failUnless(CFDictionaryGetCount(dct) == 1) 113 self.failUnless(CFDictionaryContainsKey(dct, u"key1")) 114 115 CFDictionarySetValue(dct, u"key2", u"value2") 116 self.failUnless(CFDictionaryGetCount(dct) == 2) 117 self.failUnless(CFDictionaryContainsKey(dct, u"key2")) 118 119 CFDictionaryReplaceValue(dct, u"key2", u"value2b") 120 self.failUnless(CFDictionaryGetCount(dct) == 2) 121 self.failUnless(CFDictionaryContainsKey(dct, u"key2")) 122 self.failUnless(CFDictionaryGetValue(dct, "key2") == u"value2b") 123 124 CFDictionaryReplaceValue(dct, u"key3", u"value2b") 125 self.failUnless(CFDictionaryGetCount(dct) == 2) 126 self.failIf(CFDictionaryContainsKey(dct, u"key3")) 127 128 CFDictionaryRemoveValue(dct, u"key1") 129 self.failIf(CFDictionaryContainsKey(dct, u"key1")) 130 131 CFDictionaryRemoveAllValues(dct) 132 self.failIf(CFDictionaryContainsKey(dct, u"key2")) 133 self.failUnless(CFDictionaryGetCount(dct) == 0) 134 135if __name__ == "__main__": 136 main() 137