63a57a76ce
This reverts commit f8ff12008e.
This CL is a revert of the initial revert and should be landed once
Flutter changes have been merged to handle the changes here.
Change-Id: I300a5efd776bf2a596743971f4e15ad62da77f5a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/153368
Commit-Queue: Srujan Gaddam <srujzs@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
145 lines
3.7 KiB
Dart
145 lines
3.7 KiB
Dart
// 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 file_sample;
|
|
|
|
import 'dart:async';
|
|
import 'dart:html';
|
|
|
|
import 'package:async_helper/async_helper.dart';
|
|
import 'package:expect/minitest.dart';
|
|
|
|
// Expected output from all functions, asynchronous, and event routines.
|
|
const String log_results = 'test-first\n' +
|
|
'acquire START\n' +
|
|
'acquire CALLBACK START\n' +
|
|
'acquire CALLBACK END\n' +
|
|
'first START\n' +
|
|
'first END\n' +
|
|
'test-second\n' +
|
|
'second START\n' +
|
|
'second END\n' +
|
|
'reader onLoadEnd event\n' +
|
|
'file content = XYZZY Output\n';
|
|
|
|
// Simple logger to record all output.
|
|
class Logger {
|
|
StringBuffer _log = new StringBuffer();
|
|
|
|
void log(String message) {
|
|
_log.writeln(message);
|
|
}
|
|
|
|
String get contents => _log.toString();
|
|
}
|
|
|
|
Logger testLog = new Logger();
|
|
|
|
Future<FileSystem>? _fileSystem;
|
|
|
|
late DirectoryEntry _myDirectory;
|
|
|
|
Future<FileSystem> get fileSystem async {
|
|
if (_fileSystem != null) return _fileSystem!;
|
|
|
|
testLog.log('acquire START');
|
|
_fileSystem = window.requestFileSystem(100);
|
|
|
|
var fs = await _fileSystem!;
|
|
testLog.log('acquire CALLBACK START');
|
|
expect(fs.runtimeType, FileSystem);
|
|
expect(fs.root.runtimeType, DirectoryEntry);
|
|
testLog.log('acquire CALLBACK END');
|
|
|
|
return _fileSystem!;
|
|
}
|
|
|
|
Future<FileEntry> createFile() async {
|
|
var fs = await fileSystem;
|
|
|
|
_myDirectory =
|
|
await fs.root!.createDirectory('my_directory') as DirectoryEntry;
|
|
|
|
FileEntry fileEntry = await _myDirectory.createFile('log.txt') as FileEntry;
|
|
|
|
expect(fileEntry.isFile, true);
|
|
expect(fileEntry.name, 'log.txt');
|
|
expect(fileEntry.fullPath, '/my_directory/log.txt');
|
|
|
|
FileWriter writer = await fileEntry.createWriter();
|
|
|
|
Blob blob = new Blob(['XYZZY Output'], 'text/plain');
|
|
|
|
writer.write(blob);
|
|
|
|
var reader = new FileReader();
|
|
|
|
var completer = new Completer<String>();
|
|
|
|
reader.onLoadEnd.listen((event) {
|
|
testLog.log('reader onLoadEnd event');
|
|
dynamic target = event.currentTarget;
|
|
testLog.log('file content = ${target.result}');
|
|
expect(target.result, 'XYZZY Output');
|
|
|
|
completer.complete(target.result);
|
|
});
|
|
|
|
Blob readBlob = await fileEntry.file();
|
|
|
|
reader.readAsText(readBlob);
|
|
|
|
// Wait until onLoadEnd if fired.
|
|
await completer.future;
|
|
|
|
return new Future<FileEntry>.value(fileEntry);
|
|
}
|
|
|
|
Future<List<Entry>> readEntries(DirectoryEntry directory) async {
|
|
DirectoryReader reader = directory.createReader();
|
|
List<Entry> entries = await reader.readEntries();
|
|
return entries;
|
|
}
|
|
|
|
Future testFileSystemRequest() async {
|
|
testLog.log('test-first');
|
|
var fs = await fileSystem;
|
|
testLog.log('first START');
|
|
expect(fs.runtimeType, FileSystem);
|
|
expect(fs.root.runtimeType, DirectoryEntry);
|
|
testLog.log('first END');
|
|
}
|
|
|
|
Future testFileSystemRequestCreateRW() async {
|
|
testLog.log('test-second');
|
|
var fs = await fileSystem;
|
|
testLog.log('second START');
|
|
expect(fs.runtimeType, FileSystem);
|
|
expect(fs.root.runtimeType, DirectoryEntry);
|
|
testLog.log('second END');
|
|
|
|
FileEntry fileEntry = await createFile();
|
|
expect(fileEntry.name, 'log.txt');
|
|
|
|
List<Entry> entries = await readEntries(fs.root!);
|
|
expect(entries.length > 0, true);
|
|
expect(entries[0].isDirectory, true);
|
|
expect(entries[0].name, 'my_directory');
|
|
|
|
List<Entry> myEntries = await readEntries(_myDirectory);
|
|
expect(myEntries.length, 1);
|
|
expect(myEntries[0].isFile, true);
|
|
expect(myEntries[0].name, 'log.txt');
|
|
|
|
// Validate every function, async and event mechanism successfully ran.
|
|
expect(testLog.contents, log_results);
|
|
}
|
|
|
|
main() {
|
|
asyncTest(() async {
|
|
await testFileSystemRequest();
|
|
await testFileSystemRequestCreateRW();
|
|
});
|
|
}
|