mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 09:31:58 +00:00
[web] improve fileapi tests.
These tests had several issues. The fixes are aimed to reduce flakiness and remove invalid configurations where tests are not providing any value. Some of the issues include: * some tests interferered with each other causing a 18% flakiness rate in chrome: they used a common file system that ended up being shared in a single browser instance. This is why some tests failed when they find a file exists before it was created [1]. * some tests were not properly using async_helper/async_minitest, so they may complete before they finish executing * DDC no longer supports these APIs due to https://github.com/dart-lang/sdk/issues/53864. We don't intend to fix those issues, so there is no purpose in running these tests in DDC at this time. [1]: https://logs.chromium.org/logs/dart/buildbucket/cr-buildbucket/8766313714239949697/+/u/test_results/ignored_flaky_test_failure_logs Change-Id: I1dbb28eba2d962000a4d425563dbc1eb6b55dbed Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/332266 Commit-Queue: Sigmund Cherem <sigmund@google.com> Reviewed-by: Srujan Gaddam <srujzs@google.com>
This commit is contained in:
parent
6b8224d2e5
commit
73de586423
|
@ -7,7 +7,6 @@ library fileapi;
|
|||
import 'dart:async';
|
||||
import 'dart:html';
|
||||
|
||||
import 'package:async_helper/async_helper.dart';
|
||||
import 'package:async_helper/async_minitest.dart';
|
||||
|
||||
class FileAndDir {
|
||||
|
@ -16,20 +15,18 @@ class FileAndDir {
|
|||
FileAndDir(this.file, this.dir);
|
||||
}
|
||||
|
||||
late FileSystem fs;
|
||||
|
||||
main() async {
|
||||
getFileSystem() async {
|
||||
fs = await window.requestFileSystem(100);
|
||||
}
|
||||
|
||||
// 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;
|
||||
final fs = await window.requestFileSystem(100);
|
||||
// Prepend this file name to prevent collisions among tests runnning on the
|
||||
// same browser.
|
||||
const prefix = 'fileapi_directory_reader_';
|
||||
var file =
|
||||
await fs.root!.createFile('${prefix}file_$testName') as FileEntry;
|
||||
var dir = await fs.root!.createDirectory('${prefix}dir_$testName')
|
||||
as DirectoryEntry;
|
||||
return new Future.value(new FileAndDir(file, dir));
|
||||
}
|
||||
|
||||
|
|
|
@ -2,41 +2,28 @@
|
|||
// 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 {
|
||||
fs = await window.requestFileSystem(100);
|
||||
}
|
||||
|
||||
if (FileSystem.supported) {
|
||||
await getFileSystem();
|
||||
|
||||
test('directoryDoesntExist', () async {
|
||||
try {
|
||||
await fs.root!.getDirectory('directory2');
|
||||
} on DomException catch (error) {
|
||||
expect(DomException.NOT_FOUND, error.name);
|
||||
}
|
||||
});
|
||||
|
||||
test('directoryCreate', () async {
|
||||
var entry = await fs.root!.createDirectory('directory3');
|
||||
expect(entry.name, equals('directory3'));
|
||||
});
|
||||
}
|
||||
main() {
|
||||
if (!FileSystem.supported) return;
|
||||
// Prepend this file name to prevent collisions among tests runnning on the
|
||||
// same browser.
|
||||
const prefix = 'fileapi_directory_';
|
||||
|
||||
test('directoryDoesntExist', () async {
|
||||
final fs = await window.requestFileSystem(100);
|
||||
try {
|
||||
await fs.root!.getDirectory('${prefix}directory2');
|
||||
} on DomException catch (error) {
|
||||
expect(DomException.NOT_FOUND, error.name);
|
||||
}
|
||||
});
|
||||
|
||||
test('directoryCreate', () async {
|
||||
final fs = await window.requestFileSystem(100);
|
||||
var entry = await fs.root!.createDirectory('${prefix}directory3');
|
||||
expect(entry.name, equals('${prefix}directory3'));
|
||||
});
|
||||
}
|
||||
|
|
|
@ -2,12 +2,9 @@
|
|||
// 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 {
|
||||
|
@ -16,62 +13,58 @@ class FileAndDir {
|
|||
FileAndDir(this.file, this.dir);
|
||||
}
|
||||
|
||||
late FileSystem fs;
|
||||
|
||||
main() async {
|
||||
getFileSystem() async {
|
||||
return await window.requestFileSystem(100).then((FileSystem fileSystem) {
|
||||
fs = fileSystem;
|
||||
});
|
||||
}
|
||||
main() {
|
||||
if (!FileSystem.supported) return;
|
||||
// Prepend this file name to prevent collisions among tests runnning on the
|
||||
// same browser.
|
||||
const prefix = 'fileapi_entry_';
|
||||
|
||||
// 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;
|
||||
Future doDirSetup(FileSystem fs, String testName) async {
|
||||
var file =
|
||||
await fs.root!.createFile('${prefix}file_$testName') as FileEntry;
|
||||
var dir = await fs.root!.createDirectory('${prefix}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');
|
||||
test('copy_move', () async {
|
||||
final fs = await window.requestFileSystem(100);
|
||||
var fileAndDir = await doDirSetup(fs, '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");
|
||||
// getParent
|
||||
fileAndDir = await doDirSetup(fs, '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');
|
||||
// moveTo
|
||||
fileAndDir = await doDirSetup(fs, 'moveTo');
|
||||
entry = await fileAndDir.file.moveTo(fileAndDir.dir, name: 'movedFile');
|
||||
expect(entry.name, 'movedFile');
|
||||
expect(entry.fullPath, '/${prefix}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);
|
||||
}
|
||||
try {
|
||||
entry = await fs.root!.getFile('${prefix}file4');
|
||||
fail("File ${prefix}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);
|
||||
}
|
||||
});
|
||||
}
|
||||
// remove
|
||||
fileAndDir = await doDirSetup(fs, 'remove');
|
||||
expect('${prefix}file_remove', fileAndDir.file.name);
|
||||
await fileAndDir.file.remove();
|
||||
try {
|
||||
await fileAndDir.dir.getFile(fileAndDir.file.name);
|
||||
fail("file not removed");
|
||||
} on DomException catch (error) {
|
||||
expect(DomException.NOT_FOUND, error.name);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -2,12 +2,9 @@
|
|||
// 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 {
|
||||
|
@ -16,41 +13,38 @@ class FileAndDir {
|
|||
FileAndDir(this.file, this.dir);
|
||||
}
|
||||
|
||||
late FileSystem fs;
|
||||
|
||||
main() async {
|
||||
getFileSystem() async {
|
||||
fs = await window.requestFileSystem(100);
|
||||
}
|
||||
main() {
|
||||
if (!FileSystem.supported) return;
|
||||
// Prepend this file name to prevent collisions among tests runnning on the
|
||||
// same browser.
|
||||
const prefix = 'fileapi_file_entry_';
|
||||
|
||||
// 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;
|
||||
final fs = await window.requestFileSystem(100);
|
||||
var file =
|
||||
await fs.root!.createFile('${prefix}file_$testName') as FileEntry;
|
||||
var dir = await fs.root!.createDirectory('${prefix}dir_$testName')
|
||||
as DirectoryEntry;
|
||||
return new Future.value(new FileAndDir(file, dir));
|
||||
}
|
||||
|
||||
if (FileSystem.supported) {
|
||||
test('createWriter', () async {
|
||||
var fileAndDir = await doDirSetup('createWriter');
|
||||
var writer = await fileAndDir.file.createWriter();
|
||||
expect(writer.position, 0);
|
||||
expect(writer.readyState, FileWriter.INIT);
|
||||
expect(writer.length, 0);
|
||||
});
|
||||
test('createWriter', () async {
|
||||
var fileAndDir = await doDirSetup('createWriter');
|
||||
var writer = await fileAndDir.file.createWriter();
|
||||
expect(writer.position, 0);
|
||||
expect(writer.readyState, FileWriter.INIT);
|
||||
expect(writer.length, 0);
|
||||
});
|
||||
|
||||
test('file', () async {
|
||||
var fileAndDir = await doDirSetup('file');
|
||||
var fileObj = await fileAndDir.file.file();
|
||||
expect(fileObj.name, fileAndDir.file.name);
|
||||
expect(fileObj.relativePath, '');
|
||||
expect(
|
||||
new DateTime.now().difference(fileObj.lastModifiedDate).inMinutes <
|
||||
30,
|
||||
isTrue);
|
||||
});
|
||||
}
|
||||
test('file', () async {
|
||||
var fileAndDir = await doDirSetup('file');
|
||||
var fileObj = await fileAndDir.file.file();
|
||||
expect(fileObj.name, fileAndDir.file.name);
|
||||
expect(fileObj.relativePath, '');
|
||||
expect(
|
||||
new DateTime.now().difference(fileObj.lastModifiedDate).inMinutes < 30,
|
||||
isTrue);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -2,50 +2,36 @@
|
|||
// 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 {
|
||||
fs = await window.requestFileSystem(100);
|
||||
}
|
||||
|
||||
if (FileSystem.supported) {
|
||||
await getFileSystem();
|
||||
|
||||
test('fileDoesntExist', () async {
|
||||
try {
|
||||
var fileObj = await fs.root!.getFile('file2');
|
||||
fail("file found");
|
||||
} on DomException catch (error) {
|
||||
expect(DomException.NOT_FOUND, error.name);
|
||||
}
|
||||
});
|
||||
|
||||
test('fileCreate', () async {
|
||||
var fileObj = await fs.root!.createFile('file4');
|
||||
expect(fileObj.name, equals('file4'));
|
||||
expect(fileObj.isFile, isTrue);
|
||||
|
||||
var metadata = await fileObj.getMetadata();
|
||||
var changeTime = metadata.modificationTime;
|
||||
|
||||
// Increased Windows buildbots can sometimes be particularly slow.
|
||||
expect(new DateTime.now().difference(changeTime).inMinutes < 4, isTrue);
|
||||
expect(metadata.size, equals(0));
|
||||
});
|
||||
}
|
||||
main() {
|
||||
if (!FileSystem.supported) return;
|
||||
// Prepend this file name to prevent collisions among tests runnning on the
|
||||
// same browser.
|
||||
const prefix = 'fileapi_file_';
|
||||
|
||||
test('fileDoesntExist', () async {
|
||||
final fs = await window.requestFileSystem(100);
|
||||
try {
|
||||
await fs.root!.getFile('${prefix}file2');
|
||||
fail("file found");
|
||||
} on DomException catch (error) {
|
||||
expect(DomException.NOT_FOUND, error.name);
|
||||
}
|
||||
});
|
||||
|
||||
test('fileCreate', () async {
|
||||
final fs = await window.requestFileSystem(100);
|
||||
var fileObj = await fs.root!.createFile('${prefix}file4');
|
||||
expect(fileObj.name, equals('${prefix}file4'));
|
||||
expect(fileObj.isFile, isTrue);
|
||||
|
||||
var metadata = await fileObj.getMetadata();
|
||||
var changeTime = metadata.modificationTime;
|
||||
|
||||
// Increased Windows buildbots can sometimes be particularly slow.
|
||||
expect(new DateTime.now().difference(changeTime).inMinutes < 4, isTrue);
|
||||
expect(metadata.size, equals(0));
|
||||
});
|
||||
}
|
||||
|
|
|
@ -2,12 +2,9 @@
|
|||
// 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';
|
||||
|
||||
Future<FileSystem>? _fileSystem;
|
||||
|
@ -32,7 +29,7 @@ main() {
|
|||
test('requestFileSystem', () async {
|
||||
var expectation = FileSystem.supported ? returnsNormally : throws;
|
||||
expect(() async {
|
||||
var fs = await fileSystem;
|
||||
await fileSystem;
|
||||
}, expectation);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -2,12 +2,8 @@
|
|||
// 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';
|
||||
|
||||
main() {
|
||||
|
|
|
@ -20,6 +20,7 @@ html/custom_element_method_clash_test: Skip # Issue 29922
|
|||
html/custom_element_name_clash_test: Skip # Issue 29922
|
||||
html/custom_elements_23127_test: Skip # Issue 29922
|
||||
html/custom_elements_test: Skip # Issue 29922
|
||||
html/fileapi_*: SkipByDesign # Issue 53864
|
||||
html/interactive_geolocation_test: Skip # Requires allowing geo location.
|
||||
isolate/*: SkipByDesign # No support for dart:isolate in dart4web (http://dartbug.com/30538)
|
||||
js/js_util/js_prefix_test: SkipByDesign # JS$ prefix not implemented on ddc.
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
// 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.
|
||||
|
||||
// @dart = 2.9
|
||||
library fileapi;
|
||||
|
@ -5,7 +8,6 @@ library fileapi;
|
|||
import 'dart:async';
|
||||
import 'dart:html';
|
||||
|
||||
import 'package:async_helper/async_helper.dart';
|
||||
import 'package:async_helper/async_minitest.dart';
|
||||
|
||||
class FileAndDir {
|
||||
|
@ -14,21 +16,17 @@ class FileAndDir {
|
|||
FileAndDir(this.file, this.dir);
|
||||
}
|
||||
|
||||
FileSystem fs;
|
||||
|
||||
main() async {
|
||||
getFileSystem() async {
|
||||
var fileSystem = await window.requestFileSystem(100);
|
||||
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');
|
||||
var dir = await fs.root.createDirectory('dir_$testName');
|
||||
final fs = await window.requestFileSystem(100);
|
||||
// Prepend this file name to prevent collisions among tests runnning on the
|
||||
// same browser.
|
||||
const prefix = 'fileapi_directory_reader_';
|
||||
var file = await fs.root.createFile('${prefix}file_$testName') as FileEntry;
|
||||
var dir = await fs.root.createDirectory('${prefix}dir_$testName')
|
||||
as DirectoryEntry;
|
||||
return new Future.value(new FileAndDir(file, dir));
|
||||
}
|
||||
|
||||
|
@ -41,4 +39,3 @@ main() async {
|
|||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,44 +1,31 @@
|
|||
// 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.
|
||||
|
||||
// @dart = 2.9
|
||||
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);
|
||||
main() {
|
||||
if (!FileSystem.supported) return;
|
||||
// Prepend this file name to prevent collisions among tests runnning on the
|
||||
// same browser.
|
||||
const prefix = 'fileapi_directory_';
|
||||
|
||||
test('directoryDoesntExist', () async {
|
||||
final fs = await window.requestFileSystem(100);
|
||||
try {
|
||||
await fs.root.getDirectory('${prefix}directory2');
|
||||
} on DomException catch (error) {
|
||||
expect(DomException.NOT_FOUND, error.name);
|
||||
}
|
||||
});
|
||||
|
||||
test('directoryCreate', () async {
|
||||
final fs = await window.requestFileSystem(100);
|
||||
var entry = await fs.root.createDirectory('${prefix}directory3');
|
||||
expect(entry.name, equals('${prefix}directory3'));
|
||||
});
|
||||
}
|
||||
|
||||
FileSystem fs;
|
||||
|
||||
main() async {
|
||||
getFileSystem() async {
|
||||
var fileSystem = await window.requestFileSystem(100);
|
||||
fs = fileSystem;
|
||||
}
|
||||
|
||||
if (FileSystem.supported) {
|
||||
await getFileSystem();
|
||||
|
||||
test('directoryDoesntExist', () async {
|
||||
try {
|
||||
await fs.root.getDirectory('directory2');
|
||||
} catch (error) {
|
||||
expect(true, error is DomException);
|
||||
expect(DomException.NOT_FOUND, error.name);
|
||||
}
|
||||
});
|
||||
|
||||
test('directoryCreate', () async {
|
||||
var entry = await fs.root.createDirectory('directory3');
|
||||
expect(entry.name, equals('directory3'));
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
// 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.
|
||||
|
||||
// @dart = 2.9
|
||||
library fileapi;
|
||||
|
@ -5,7 +8,6 @@ library fileapi;
|
|||
import 'dart:async';
|
||||
import 'dart:html';
|
||||
|
||||
import 'package:async_helper/async_helper.dart';
|
||||
import 'package:async_helper/async_minitest.dart';
|
||||
|
||||
class FileAndDir {
|
||||
|
@ -14,63 +16,58 @@ class FileAndDir {
|
|||
FileAndDir(this.file, this.dir);
|
||||
}
|
||||
|
||||
FileSystem fs;
|
||||
|
||||
main() async {
|
||||
getFileSystem() async {
|
||||
return await window.requestFileSystem(100).then((FileSystem fileSystem) {
|
||||
fs = fileSystem;
|
||||
});
|
||||
}
|
||||
main() {
|
||||
if (!FileSystem.supported) return;
|
||||
// Prepend this file name to prevent collisions among tests runnning on the
|
||||
// same browser.
|
||||
const prefix = 'fileapi_entry_';
|
||||
|
||||
// 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');
|
||||
var dir = await fs.root.createDirectory('dir_$testName');
|
||||
Future doDirSetup(FileSystem fs, String testName) async {
|
||||
var file =
|
||||
await fs.root.createFile('${prefix}file_$testName') as FileEntry;
|
||||
var dir = await fs.root.createDirectory('${prefix}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');
|
||||
test('copy_move', () async {
|
||||
final fs = await window.requestFileSystem(100);
|
||||
var fileAndDir = await doDirSetup(fs, '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");
|
||||
// getParent
|
||||
fileAndDir = await doDirSetup(fs, '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');
|
||||
// moveTo
|
||||
fileAndDir = await doDirSetup(fs, 'moveTo');
|
||||
entry = await fileAndDir.file.moveTo(fileAndDir.dir, name: 'movedFile');
|
||||
expect(entry.name, 'movedFile');
|
||||
expect(entry.fullPath, '/${prefix}dir_moveTo/movedFile');
|
||||
|
||||
try {
|
||||
entry = await fs.root.getFile('file4');
|
||||
fail("File file4 should not exist.");
|
||||
} catch (error) {
|
||||
expect(error is DomException, true, reason: "Not DomException - not exist");
|
||||
expect(DomException.NOT_FOUND, error.name);
|
||||
}
|
||||
try {
|
||||
entry = await fs.root.getFile('${prefix}file4');
|
||||
fail("File ${prefix}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");
|
||||
} catch (error) {
|
||||
expect(error is DomException, true, reason: "Not DomException - removed");
|
||||
expect(DomException.NOT_FOUND, error.name);
|
||||
}
|
||||
});
|
||||
}
|
||||
// remove
|
||||
fileAndDir = await doDirSetup(fs, 'remove');
|
||||
expect('${prefix}file_remove', fileAndDir.file.name);
|
||||
await fileAndDir.file.remove();
|
||||
try {
|
||||
await fileAndDir.dir.getFile(fileAndDir.file.name);
|
||||
fail("file not removed");
|
||||
} on DomException catch (error) {
|
||||
expect(DomException.NOT_FOUND, error.name);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
// 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.
|
||||
|
||||
|
||||
// @dart = 2.9
|
||||
library fileapi;
|
||||
|
@ -5,7 +9,6 @@ library fileapi;
|
|||
import 'dart:async';
|
||||
import 'dart:html';
|
||||
|
||||
import 'package:async_helper/async_helper.dart';
|
||||
import 'package:async_helper/async_minitest.dart';
|
||||
|
||||
class FileAndDir {
|
||||
|
@ -14,43 +17,38 @@ class FileAndDir {
|
|||
FileAndDir(this.file, this.dir);
|
||||
}
|
||||
|
||||
FileSystem fs;
|
||||
|
||||
main() async {
|
||||
getFileSystem() async {
|
||||
var fileSystem = await window.requestFileSystem(100);
|
||||
fs = fileSystem;
|
||||
}
|
||||
main() {
|
||||
if (!FileSystem.supported) return;
|
||||
// Prepend this file name to prevent collisions among tests runnning on the
|
||||
// same browser.
|
||||
const prefix = 'fileapi_file_entry_';
|
||||
|
||||
// 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');
|
||||
var dir = await fs.root.createDirectory('dir_$testName');
|
||||
final fs = await window.requestFileSystem(100);
|
||||
var file =
|
||||
await fs.root.createFile('${prefix}file_$testName') as FileEntry;
|
||||
var dir = await fs.root.createDirectory('${prefix}dir_$testName')
|
||||
as DirectoryEntry;
|
||||
return new Future.value(new FileAndDir(file, dir));
|
||||
}
|
||||
|
||||
if (FileSystem.supported) {
|
||||
test('createWriter', () async {
|
||||
var fileAndDir = await doDirSetup('createWriter');
|
||||
var writer = await fileAndDir.file.createWriter();
|
||||
expect(writer.position, 0);
|
||||
expect(writer.readyState, FileWriter.INIT);
|
||||
expect(writer.length, 0);
|
||||
});
|
||||
test('createWriter', () async {
|
||||
var fileAndDir = await doDirSetup('createWriter');
|
||||
var writer = await fileAndDir.file.createWriter();
|
||||
expect(writer.position, 0);
|
||||
expect(writer.readyState, FileWriter.INIT);
|
||||
expect(writer.length, 0);
|
||||
});
|
||||
|
||||
test('file', () async {
|
||||
var fileAndDir = await doDirSetup('file');
|
||||
var fileObj = await fileAndDir.file.file();
|
||||
expect(fileObj.name, fileAndDir.file.name);
|
||||
expect(fileObj.relativePath, '');
|
||||
expect(
|
||||
new DateTime.now().difference(fileObj.lastModifiedDate).inMinutes <
|
||||
30,
|
||||
isTrue);
|
||||
});
|
||||
}
|
||||
test('file', () async {
|
||||
var fileAndDir = await doDirSetup('file');
|
||||
var fileObj = await fileAndDir.file.file();
|
||||
expect(fileObj.name, fileAndDir.file.name);
|
||||
expect(fileObj.relativePath, '');
|
||||
expect(
|
||||
new DateTime.now().difference(fileObj.lastModifiedDate).inMinutes < 30,
|
||||
isTrue);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -1,52 +1,41 @@
|
|||
// 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.
|
||||
|
||||
// @dart = 2.9
|
||||
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);
|
||||
main() {
|
||||
if (!FileSystem.supported) return;
|
||||
// Prepend this file name to prevent collisions among tests runnning on the
|
||||
// same browser.
|
||||
const prefix = 'fileapi_file_';
|
||||
|
||||
test('fileDoesntExist', () async {
|
||||
final fs = await window.requestFileSystem(100);
|
||||
try {
|
||||
await fs.root.getFile('${prefix}file2');
|
||||
fail("file found");
|
||||
} on DomException catch (error) {
|
||||
expect(DomException.NOT_FOUND, error.name);
|
||||
}
|
||||
});
|
||||
|
||||
test('fileCreate', () async {
|
||||
final fs = await window.requestFileSystem(100);
|
||||
var fileObj = await fs.root.createFile('${prefix}file4');
|
||||
expect(fileObj.name, equals('${prefix}file4'));
|
||||
expect(fileObj.isFile, isTrue);
|
||||
|
||||
var metadata = await fileObj.getMetadata();
|
||||
var changeTime = metadata.modificationTime;
|
||||
|
||||
// Increased Windows buildbots can sometimes be particularly slow.
|
||||
expect(new DateTime.now().difference(changeTime).inMinutes < 4, isTrue);
|
||||
expect(metadata.size, equals(0));
|
||||
});
|
||||
}
|
||||
|
||||
FileSystem fs;
|
||||
|
||||
main() async {
|
||||
getFileSystem() async {
|
||||
var fileSystem = await window.requestFileSystem(100);
|
||||
fs = fileSystem;
|
||||
}
|
||||
|
||||
if (FileSystem.supported) {
|
||||
await getFileSystem();
|
||||
|
||||
test('fileDoesntExist', () async {
|
||||
try {
|
||||
var fileObj = await fs.root.getFile('file2');
|
||||
fail("file found");
|
||||
} catch (error) {
|
||||
expect(true, error is DomException);
|
||||
expect(DomException.NOT_FOUND, error.name);
|
||||
}
|
||||
});
|
||||
|
||||
test('fileCreate', () async {
|
||||
var fileObj = await fs.root.createFile('file4');
|
||||
expect(fileObj.name, equals('file4'));
|
||||
expect(fileObj.isFile, isTrue);
|
||||
|
||||
var metadata = await fileObj.getMetadata();
|
||||
var changeTime = metadata.modificationTime;
|
||||
|
||||
// Increased Windows buildbots can sometimes be particularly slow.
|
||||
expect(new DateTime.now().difference(changeTime).inMinutes < 4, isTrue);
|
||||
expect(metadata.size, equals(0));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
// 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.
|
||||
|
||||
|
||||
// @dart = 2.9
|
||||
library fileapi;
|
||||
|
@ -5,10 +9,8 @@ library fileapi;
|
|||
import 'dart:async';
|
||||
import 'dart:html';
|
||||
|
||||
import 'package:async_helper/async_helper.dart';
|
||||
import 'package:async_helper/async_minitest.dart';
|
||||
|
||||
|
||||
Future<FileSystem> _fileSystem;
|
||||
|
||||
Future<FileSystem> get fileSystem async {
|
||||
|
@ -38,4 +40,3 @@ main() {
|
|||
}, expectation);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
// 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.
|
||||
|
||||
|
||||
// @dart = 2.9
|
||||
library fileapi;
|
||||
|
||||
import 'dart:async';
|
||||
import 'dart:html';
|
||||
|
||||
import 'package:async_helper/async_helper.dart';
|
||||
import 'package:async_helper/async_minitest.dart';
|
||||
|
||||
main() {
|
||||
|
@ -16,4 +18,3 @@ main() {
|
|||
}, expectation);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ html/custom_element_method_clash_test: Skip # Issue 29922
|
|||
html/custom_element_name_clash_test: Skip # Issue 29922
|
||||
html/custom_elements_23127_test: Skip # Issue 29922
|
||||
html/custom_elements_test: Skip # Issue 29922
|
||||
html/fileapi_*: SkipByDesign # Issue 53864
|
||||
html/interactive_geolocation_test: Skip # Requires allowing geo location.
|
||||
isolate/*: SkipByDesign # No support for dart:isolate in dart4web (http://dartbug.com/30538)
|
||||
js/js_util/js_prefix_test: SkipByDesign # JS$ prefix not implemented on ddc.
|
||||
|
|
Loading…
Reference in a new issue