|  | // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | library fileapi; | 
|  |  | 
|  | import 'dart:async'; | 
|  | import 'dart:html'; | 
|  |  | 
|  | import 'package:async_helper/async_helper.dart'; | 
|  | import 'package:async_helper/async_minitest.dart'; | 
|  |  | 
|  | class FileAndDir { | 
|  | FileEntry file; | 
|  | DirectoryEntry dir; | 
|  | FileAndDir(this.file, this.dir); | 
|  | } | 
|  |  | 
|  | late FileSystem fs; | 
|  |  | 
|  | main() async { | 
|  | getFileSystem() async { | 
|  | return await window.requestFileSystem(100).then((FileSystem fileSystem) { | 
|  | fs = fileSystem; | 
|  | }); | 
|  | } | 
|  |  | 
|  | // Do the boilerplate to get several files and directories created to then | 
|  | // test the functions that use those items. | 
|  | Future doDirSetup(String testName) async { | 
|  | await getFileSystem(); | 
|  |  | 
|  | var file = await fs.root!.createFile('file_$testName') as FileEntry; | 
|  | var dir = await fs.root!.createDirectory('dir_$testName') as DirectoryEntry; | 
|  | return new Future.value(new FileAndDir(file, dir)); | 
|  | } | 
|  |  | 
|  | if (FileSystem.supported) { | 
|  | test('copy_move', () async { | 
|  | var fileAndDir = await doDirSetup('copyTo'); | 
|  | var entry = | 
|  | await fileAndDir.file.copyTo(fileAndDir.dir, name: 'copiedFile'); | 
|  | expect(entry.isFile, true, reason: "Expected File"); | 
|  | expect(entry.name, 'copiedFile'); | 
|  |  | 
|  | // getParent | 
|  | fileAndDir = await doDirSetup('getParent'); | 
|  | entry = await fileAndDir.file.getParent(); | 
|  | expect(entry.name, ''); | 
|  | expect(entry.isDirectory, true, reason: "Expected Directory"); | 
|  |  | 
|  | // moveTo | 
|  | fileAndDir = await doDirSetup('moveTo'); | 
|  | entry = await fileAndDir.file.moveTo(fileAndDir.dir, name: 'movedFile'); | 
|  | expect(entry.name, 'movedFile'); | 
|  | expect(entry.fullPath, '/dir_moveTo/movedFile'); | 
|  |  | 
|  | try { | 
|  | entry = await fs.root!.getFile('file4'); | 
|  | fail("File file4 should not exist."); | 
|  | } on DomException catch (error) { | 
|  | expect(DomException.NOT_FOUND, error.name); | 
|  | } | 
|  |  | 
|  | // remove | 
|  | fileAndDir = await doDirSetup('remove'); | 
|  | expect('file_remove', fileAndDir.file.name); | 
|  | await fileAndDir.file.remove(); | 
|  | try { | 
|  | var entry = await fileAndDir.dir.getFile(fileAndDir.file.name); | 
|  | fail("file not removed"); | 
|  | } on DomException catch (error) { | 
|  | expect(DomException.NOT_FOUND, error.name); | 
|  | } | 
|  | }); | 
|  | } | 
|  | } |