Index: test/codegen/lib/html/fileapi_test.dart |
diff --git a/test/codegen/lib/html/fileapi_test.dart b/test/codegen/lib/html/fileapi_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..edc6fa26fa7d596c32eb3621afd5cb8bc923f993 |
--- /dev/null |
+++ b/test/codegen/lib/html/fileapi_test.dart |
@@ -0,0 +1,198 @@ |
+library fileapi; |
+import 'package:unittest/unittest.dart'; |
+import 'package:unittest/html_individual_config.dart'; |
+import 'dart:html'; |
+import 'dart:async'; |
+ |
+class FileAndDir { |
+ FileEntry file; |
+ DirectoryEntry dir; |
+ FileAndDir(this.file, this.dir); |
+} |
+ |
+FileSystem fs; |
+ |
+main() { |
+ useHtmlIndividualConfiguration(); |
+ |
+ group('supported', () { |
+ test('supported', () { |
+ expect(FileSystem.supported, true); |
+ }); |
+ }); |
+ |
+ getFileSystem() { |
+ return window.requestFileSystem(100) |
+ .then((FileSystem fileSystem) { |
+ fs = fileSystem; |
+ }); |
+ } |
+ |
+ group('unsupported_throws', () { |
+ test('requestFileSystem', () { |
+ var expectation = FileSystem.supported ? returnsNormally : throws; |
+ expect(() { |
+ window.requestFileSystem(100); |
+ }, expectation); |
+ }); |
+ }); |
+ |
+ group('getDirectory', () { |
+ if (FileSystem.supported) { |
+ test('getFileSystem', getFileSystem); |
+ |
+ test('directoryDoesntExist', () { |
+ return fs.root.getDirectory( |
+ 'directory2') |
+ .catchError((error) { |
+ expect(error.code, equals(FileError.NOT_FOUND_ERR)); |
+ }, test: (e) => e is FileError); |
+ }); |
+ |
+ test('directoryCreate', () { |
+ return fs.root.createDirectory( |
+ 'directory3') |
+ .then((DirectoryEntry e) { |
+ expect(e.name, equals('directory3')); |
+ }); |
+ }); |
+ } |
+ }); |
+ |
+ group('getFile', () { |
+ if (FileSystem.supported) { |
+ test('getFileSystem', getFileSystem); |
+ |
+ test('fileDoesntExist', () { |
+ return fs.root.getFile( |
+ 'file2') |
+ .catchError((error) { |
+ expect(error.code, equals(FileError.NOT_FOUND_ERR)); |
+ }, test: (e) => e is FileError); |
+ }); |
+ |
+ test('fileCreate', () { |
+ return fs.root.createFile( |
+ 'file4') |
+ .then((FileEntry e) { |
+ expect(e.name, equals('file4')); |
+ expect(e.isFile, isTrue); |
+ return e.getMetadata(); |
+ }).then((Metadata metadata) { |
+ var changeTime = metadata.modificationTime; |
+ // Upped because our Windows buildbots can sometimes be particularly |
+ // slow. |
+ expect(new DateTime.now().difference(changeTime).inMinutes, |
+ lessThan(4)); |
+ expect(metadata.size, equals(0)); |
+ }); |
+ }); |
+ } |
+ }); |
+ |
+ // Do the boilerplate to get several files and directories created to then |
+ // test the functions that use those items. |
+ Future doDirSetup(String testName) { |
+ return fs.root.createFile( |
+ 'file_$testName') |
+ .then((FileEntry file) { |
+ return fs.root.createDirectory( |
+ 'dir_$testName') |
+ .then((DirectoryEntry dir) { |
+ return new Future.value(new FileAndDir(file, dir)); |
+ }); |
+ }); |
+ } |
+ |
+ group('directoryReader', () { |
+ if (FileSystem.supported) { |
+ test('getFileSystem', getFileSystem); |
+ |
+ test('readEntries', () { |
+ return doDirSetup('readEntries') |
+ .then((fileAndDir) { |
+ var reader = fileAndDir.dir.createReader(); |
+ return reader.readEntries(); |
+ }).then((entries) { |
+ expect(entries is List, true); |
+ }); |
+ }); |
+ } |
+ }); |
+ |
+ group('entry', () { |
+ if (FileSystem.supported) { |
+ test('getFileSystem', getFileSystem); |
+ |
+ test('copyTo', () { |
+ return doDirSetup('copyTo') |
+ .then((fileAndDir) { |
+ return fileAndDir.file.copyTo(fileAndDir.dir, name: 'copiedFile'); |
+ }).then((entry) { |
+ expect(entry.isFile, true); |
+ expect(entry.name, 'copiedFile'); |
+ }); |
+ }); |
+ |
+ test('getParent', () { |
+ return doDirSetup('getParent') |
+ .then((fileAndDir) { |
+ return fileAndDir.file.getParent(); |
+ }).then((entry) { |
+ expect(entry.name, ''); |
+ expect(entry.isFile, false); |
+ }); |
+ }); |
+ |
+ test('moveTo', () { |
+ return doDirSetup('moveTo') |
+ .then((fileAndDir) { |
+ return fileAndDir.file.moveTo(fileAndDir.dir, name: 'movedFile'); |
+ }).then((entry) { |
+ expect(entry.name, 'movedFile'); |
+ expect(entry.fullPath, '/dir_moveTo/movedFile'); |
+ return fs.root.getFile('file4'); |
+ }).catchError((error) { |
+ expect(error.code, equals(FileError.NOT_FOUND_ERR)); |
+ }, test: (e) => e is FileError); |
+ }); |
+ |
+ test('remove', () { |
+ return doDirSetup('remove') |
+ .then((fileAndDir) { |
+ return fileAndDir.file.remove().then((_) {}); |
+ }); |
+ }); |
+ } |
+ }); |
+ |
+ group('fileEntry', () { |
+ if (FileSystem.supported) { |
+ test('getFileSystem', getFileSystem); |
+ |
+ test('createWriter', () { |
+ return doDirSetup('createWriter') |
+ .then((fileAndDir) { |
+ return fileAndDir.file.createWriter(); |
+ }).then((writer) { |
+ expect(writer.position, 0); |
+ expect(writer.readyState, FileWriter.INIT); |
+ expect(writer.length, 0); |
+ }); |
+ }); |
+ |
+ test('file', () { |
+ return doDirSetup('file') |
+ .then((fileAndDir) { |
+ return fileAndDir.file.file() |
+ .then((fileObj) { |
+ expect(fileObj.name, fileAndDir.file.name); |
+ expect(fileObj.relativePath, ''); |
+ expect(new DateTime.now().difference( |
+ fileObj.lastModifiedDate).inSeconds, lessThan(60)); |
+ }); |
+ }); |
+ }); |
+ } |
+ }); |
+} |