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