1from PyObjCTools.TestSupport import * 2 3from SystemConfiguration import * 4import SystemConfiguration 5import os 6 7class TestSCDynamicStore (TestCase): 8 def testTypes(self): 9 self.failUnless(isinstance(SCDynamicStoreRef, objc.objc_class)) 10 11 def testStructs(self): 12 self.failIf( hasattr(SystemConfiguration, 'SCDynamicStoreContext') ) 13 14 def testFunctions(self): 15 n = SCDynamicStoreGetTypeID() 16 self.failUnless(isinstance(n, (int, long))) 17 18 19 l = [] 20 info = object() 21 def callback(store, changedKeys, info): 22 l.append((store, changedKeys, info)) 23 24 st = SCDynamicStoreCreate(None, 25 "pyobjc.test", 26 callback, info) 27 self.failUnless(isinstance(st, SCDynamicStoreRef)) 28 29 st = SCDynamicStoreCreateWithOptions(None, 30 "pyobjc.test", 31 {}, 32 callback, 33 info) 34 self.failUnless(isinstance(st, SCDynamicStoreRef)) 35 36 37 src = SCDynamicStoreCreateRunLoopSource(None, st, 0) 38 self.failUnless(isinstance(src, CFRunLoopSourceRef)) 39 del src 40 41 v = SCDynamicStoreCopyKeyList(st, u'.*') 42 self.failUnless(isinstance(v, CFArrayRef)) 43 self.failUnless(len(v) > 0) 44 self.failUnless(isinstance(v[0], unicode)) 45 46 r = SCDynamicStoreAddValue(st, "Setup:/PyObjC", { u"key":42 }) 47 self.failUnless(r is True or r is False) 48 49 r = SCDynamicStoreAddTemporaryValue(st, "Setup:/PyObjC", { u"key":42 }) 50 self.failUnless(r is True or r is False) 51 52 v = SCDynamicStoreCopyValue(st, "Setup:/") 53 self.failUnless(isinstance(v, CFDictionaryRef)) 54 55 v = SCDynamicStoreCopyMultiple(st, None, ['.*']) 56 self.failUnless(isinstance(v, CFDictionaryRef)) 57 58 r = SCDynamicStoreSetValue(st, "Setup:/PyObjC", { u"key":42 }) 59 self.failUnless(r is True or r is False) 60 61 r = SCDynamicStoreSetMultiple(st, 62 { 63 'Setup:/PyObjC2': { u"key": 42}, 64 }, 65 ['Setup:/PyObjC'], 66 ['System:/']) 67 self.failUnless(r is True or r is False) 68 69 r = SCDynamicStoreRemoveValue(st, "Setup:/PyObjC") 70 self.failUnless(r is True or r is False) 71 72 r = SCDynamicStoreNotifyValue(st, "Setup:/") 73 self.failUnless(r is True or r is False) 74 75 r = SCDynamicStoreSetNotificationKeys(st, ['Setup:/'], None) 76 self.failUnless(r is True) 77 78 r = SCDynamicStoreCopyNotifiedKeys(st) 79 self.failUnless(isinstance(r, CFArrayRef)) 80 81 def testCallbacks(self): 82 if os.getuid() != 0: 83 self.fail("WARNING: Need root privileges to test callback mechanism") 84 return 85 86 info = object() 87 l = [] 88 def callback(store, changedKeys, info): 89 l.append((store, changedKeys, info)) 90 91 st = SCDynamicStoreCreate(None, 92 u"pyobjc.test", 93 callback, info) 94 95 SCDynamicStoreSetNotificationKeys(st, None, ['.*']) 96 src = SCDynamicStoreCreateRunLoopSource(None, st, 0) 97 self.failUnless(isinstance(src, CFRunLoopSourceRef)) 98 99 SCDynamicStoreAddTemporaryValue(st, "pyobjc.test.key", "value") 100 101 CFRunLoopAddSource(CFRunLoopGetCurrent(), src, kCFRunLoopCommonModes) 102 CFRunLoopRunInMode(kCFRunLoopDefaultMode, 2.0, False) 103 104 self.failUnless(len(l) > 1) 105 self.failUnless(l[0][0] is st) 106 self.failUnlessIsInstance(l[0][1], CFArrayRef) 107 self.failUnless(l[0][2] is info) 108 109 110 111 112 113 114 115 116 117 def testContants(self): 118 self.failUnless( isinstance(kSCDynamicStoreUseSessionKeys, unicode) ) 119 120 121if __name__ == "__main__": 122 main() 123