1from PyObjCTools.TestSupport import *
2import os
3from CoreFoundation import *
4
5
6class TestPreferences (TestCase):
7    def testGetting(self):
8        v = CFPreferencesCopyAppValue("WindowCloseAction", "com.apple.Terminal")
9        self.failUnless(isinstance(v, unicode))
10
11        self.failUnlessResultIsBOOL(CFPreferencesGetAppBooleanValue)
12        self.failUnlessArgHasType(CFPreferencesGetAppBooleanValue, 2, 'o^Z')
13        v, valid = CFPreferencesGetAppBooleanValue("AutoFocus", "com.apple.Terminal", None)
14        self.failUnless(valid)
15        self.failUnless(isinstance(v, bool))
16
17        self.failUnlessArgHasType(CFPreferencesGetAppIntegerValue, 2, 'o^Z')
18        v, valid = CFPreferencesGetAppIntegerValue("WindowCloseAction", "com.apple.Terminal", None)
19        self.failUnless(valid)
20        self.failUnless(isinstance(v, (int, long)))
21
22        v = CFPreferencesCopyValue("WindowCloseAction", "com.apple.Terminal", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
23        self.failUnless(isinstance(v, unicode))
24
25
26        v = CFPreferencesCopyMultiple(None, "com.apple.Terminal", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
27        self.failUnless(isinstance(v, CFDictionaryRef))
28
29        v = CFPreferencesCopyMultiple([u"AutoFocus", u"WindowCloseAction"], "com.apple.Terminal", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
30        self.failUnless(isinstance(v, CFDictionaryRef))
31
32        self.failUnlessResultIsBOOL(CFPreferencesAppValueIsForced)
33        v = CFPreferencesAppValueIsForced("AutoFocus", "com.apple.Terminal")
34        self.failUnless(v is True or v is False)
35
36    def testSetting(self):
37        prefsFn = os.path.expanduser('~/Library/Preferences/PyObjCTest.plist')
38        if os.path.exists(prefsFn):
39            os.unlink(prefsFn)
40
41        v = CFPreferencesCopyAppValue("PyObjCTestValue", "PyObjCTest")
42        self.failUnless(v is None)
43
44        CFPreferencesSetAppValue("PyObjCTestValue", "value1", "PyObjCTest")
45        v = CFPreferencesCopyAppValue("PyObjCTestValue", "PyObjCTest")
46        self.failUnless(v == "value1")
47
48        CFPreferencesAddSuitePreferencesToApp("PyObjCTest", kCFPreferencesCurrentApplication)
49        CFPreferencesRemoveSuitePreferencesFromApp("PyObjCTest", kCFPreferencesCurrentApplication)
50
51        ok = CFPreferencesAppSynchronize("PyObjCTest")
52        self.failUnless(ok)
53        self.failUnless(os.path.exists(prefsFn))
54        os.unlink(prefsFn)
55
56        CFPreferencesSetValue("PyObjCTestValue2", "value2", "PyObjCTest", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
57        v = CFPreferencesCopyValue("PyObjCTestValue2", "PyObjCTest", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
58        self.failUnless(v == "value2")
59
60        CFPreferencesSetValue("PyObjCTestValue2", None, "PyObjCTest", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
61        v = CFPreferencesCopyValue("PyObjCTestValue2", "PyObjCTest", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
62        self.failUnless(v is None)
63
64        v = CFPreferencesCopyValue("PyObjCTestValue", "PyObjCTest", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
65        self.failUnless(v is not None)
66        CFPreferencesSetMultiple({
67            'key1': 99,
68            'key2': 42,
69        }, ["PyObjCTestValue"], "PyObjCTest", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
70        v = CFPreferencesCopyValue("PyObjCTestValue", "PyObjCTest", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
71        self.failUnless(v is None)
72        v = CFPreferencesCopyValue("key2", "PyObjCTest", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
73        self.failUnless(v == 42)
74
75        if os.path.exists(prefsFn):
76            os.unlink(prefsFn)
77        ok = CFPreferencesSynchronize("PyObjCTest", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
78        self.failUnless(ok)
79        self.failUnless(os.path.exists(prefsFn))
80        os.unlink(prefsFn)
81
82        self.failUnlessResultIsCFRetained(CFPreferencesCopyApplicationList)
83        apps = CFPreferencesCopyApplicationList(kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
84        self.failUnless(isinstance(apps, CFArrayRef))
85        self.failUnless(u"com.apple.AddressBook" in apps)
86
87        self.failUnlessResultIsCFRetained(CFPreferencesCopyKeyList)
88        keys = CFPreferencesCopyKeyList(u"com.apple.AddressBook", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
89        self.failUnless(isinstance(keys, CFArrayRef))
90        self.failUnless(u"ABNameSorting" in keys)
91
92    def testConstants(self):
93        self.failUnless(isinstance(kCFPreferencesAnyApplication, unicode))
94        self.failUnless(isinstance(kCFPreferencesCurrentApplication, unicode))
95        self.failUnless(isinstance(kCFPreferencesAnyHost, unicode))
96        self.failUnless(isinstance(kCFPreferencesCurrentHost, unicode))
97        self.failUnless(isinstance(kCFPreferencesAnyUser, unicode))
98        self.failUnless(isinstance(kCFPreferencesCurrentUser, unicode))
99
100
101if __name__ == "__main__":
102    main()
103