| 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(DomException.NOT_FOUND)); | |
| }, test: (e) => e is DomError); | |
| }); | |
| 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(DomException.NOT_FOUND)); | |
| }, test: (e) => e is DomError); | |
| }); | |
| 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(DomException.NOT_FOUND)); | |
| }, test: (e) => e is DomError); | |
| }); | |
| 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)); | |
| }); | |
| }); | |
| }); | |
| } | |
| }); | |
| } |