1from PyObjCTools.TestSupport import *
2
3from Foundation import *
4
5try:
6    unicode
7except NameError:
8    unicode = str
9
10class TestNSFileManagerHelper (NSObject):
11    def fileManager_shouldProceedAfterError_(self, a, b): return 1
12    def fileManager_willProcessPath_(self, a, b): pass
13    def fileManager_shouldCopyItemAtPath_toPath_(self, a, b, c): return 1
14    def fileManager_shouldProceedAfterError_copyingItemAtPath_toPath_(self, a, b, c, d): return 1
15    def fileManager_shouldMoveItemAtPath_toPath_(self, a, b, c): return 1
16    def fileManager_shouldProceedAfterError_movingItemAtPath_toPath_(self, a, b, c, d): return 1
17    def fileManager_shouldLinkItemAtPath_toPath_(self, a, b, c): return 1
18    def fileManager_shouldProceedAfterError_linkingItemAtPath_toPath_(self, a, b, c, d): return 1
19    def fileManager_shouldRemoveItemAtPath_(self, a, b): return 1
20    def fileManager_shouldProceedAfterError_removingItemAtPath_(self, a, b, c): return 1
21
22    def fileManager_shouldCopyItemAtURL_toURL_(self, a, b, c): return 1
23    def fileManager_shouldProceedAfterError_copyingItemAtURL_toURL_(self, a, b, c, d): return 1
24    def fileManager_shouldMoveItemAtURL_toURL_(self, a, b, c): return 1
25    def fileManager_shouldProceedAfterError_movingItemAtURL_toURL_(self, a, b, c, d): return 1
26    def fileManager_shouldLinkItemAtURL_toURL_(self, a, b, c): return 1
27    def fileManager_shouldProceedAfterError_linkingItemAtURL_toURL_(self, a, b, c, d): return 1
28    def fileManager_shouldRemoveItemAtURL_(self, a, b): return 1
29    def fileManager_shouldProceedAfterError_removingItemAtURL_(self, a, b, c): return 1
30
31
32
33class TestNSFileManager (TestCase):
34    def testConstants(self):
35        self.assertEqual(NSFoundationVersionWithFileManagerResourceForkSupport, 412)
36
37        self.assertIsInstance(NSFileType, unicode)
38        self.assertIsInstance(NSFileTypeDirectory, unicode)
39        self.assertIsInstance(NSFileTypeRegular, unicode)
40        self.assertIsInstance(NSFileTypeSymbolicLink, unicode)
41        self.assertIsInstance(NSFileTypeSocket, unicode)
42        self.assertIsInstance(NSFileTypeCharacterSpecial, unicode)
43        self.assertIsInstance(NSFileTypeBlockSpecial, unicode)
44        self.assertIsInstance(NSFileTypeUnknown, unicode)
45        self.assertIsInstance(NSFileSize, unicode)
46        self.assertIsInstance(NSFileModificationDate, unicode)
47        self.assertIsInstance(NSFileReferenceCount, unicode)
48        self.assertIsInstance(NSFileDeviceIdentifier, unicode)
49        self.assertIsInstance(NSFileOwnerAccountName, unicode)
50        self.assertIsInstance(NSFileGroupOwnerAccountName, unicode)
51        self.assertIsInstance(NSFilePosixPermissions, unicode)
52        self.assertIsInstance(NSFileSystemNumber, unicode)
53        self.assertIsInstance(NSFileSystemFileNumber, unicode)
54        self.assertIsInstance(NSFileExtensionHidden, unicode)
55        self.assertIsInstance(NSFileHFSCreatorCode, unicode)
56        self.assertIsInstance(NSFileHFSTypeCode, unicode)
57        self.assertIsInstance(NSFileImmutable, unicode)
58        self.assertIsInstance(NSFileAppendOnly, unicode)
59        self.assertIsInstance(NSFileCreationDate, unicode)
60        self.assertIsInstance(NSFileOwnerAccountID, unicode)
61        self.assertIsInstance(NSFileGroupOwnerAccountID, unicode)
62        self.assertIsInstance(NSFileBusy, unicode)
63        self.assertIsInstance(NSFileSystemSize, unicode)
64        self.assertIsInstance(NSFileSystemFreeSize, unicode)
65        self.assertIsInstance(NSFileSystemNodes, unicode)
66        self.assertIsInstance(NSFileSystemFreeNodes, unicode)
67
68    @min_os_level('10.6')
69    def testConstants10_6(self):
70        self.assertEqual(NSVolumeEnumerationSkipHiddenVolumes, 1<<1)
71        self.assertEqual(NSVolumeEnumerationProduceFileReferenceURLs, 1<<2)
72
73        self.assertEqual(NSDirectoryEnumerationSkipsSubdirectoryDescendants, 1<<0)
74        self.assertEqual(NSDirectoryEnumerationSkipsPackageDescendants, 1<<1)
75        self.assertEqual(NSDirectoryEnumerationSkipsHiddenFiles, 1<<2)
76
77        self.assertEqual(NSFileManagerItemReplacementUsingNewMetadataOnly, 1<<0)
78        self.assertEqual(NSFileManagerItemReplacementWithoutDeletingBackupItem, 1<<1)
79
80    @min_os_level('10.8')
81    def testConstants10_8(self):
82        self.assertIsInstance(NSUbiquityIdentityDidChangeNotification, unicode)
83
84    @min_os_level('10.6')
85    def testMethods10_6(self):
86        self.assertArgIsOut(NSFileManager.contentsOfDirectoryAtURL_includingPropertiesForKeys_options_error_, 3)
87        self.assertArgIsBOOL(NSFileManager.URLForDirectory_inDomain_appropriateForURL_create_error_, 3)
88        self.assertArgIsOut(NSFileManager.URLForDirectory_inDomain_appropriateForURL_create_error_, 4)
89
90        self.assertResultIsBOOL(NSFileManager.copyItemAtURL_toURL_error_)
91        self.assertArgIsOut(NSFileManager.copyItemAtURL_toURL_error_, 2)
92        self.assertResultIsBOOL(NSFileManager.moveItemAtURL_toURL_error_)
93        self.assertArgIsOut(NSFileManager.moveItemAtURL_toURL_error_, 2)
94        self.assertResultIsBOOL(NSFileManager.linkItemAtURL_toURL_error_)
95        self.assertArgIsOut(NSFileManager.linkItemAtURL_toURL_error_, 2)
96        self.assertResultIsBOOL(NSFileManager.removeItemAtURL_error_)
97        self.assertArgIsOut(NSFileManager.removeItemAtURL_error_, 1)
98
99        self.assertArgIsBlock(NSFileManager.enumeratorAtURL_includingPropertiesForKeys_options_errorHandler_, 3, objc._C_NSBOOL + b'@@')
100
101        self.assertResultIsBOOL(NSFileManager.replaceItemAtURL_withItemAtURL_backupItemName_options_resultingItemURL_error_)
102        self.assertArgIsOut(NSFileManager.replaceItemAtURL_withItemAtURL_backupItemName_options_resultingItemURL_error_, 4)
103        self.assertArgIsOut(NSFileManager.replaceItemAtURL_withItemAtURL_backupItemName_options_resultingItemURL_error_, 5)
104
105
106    @min_os_level('10.7')
107    def testMethods10_7(self):
108        self.assertResultIsBOOL(NSFileManager.createDirectoryAtURL_withIntermediateDirectories_attributes_error_)
109        self.assertArgIsBOOL(NSFileManager.createDirectoryAtURL_withIntermediateDirectories_attributes_error_, 1)
110        self.assertArgIsOut(NSFileManager.createDirectoryAtURL_withIntermediateDirectories_attributes_error_, 3)
111
112        self.assertResultIsBOOL(NSFileManager.createSymbolicLinkAtURL_withDestinationURL_error_)
113        self.assertArgIsOut(NSFileManager.createSymbolicLinkAtURL_withDestinationURL_error_, 2)
114
115        self.assertResultIsBOOL(NSFileManager.setUbiquitous_itemAtURL_destinationURL_error_)
116        self.assertArgIsBOOL(NSFileManager.setUbiquitous_itemAtURL_destinationURL_error_, 0)
117        self.assertArgIsOut(NSFileManager.setUbiquitous_itemAtURL_destinationURL_error_, 3)
118        self.assertResultIsBOOL(NSFileManager.isUbiquitousItemAtURL_)
119
120        self.assertResultIsBOOL(NSFileManager.startDownloadingUbiquitousItemAtURL_error_)
121        self.assertArgIsOut(NSFileManager.startDownloadingUbiquitousItemAtURL_error_, 1)
122
123        self.assertResultIsBOOL(NSFileManager.evictUbiquitousItemAtURL_error_)
124        self.assertArgIsOut(NSFileManager.evictUbiquitousItemAtURL_error_, 1)
125
126        self.assertArgIsOut(NSFileManager.URLForPublishingUbiquitousItemAtURL_expirationDate_error_, 1)
127        self.assertArgIsOut(NSFileManager.URLForPublishingUbiquitousItemAtURL_expirationDate_error_, 2)
128
129    @min_os_level('10.8')
130    def testMethods10_8(self):
131        self.assertResultIsBOOL(NSFileManager.trashItemAtURL_resultingItemURL_error_)
132        self.assertArgIsOut(NSFileManager.trashItemAtURL_resultingItemURL_error_, 1)
133        self.assertArgIsOut(NSFileManager.trashItemAtURL_resultingItemURL_error_, 2)
134
135    def testOutput(self):
136        obj = NSFileManager.defaultManager()
137        m = obj.setAttributes_ofItemAtPath_error_.__metadata__()
138        self.assertTrue(m['arguments'][4]['type'].startswith(b'o^'))
139
140        m = obj.createDirectoryAtPath_withIntermediateDirectories_attributes_error_.__metadata__()
141        self.assertEqual(m['arguments'][3]['type'] , b'Z')
142        self.assertTrue(m['arguments'][5]['type'].startswith(b'o^'))
143
144        m = obj.contentsOfDirectoryAtPath_error_.__metadata__()
145        self.assertTrue(m['arguments'][3]['type'].startswith(b'o^'))
146
147        m = obj.subpathsOfDirectoryAtPath_error_.__metadata__()
148        self.assertTrue(m['arguments'][3]['type'].startswith(b'o^'))
149
150        m = obj.attributesOfItemAtPath_error_.__metadata__()
151        self.assertTrue(m['arguments'][3]['type'].startswith(b'o^'))
152
153        m = obj.attributesOfFileSystemForPath_error_.__metadata__()
154        self.assertTrue(m['arguments'][3]['type'].startswith(b'o^'))
155
156        m = obj.createSymbolicLinkAtPath_withDestinationPath_error_.__metadata__()
157        self.assertTrue(m['arguments'][4]['type'].startswith(b'o^'))
158
159        m = obj.destinationOfSymbolicLinkAtPath_error_.__metadata__()
160        self.assertTrue(m['arguments'][3]['type'].startswith(b'o^'))
161
162        m = obj.copyItemAtPath_toPath_error_.__metadata__()
163        self.assertEqual(m['retval']['type'] , b'Z')
164        self.assertTrue(m['arguments'][4]['type'].startswith(b'o^'))
165
166        m = obj.moveItemAtPath_toPath_error_.__metadata__()
167        self.assertEqual(m['retval']['type'] , b'Z')
168        self.assertTrue(m['arguments'][4]['type'].startswith(b'o^'))
169
170        m = obj.linkItemAtPath_toPath_error_.__metadata__()
171        self.assertEqual(m['retval']['type'] , b'Z')
172        self.assertTrue(m['arguments'][4]['type'].startswith(b'o^'))
173
174        m = obj.removeItemAtPath_error_.__metadata__()
175        self.assertEqual(m['retval']['type'] , b'Z')
176        self.assertTrue(m['arguments'][3]['type'].startswith(b'o^'))
177
178    def testProtocols(self):
179        class FileManagerTest1 (NSObject):
180            def fileManager_shouldCopyItemAtPath_toPath_(self, fm, src, dst):
181                return True
182
183            def fileManager_shouldProceedAfterError_copyingItemAtPath_toPath_(self, fm, error, src, dst):
184                return True
185
186            def fileManager_shouldMoveItemAtPath_toPath_(self, fm,  src, dst):
187                return True
188
189            def fileManager_shouldProceedAfterError_movingItemAtPath_toPath_(self, fm,  error, src, dst):
190                return True
191
192            def fileManager_shouldLinkItemAtPath_toPath_(self, fm, src, dst):
193                return True
194
195            def fileManager_shouldProceedAfterError_linkingItemAtPath_toPath_(self, fm,  error, src, dst):
196                return True
197
198            def fileManager_shouldRemoveItemAtPath_(self, fm, src):
199                return True
200
201            def fileManager_shouldProceedAfterError_removingItemAtPath_(self, fm,  error, src):
202                return True
203
204        obj = FileManagerTest1.alloc().init()
205        m = obj.fileManager_shouldCopyItemAtPath_toPath_.__metadata__()
206        self.assertEqual(m['retval']['type'] , 'Z')
207        m = obj.fileManager_shouldProceedAfterError_copyingItemAtPath_toPath_.__metadata__()
208        self.assertEqual(m['retval']['type'] , 'Z')
209        m = obj.fileManager_shouldMoveItemAtPath_toPath_.__metadata__()
210        self.assertEqual(m['retval']['type'] , 'Z')
211        m = obj.fileManager_shouldProceedAfterError_movingItemAtPath_toPath_.__metadata__()
212        self.assertEqual(m['retval']['type'] , 'Z')
213        m = obj.fileManager_shouldLinkItemAtPath_toPath_.__metadata__()
214        self.assertEqual(m['retval']['type'] , 'Z')
215        m = obj.fileManager_shouldProceedAfterError_linkingItemAtPath_toPath_.__metadata__()
216        self.assertEqual(m['retval']['type'] , 'Z')
217        m = obj.fileManager_shouldRemoveItemAtPath_.__metadata__()
218        self.assertEqual(m['retval']['type'] , 'Z')
219        m = obj.fileManager_shouldProceedAfterError_removingItemAtPath_.__metadata__()
220        self.assertEqual(m['retval']['type'] , 'Z')
221    @min_os_level('10.5')
222    def testMethods10_5(self):
223        self.assertResultIsBOOL(NSFileManager.setAttributes_ofItemAtPath_error_)
224        self.assertArgIsOut(NSFileManager.setAttributes_ofItemAtPath_error_, 2)
225
226        self.assertResultIsBOOL(NSFileManager.createDirectoryAtPath_withIntermediateDirectories_attributes_error_)
227        self.assertArgIsBOOL(NSFileManager.createDirectoryAtPath_withIntermediateDirectories_attributes_error_, 1)
228        self.assertArgIsOut(NSFileManager.createDirectoryAtPath_withIntermediateDirectories_attributes_error_, 3)
229
230        self.assertArgIsOut(NSFileManager.contentsOfDirectoryAtPath_error_, 1)
231        self.assertArgIsOut(NSFileManager.subpathsOfDirectoryAtPath_error_, 1)
232        self.assertArgIsOut(NSFileManager.attributesOfItemAtPath_error_, 1)
233        self.assertArgIsOut(NSFileManager.attributesOfFileSystemForPath_error_, 1)
234
235        self.assertResultIsBOOL(NSFileManager.createSymbolicLinkAtPath_withDestinationPath_error_)
236        self.assertArgIsOut(NSFileManager.createSymbolicLinkAtPath_withDestinationPath_error_, 2)
237
238        self.assertArgIsOut(NSFileManager.destinationOfSymbolicLinkAtPath_error_, 1)
239
240        self.assertResultIsBOOL(NSFileManager.copyItemAtPath_toPath_error_)
241        self.assertArgIsOut(NSFileManager.copyItemAtPath_toPath_error_, 2)
242        self.assertResultIsBOOL(NSFileManager.moveItemAtPath_toPath_error_)
243        self.assertArgIsOut(NSFileManager.moveItemAtPath_toPath_error_, 2)
244        self.assertResultIsBOOL(NSFileManager.linkItemAtPath_toPath_error_)
245        self.assertArgIsOut(NSFileManager.linkItemAtPath_toPath_error_, 2)
246        self.assertResultIsBOOL(NSFileManager.removeItemAtPath_error_)
247        self.assertArgIsOut(NSFileManager.removeItemAtPath_error_, 1)
248
249
250    def testMethods(self):
251        self.assertArgIsBOOL(NSFileManager.fileAttributesAtPath_traverseLink_, 1)
252        self.assertResultIsBOOL(NSFileManager.changeFileAttributes_atPath_)
253        self.assertResultIsBOOL(NSFileManager.createSymbolicLinkAtPath_pathContent_)
254        self.assertResultIsBOOL(NSFileManager.createDirectoryAtPath_attributes_)
255        self.assertResultIsBOOL(NSFileManager.linkPath_toPath_handler_)
256        self.assertResultIsBOOL(NSFileManager.copyPath_toPath_handler_)
257        self.assertResultIsBOOL(NSFileManager.movePath_toPath_handler_)
258        self.assertResultIsBOOL(NSFileManager.removeFileAtPath_handler_)
259        self.assertResultIsBOOL(NSFileManager.changeCurrentDirectoryPath_)
260        self.assertResultIsBOOL(NSFileManager.fileExistsAtPath_)
261        self.assertResultIsBOOL(NSFileManager.fileExistsAtPath_isDirectory_)
262        self.assertArgHasType(NSFileManager.fileExistsAtPath_isDirectory_, 1, b'o^' + objc._C_NSBOOL)
263        self.assertResultIsBOOL(NSFileManager.isReadableFileAtPath_)
264        self.assertResultIsBOOL(NSFileManager.isWritableFileAtPath_)
265        self.assertResultIsBOOL(NSFileManager.isExecutableFileAtPath_)
266        self.assertResultIsBOOL(NSFileManager.isDeletableFileAtPath_)
267        self.assertResultIsBOOL(NSFileManager.contentsEqualAtPath_andPath_)
268        self.assertResultIsBOOL(NSFileManager.createFileAtPath_contents_attributes_)
269        self.assertResultHasType(NSFileManager.fileSystemRepresentationWithPath_, b'^' + objc._C_CHAR_AS_TEXT)
270        self.assertResultIsNullTerminated(NSFileManager.fileSystemRepresentationWithPath_)
271        self.assertArgHasType(NSFileManager.stringWithFileSystemRepresentation_length_, 0, b'n^' + objc._C_CHAR_AS_TEXT)
272        self.assertArgSizeInArg(NSFileManager.stringWithFileSystemRepresentation_length_, 0, 1)
273
274        self.assertResultIsBOOL(NSDictionary.fileIsImmutable)
275        self.assertResultIsBOOL(NSDictionary.fileIsAppendOnly)
276        self.assertResultIsBOOL(NSDictionary.fileExtensionHidden)
277
278    def testProtocols(self):
279        self.assertResultIsBOOL(TestNSFileManagerHelper.fileManager_shouldProceedAfterError_)
280        self.assertResultIsBOOL(TestNSFileManagerHelper.fileManager_shouldCopyItemAtPath_toPath_)
281        self.assertResultIsBOOL(TestNSFileManagerHelper.fileManager_shouldProceedAfterError_copyingItemAtPath_toPath_)
282        self.assertResultIsBOOL(TestNSFileManagerHelper.fileManager_shouldMoveItemAtPath_toPath_)
283        self.assertResultIsBOOL(TestNSFileManagerHelper.fileManager_shouldProceedAfterError_movingItemAtPath_toPath_)
284        self.assertResultIsBOOL(TestNSFileManagerHelper.fileManager_shouldLinkItemAtPath_toPath_)
285        self.assertResultIsBOOL(TestNSFileManagerHelper.fileManager_shouldProceedAfterError_linkingItemAtPath_toPath_)
286        self.assertResultIsBOOL(TestNSFileManagerHelper.fileManager_shouldRemoveItemAtPath_)
287        self.assertResultIsBOOL(TestNSFileManagerHelper.fileManager_shouldProceedAfterError_removingItemAtPath_)
288
289    @min_os_level('10.6')
290    def testProtocols10_6(self):
291
292        self.assertResultIsBOOL(TestNSFileManagerHelper.fileManager_shouldCopyItemAtURL_toURL_)
293        self.assertResultIsBOOL(TestNSFileManagerHelper.fileManager_shouldProceedAfterError_copyingItemAtURL_toURL_)
294        self.assertResultIsBOOL(TestNSFileManagerHelper.fileManager_shouldMoveItemAtURL_toURL_)
295        self.assertResultIsBOOL(TestNSFileManagerHelper.fileManager_shouldProceedAfterError_movingItemAtURL_toURL_)
296        self.assertResultIsBOOL(TestNSFileManagerHelper.fileManager_shouldLinkItemAtURL_toURL_)
297        self.assertResultIsBOOL(TestNSFileManagerHelper.fileManager_shouldProceedAfterError_linkingItemAtURL_toURL_)
298        self.assertResultIsBOOL(TestNSFileManagerHelper.fileManager_shouldRemoveItemAtURL_)
299        self.assertResultIsBOOL(TestNSFileManagerHelper.fileManager_shouldProceedAfterError_removingItemAtURL_)
300
301if __name__ == '__main__':
302    main()
303