OLD | NEW |
1 library fileapi; | 1 library fileapi; |
2 import '../../pkg/unittest/lib/unittest.dart'; | 2 import '../../pkg/unittest/lib/unittest.dart'; |
3 import '../../pkg/unittest/lib/html_individual_config.dart'; | 3 import '../../pkg/unittest/lib/html_individual_config.dart'; |
4 import 'dart:html'; | 4 import 'dart:html'; |
| 5 import 'dart:async'; |
5 | 6 |
6 void fail(message) { | 7 class FileAndDir { |
7 guardAsync(() { | 8 FileEntry file; |
8 expect(false, isTrue, reason: message); | 9 DirectoryEntry dir; |
9 }); | 10 FileAndDir(this.file, this.dir); |
10 } | 11 } |
11 | 12 |
12 FileSystem fs; | 13 FileSystem fs; |
13 | 14 |
14 main() { | 15 main() { |
15 useHtmlIndividualConfiguration(); | 16 useHtmlIndividualConfiguration(); |
16 | 17 |
17 group('supported', () { | 18 group('supported', () { |
18 test('supported', () { | 19 test('supported', () { |
19 expect(FileSystem.supported, true); | 20 expect(FileSystem.supported, true); |
20 }); | 21 }); |
21 }); | 22 }); |
22 | 23 |
23 getFileSystem() { | 24 getFileSystem() { |
24 window.requestFileSystem(Window.TEMPORARY, 100, | 25 return window.requestFileSystem(Window.TEMPORARY, 100) |
25 expectAsync1((FileSystem fileSystem) { | 26 .then((FileSystem fileSystem) { |
26 fs = fileSystem; | 27 fs = fileSystem; |
27 }), | 28 }); |
28 (e) { | |
29 fail('Got file error: ${e.code}'); | |
30 }); | |
31 } | 29 } |
32 | 30 |
33 group('unsupported_throws', () { | 31 group('unsupported_throws', () { |
34 test('requestFileSystem', () { | 32 test('requestFileSystem', () { |
35 var expectation = FileSystem.supported ? returnsNormally : throws; | 33 var expectation = FileSystem.supported ? returnsNormally : throws; |
36 expect(() { | 34 expect(() { |
37 window.requestFileSystem(Window.TEMPORARY, 100, (_) {}, (_) {}); | 35 window.requestFileSystem(Window.TEMPORARY, 100); |
38 }, expectation); | 36 }, expectation); |
39 }); | 37 }); |
40 }); | 38 }); |
41 | 39 |
42 group('getDirectory', () { | 40 group('getDirectory', () { |
43 if (FileSystem.supported) { | 41 if (FileSystem.supported) { |
44 test('getFileSystem', getFileSystem); | 42 test('getFileSystem', getFileSystem); |
45 | 43 |
46 test('directoryDoesntExist', () { | 44 test('directoryDoesntExist', () { |
47 fs.root.getDirectory( | 45 return fs.root.getDirectory( |
48 'directory2', | 46 'directory2', |
49 options: {}, | 47 options: {}) |
50 successCallback: (e) { | 48 .catchError((e) { |
51 fail('Should not be reached'); | 49 expect(e.error.code, equals(FileError.NOT_FOUND_ERR)); |
52 }, | 50 }, test: (e) => e is FileError); |
53 errorCallback: expectAsync1((FileError e) { | |
54 expect(e.code, equals(FileError.NOT_FOUND_ERR)); | |
55 })); | |
56 }); | 51 }); |
57 | 52 |
58 test('directoryCreate', () { | 53 test('directoryCreate', () { |
59 fs.root.getDirectory( | 54 return fs.root.getDirectory( |
60 'directory3', | 55 'directory3', |
61 options: {'create': true}, | 56 options: {'create': true}) |
62 successCallback: expectAsync1((DirectoryEntry e) { | 57 .then((DirectoryEntry e) { |
63 expect(e.name, equals('directory3')); | 58 expect(e.name, equals('directory3')); |
64 }), | 59 }); |
65 errorCallback: (e) { | |
66 fail('Got file error: ${e.code}'); | |
67 }); | |
68 }); | 60 }); |
69 } | 61 } |
70 }); | 62 }); |
71 | 63 |
72 group('getFile', () { | 64 group('getFile', () { |
73 if (FileSystem.supported) { | 65 if (FileSystem.supported) { |
74 test('getFileSystem', getFileSystem); | 66 test('getFileSystem', getFileSystem); |
75 | 67 |
76 test('fileDoesntExist', () { | 68 test('fileDoesntExist', () { |
77 fs.root.getFile( | 69 return fs.root.getFile( |
78 'file2', | 70 'file2', |
79 options: {}, | 71 options: {}) |
80 successCallback: (e) { | 72 .catchError((e) { |
81 fail('Should not be reached'); | 73 expect(e.error.code, equals(FileError.NOT_FOUND_ERR)); |
82 }, | 74 }, test: (e) => e is FileError); |
83 errorCallback: expectAsync1((FileError e) { | |
84 expect(e.code, equals(FileError.NOT_FOUND_ERR)); | |
85 })); | |
86 }); | 75 }); |
87 | 76 |
88 test('fileCreate', () { | 77 test('fileCreate', () { |
89 fs.root.getFile( | 78 return fs.root.getFile( |
90 'file4', | 79 'file4', |
91 options: {'create': true}, | 80 options: {'create': true}) |
92 successCallback: expectAsync1((FileEntry e) { | 81 .then((FileEntry e) { |
93 expect(e.name, equals('file4')); | 82 expect(e.name, equals('file4')); |
94 expect(e.isFile, isTrue); | 83 expect(e.isFile, isTrue); |
95 | 84 return e.getMetadata(); |
96 e.getMetadata(expectAsync1((Metadata metadata) { | 85 }).then((Metadata metadata) { |
97 var changeTime = metadata.modificationTime; | 86 var changeTime = metadata.modificationTime; |
98 expect(new DateTime.now().difference(changeTime).inSeconds, | 87 expect(new DateTime.now().difference(changeTime).inSeconds, |
99 lessThan(60)); | 88 lessThan(60)); |
100 })); | 89 expect(metadata.size, equals(0)); |
101 }), | 90 }); |
102 errorCallback: (e) { | |
103 fail('Got file error: ${e.code}'); | |
104 }); | |
105 }); | 91 }); |
106 } | 92 } |
107 }); | 93 }); |
| 94 |
| 95 // Do the boilerplate to get several files and directories created to then |
| 96 // test the functions that use those items. |
| 97 Future doDirSetup() { |
| 98 return fs.root.getFile( |
| 99 'file4', |
| 100 options: {'create': true}) |
| 101 .then((FileEntry file) { |
| 102 return fs.root.getDirectory( |
| 103 'directory3', |
| 104 options: {'create': true}) |
| 105 .then((DirectoryEntry dir) { |
| 106 return new Future.immediate(new FileAndDir(file, dir)); |
| 107 }); |
| 108 }); |
| 109 } |
| 110 |
| 111 group('directoryReader', () { |
| 112 if (FileSystem.supported) { |
| 113 test('getFileSystem', getFileSystem); |
| 114 |
| 115 test('readEntries', () { |
| 116 return doDirSetup() |
| 117 .then((fileAndDir) { |
| 118 var reader = fileAndDir.dir.createReader(); |
| 119 return reader.readEntries(); |
| 120 }).then((entries) { |
| 121 expect(entries is List, true); |
| 122 }); |
| 123 }); |
| 124 } |
| 125 }); |
| 126 |
| 127 group('entry', () { |
| 128 if (FileSystem.supported) { |
| 129 test('getFileSystem', getFileSystem); |
| 130 |
| 131 test('copyTo', () { |
| 132 return doDirSetup() |
| 133 .then((fileAndDir) { |
| 134 return fileAndDir.file.copyTo(fileAndDir.dir, name: 'copiedFile'); |
| 135 }).then((entry) { |
| 136 expect(entry.isFile, true); |
| 137 expect(entry.name, 'copiedFile'); |
| 138 }); |
| 139 }); |
| 140 |
| 141 test('getParent', () { |
| 142 return doDirSetup() |
| 143 .then((fileAndDir) { |
| 144 return fileAndDir.file.getParent(); |
| 145 }).then((entry) { |
| 146 expect(entry.name, ''); |
| 147 expect(entry.isFile, false); |
| 148 }); |
| 149 }); |
| 150 |
| 151 test('moveTo', () { |
| 152 return doDirSetup() |
| 153 .then((fileAndDir) { |
| 154 return fileAndDir.file.moveTo(fileAndDir.dir, name: 'movedFile'); |
| 155 }).then((entry) { |
| 156 expect(entry.name, 'movedFile'); |
| 157 expect(entry.fullPath, '/directory3/movedFile'); |
| 158 return fs.root.getFile('file4', options: {'create': false}); |
| 159 }).catchError((e) { |
| 160 expect(e.error.code, equals(FileError.NOT_FOUND_ERR)); |
| 161 }, test: (e) => e is FileError); |
| 162 }); |
| 163 |
| 164 test('remove', () { |
| 165 return doDirSetup() |
| 166 .then((fileAndDir) { |
| 167 return fileAndDir.file.remove().then((_) {}); |
| 168 }); |
| 169 }); |
| 170 } |
| 171 }); |
| 172 |
| 173 group('fileEntry', () { |
| 174 if (FileSystem.supported) { |
| 175 test('getFileSystem', getFileSystem); |
| 176 |
| 177 test('createWriter', () { |
| 178 return doDirSetup() |
| 179 .then((fileAndDir) { |
| 180 return fileAndDir.file.createWriter(); |
| 181 }).then((writer) { |
| 182 expect(writer.position, 0); |
| 183 expect(writer.readyState, FileWriter.INIT); |
| 184 expect(writer.length, 0); |
| 185 }); |
| 186 }); |
| 187 |
| 188 test('file', () { |
| 189 return doDirSetup() |
| 190 .then((fileAndDir) { |
| 191 return fileAndDir.file.file() |
| 192 .then((fileObj) { |
| 193 expect(fileObj.name, fileAndDir.file.name); |
| 194 expect(fileObj.relativePath, ''); |
| 195 expect(new DateTime.now().difference( |
| 196 fileObj.lastModifiedDate).inSeconds, lessThan(60)); |
| 197 }); |
| 198 }); |
| 199 }); |
| 200 } |
| 201 }); |
108 } | 202 } |
OLD | NEW |