library fileapi; import '../../pkg/unittest/lib/unittest.dart'; import '../../pkg/unittest/lib/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)); }); }); }); } }); }