1
2from PyObjCTools.TestSupport import *
3from LaunchServices import *
4
5try:
6    long
7except NameError:
8    long = int
9
10try:
11    unicode
12except NameError:
13    unicode = str
14
15class TestLSSharedFileList (TestCase):
16    def testTypes(self):
17        self.assertIsCFType(LSSharedFileListRef)
18        self.assertIsCFType(LSSharedFileListItemRef)
19
20    @min_os_level('10.5')
21    def testConstants10_5(self):
22        self.assertIsInstance(kLSSharedFileListFavoriteVolumes, unicode)
23        self.assertIsInstance(kLSSharedFileListFavoriteItems, unicode)
24        self.assertIsInstance(kLSSharedFileListRecentApplicationItems, unicode)
25        self.assertIsInstance(kLSSharedFileListRecentDocumentItems, unicode)
26        self.assertIsInstance(kLSSharedFileListRecentServerItems, unicode)
27        self.assertIsInstance(kLSSharedFileListSessionLoginItems, unicode)
28        self.assertIsInstance(kLSSharedFileListGlobalLoginItems, unicode)
29        self.assertIsInstance(kLSSharedFileListRecentItemsMaxAmount, unicode)
30        self.assertIsInstance(kLSSharedFileListVolumesComputerVisible, unicode)
31        self.assertIsInstance(kLSSharedFileListVolumesIDiskVisible, unicode)
32        self.assertIsInstance(kLSSharedFileListVolumesNetworkVisible, unicode)
33        self.assertIsInstance(kLSSharedFileListItemHidden, unicode)
34
35    @min_os_level('10.5')
36    def testMagicConstants10_5(self):
37        self.assertIsInstance(kLSSharedFileListItemBeforeFirst, LSSharedFileListItemRef)
38        self.assertIsInstance(kLSSharedFileListItemLast, LSSharedFileListItemRef)
39
40    def testConstants(self):
41        self.assertEqual(kLSSharedFileListNoUserInteraction, 1)
42        self.assertEqual(kLSSharedFileListDoNotMountVolumes, 2)
43
44    def testFunctions(self):
45        self.assertIsInstance(LSSharedFileListGetTypeID(), (int, long))
46        self.assertIsInstance(LSSharedFileListItemGetTypeID(), (int, long))
47
48        self.assertResultIsCFRetained(LSSharedFileListCreate)
49        lst = LSSharedFileListCreate(None, kLSSharedFileListFavoriteItems, None)
50        self.assertIsInstance(lst, LSSharedFileListRef)
51
52        rl = CFRunLoopGetCurrent()
53
54
55        self.assertArgIsFunction(LSSharedFileListAddObserver, 3, b'v^{OpaqueLSSharedFileListRef=}^v', True)
56        self.assertArgHasType(LSSharedFileListAddObserver, 4, b'^v')
57
58        @objc.callbackFor(LSSharedFileListAddObserver)
59        def callback(lst, ctxt):
60            pass
61
62        LSSharedFileListAddObserver(lst, rl, kCFRunLoopDefaultMode, callback, None)
63        LSSharedFileListRemoveObserver(lst, rl, kCFRunLoopDefaultMode, callback, None)
64
65        v = LSSharedFileListGetSeedValue(lst)
66        self.assertIsInstance(v, (int, long))
67
68        self.assertResultIsCFRetained(LSSharedFileListCopyProperty)
69        self.assertResultHasType(LSSharedFileListCopyProperty, b'@')
70        v = LSSharedFileListCopyProperty(lst, b"pyobjc.name".decode('latin1'))
71
72        v = LSSharedFileListSetProperty(lst, b"pyobjc.name".decode('latin1'), b"value".decode('latin1'))
73        self.assertIsInstance(v, (int, long))
74        v = LSSharedFileListCopyProperty(lst, b"pyobjc.name".decode('latin1'))
75        self.assertEqual(v, b"value".decode('latin1'))
76
77        self.assertArgIsOut(LSSharedFileListCopySnapshot, 1)
78        v, seed = LSSharedFileListCopySnapshot(lst, None)
79        self.assertIsInstance(v, CFArrayRef)
80        self.assertIsInstance(seed, (int,long))
81
82        self.assertResultIsCFRetained(LSSharedFileListInsertItemURL)
83        item = LSSharedFileListInsertItemURL(lst, kLSSharedFileListItemLast, b"PyObjC.Test".decode('latin1'), None,
84                CFURLCreateWithString(None, "file:///etc/hosts", None), {}, [])
85        self.assertIsInstance(item, LSSharedFileListItemRef)
86
87        v = LSSharedFileListItemGetID(item)
88        self.assertIsInstance(v, (int, long))
89
90        v = LSSharedFileListItemCopyIconRef(item)
91        if v is not None:
92            self.assertIsInstance(v, IconRef)
93
94        self.assertResultIsCFRetained(LSSharedFileListItemCopyDisplayName)
95        v = LSSharedFileListItemCopyDisplayName(item)
96        self.assertIsInstance(v, unicode)
97
98        self.assertArgIsOut(LSSharedFileListItemResolve, 2)
99        self.assertArgIsOut(LSSharedFileListItemResolve, 3)
100        self.assertArgIsCFRetained(LSSharedFileListItemResolve, 2)
101        v, url, ref = LSSharedFileListItemResolve(item, 0, None, objc.NULL)
102        self.assertIsInstance(v, (int, long))
103        if url is not None:
104            self.assertIsInstance(url, CFURLRef)
105
106        v = LSSharedFileListItemSetProperty(item, b"pyobjc.name".decode('latin1'), b"pyobjc.test".decode('latin1'))
107        self.assertIsInstance(v, (int, long))
108
109        self.assertResultIsCFRetained(LSSharedFileListItemCopyProperty)
110        v = LSSharedFileListItemCopyProperty(item, b"pyobjc.name".decode('latin1'))
111        if v is not None:
112            self.assertEqual(v, "pyobjc.test")
113
114        v = LSSharedFileListItemMove(lst, item, kLSSharedFileListItemBeforeFirst)
115        self.assertIsInstance(v, (int, long))
116
117        v = LSSharedFileListItemRemove(lst, item)
118        self.assertIsInstance(v, (int, long))
119
120        v = LSSharedFileListRemoveAllItems(lst)
121        self.assertIsInstance(v, (int, long))
122
123
124
125
126    @expectedFailure
127    def testMissing(self):
128        # Needs more infrastructure
129        self.fail('LSSharedFileListSetAuthorization')
130
131        # FSRef suckage
132        self.fail('LSSharedFileListItemRef')
133
134
135
136
137
138
139
140
141
142
143if __name__ == "__main__":
144    main()
145