[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:
Sigmund Cherem 2023-10-27 02:25:20 +00:00 committed by Commit Queue
parent 6b8224d2e5
commit 73de586423
16 changed files with 280 additions and 358 deletions

View file

@ -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));
}

View file

@ -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'));
});
}

View file

@ -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);
}
});
}

View file

@ -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);
});
}

View file

@ -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));
});
}

View file

@ -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);
});
}

View file

@ -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() {

View file

@ -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.

View file

@ -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 {
});
}
}

View file

@ -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'));
});
}
}

View file

@ -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);
}
});
}

View file

@ -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);
});
}

View file

@ -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));
});
}
}

View file

@ -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);
});
}

View file

@ -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);
});
}

View file

@ -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.