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