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.assertIsInstance(v, unicode)
10        self.assertResultIsBOOL(CFPreferencesGetAppBooleanValue)
11        self.assertArgHasType(CFPreferencesGetAppBooleanValue, 2, b'o^Z')
12        v, valid = CFPreferencesGetAppBooleanValue("AutoFocus", "com.apple.Terminal", None)
13        self.assertTrue(valid)
14        self.assertIsInstance(v, bool)
15        self.assertArgHasType(CFPreferencesGetAppIntegerValue, 2, b'o^Z')
16        v, valid = CFPreferencesGetAppIntegerValue("WindowCloseAction", "com.apple.Terminal", None)
17        self.assertTrue(valid)
18        self.assertIsInstance(v, (int, long))
19        v = CFPreferencesCopyValue("WindowCloseAction", "com.apple.Terminal", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
20        self.assertIsInstance(v, unicode)
21        v = CFPreferencesCopyMultiple(None, "com.apple.Terminal", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
22        self.assertIsInstance(v, CFDictionaryRef)
23        v = CFPreferencesCopyMultiple([u"AutoFocus", u"WindowCloseAction"], "com.apple.Terminal", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
24        self.assertIsInstance(v, CFDictionaryRef)
25        self.assertResultIsBOOL(CFPreferencesAppValueIsForced)
26        v = CFPreferencesAppValueIsForced("AutoFocus", "com.apple.Terminal")
27        self.assertIs(v is True or v, False)
28    def testSetting(self):
29        prefsFn = os.path.expanduser('~/Library/Preferences/PyObjCTest.plist')
30        if os.path.exists(prefsFn):
31            os.unlink(prefsFn)
32
33        v = CFPreferencesCopyAppValue("PyObjCTestValue", "PyObjCTest")
34        self.assertIs(v, None)
35        CFPreferencesSetAppValue("PyObjCTestValue", "value1", "PyObjCTest")
36        v = CFPreferencesCopyAppValue("PyObjCTestValue", "PyObjCTest")
37        self.assertEqual(v , "value1")
38        CFPreferencesAddSuitePreferencesToApp("PyObjCTest", kCFPreferencesCurrentApplication)
39        CFPreferencesRemoveSuitePreferencesFromApp("PyObjCTest", kCFPreferencesCurrentApplication)
40
41        ok = CFPreferencesAppSynchronize("PyObjCTest")
42        self.assertTrue(ok)
43        self.assertTrue(os.path.exists(prefsFn))
44        os.unlink(prefsFn)
45
46        CFPreferencesSetValue("PyObjCTestValue2", "value2", "PyObjCTest", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
47        v = CFPreferencesCopyValue("PyObjCTestValue2", "PyObjCTest", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
48        self.assertEqual(v , "value2")
49        CFPreferencesSetValue("PyObjCTestValue2", None, "PyObjCTest", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
50        v = CFPreferencesCopyValue("PyObjCTestValue2", "PyObjCTest", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
51        self.assertIs(v, None)
52        v = CFPreferencesCopyValue("PyObjCTestValue", "PyObjCTest", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
53        self.assertIsNot(v, None)
54        CFPreferencesSetMultiple({
55            'key1': 99,
56            'key2': 42,
57        }, ["PyObjCTestValue"], "PyObjCTest", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
58        v = CFPreferencesCopyValue("PyObjCTestValue", "PyObjCTest", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
59        self.assertIs(v, None)
60        v = CFPreferencesCopyValue("key2", "PyObjCTest", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
61        self.assertEqual(v , 42)
62        if os.path.exists(prefsFn):
63            os.unlink(prefsFn)
64        ok = CFPreferencesSynchronize("PyObjCTest", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
65        self.assertTrue(ok)
66        self.assertTrue(os.path.exists(prefsFn))
67        os.unlink(prefsFn)
68
69        self.assertResultIsCFRetained(CFPreferencesCopyApplicationList)
70        apps = CFPreferencesCopyApplicationList(kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
71        self.assertIsInstance(apps, CFArrayRef)
72        self.assertIsIn(u"com.apple.AddressBook", apps)
73        self.assertResultIsCFRetained(CFPreferencesCopyKeyList)
74        keys = CFPreferencesCopyKeyList(u"com.apple.AddressBook", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
75        self.assertIsInstance(keys, CFArrayRef)
76        self.assertIsIn(u"ABNameSorting", keys)
77    def testConstants(self):
78        self.assertIsInstance(kCFPreferencesAnyApplication, unicode)
79        self.assertIsInstance(kCFPreferencesCurrentApplication, unicode)
80        self.assertIsInstance(kCFPreferencesAnyHost, unicode)
81        self.assertIsInstance(kCFPreferencesCurrentHost, unicode)
82        self.assertIsInstance(kCFPreferencesAnyUser, unicode)
83        self.assertIsInstance(kCFPreferencesCurrentUser, unicode)
84if __name__ == "__main__":
85    main()
86