| Index: utils/tests/pub/test_pub.dart
|
| diff --git a/utils/tests/pub/test_pub.dart b/utils/tests/pub/test_pub.dart
|
| index e16be37f47dc317faea87e5ea9fcb4d9733ec0de..4f87b50742db074ed5dce7994aeac5d96f73ce1d 100644
|
| --- a/utils/tests/pub/test_pub.dart
|
| +++ b/utils/tests/pub/test_pub.dart
|
| @@ -604,14 +604,15 @@ void confirmPublish(ScheduledProcess pub) {
|
| /// [Future] may have a type other than [Process].
|
| Future _doPub(Function fn, sandboxDir, List args, Future<Uri> tokenEndpoint) {
|
| String pathInSandbox(path) => join(getFullPath(sandboxDir), path);
|
| -
|
| - return Future.wait([
|
| - ensureDir(pathInSandbox(appPath)),
|
| - _awaitObject(args),
|
| - tokenEndpoint == null ? new Future.immediate(null) : tokenEndpoint
|
| - ]).then((results) {
|
| - var args = results[1];
|
| - var tokenEndpoint = results[2];
|
| + return defer(() {
|
| + ensureDir(pathInSandbox(appPath));
|
| + return Future.wait([
|
| + _awaitObject(args),
|
| + tokenEndpoint == null ? new Future.immediate(null) : tokenEndpoint
|
| + ]);
|
| + }).then((results) {
|
| + var args = results[0];
|
| + var tokenEndpoint = results[1];
|
| // Find a Dart executable we can use to spawn. Use the same one that was
|
| // used to run this script itself.
|
| var dartBin = new Options().executable;
|
| @@ -819,14 +820,14 @@ abstract class Descriptor {
|
| }
|
|
|
| /// Validates that at least one file in [dir] matching [name] is valid
|
| - /// according to [validate]. [validate] should complete to an exception if
|
| - /// the input path is invalid.
|
| + /// according to [validate]. [validate] should throw or complete to an
|
| + /// exception if the input path is invalid.
|
| Future _validateOneMatch(String dir, Future validate(String path)) {
|
| // Special-case strings to support multi-level names like "myapp/packages".
|
| if (name is String) {
|
| var path = join(dir, name);
|
| - return exists(path).then((exists) {
|
| - if (!exists) {
|
| + return defer(() {
|
| + if (!entryExists(path)) {
|
| throw new ExpectException('File $name in $dir not found.');
|
| }
|
| return validate(path);
|
| @@ -897,25 +898,23 @@ class FileDescriptor extends Descriptor {
|
|
|
| /// Creates the file within [dir]. Returns a [Future] that is completed after
|
| /// the creation is done.
|
| - Future<File> create(dir) => new Future.immediate(null).then((_) =>
|
| - writeBinaryFile(join(dir, _stringName), contents));
|
| + Future<File> create(dir) =>
|
| + defer(() => writeBinaryFile(join(dir, _stringName), contents));
|
|
|
| /// Deletes the file within [dir]. Returns a [Future] that is completed after
|
| /// the deletion is done.
|
| - Future delete(dir) {
|
| - return deleteFile(join(dir, _stringName));
|
| - }
|
| + Future delete(dir) =>
|
| + defer(() => deleteFile(join(dir, _stringName)));
|
|
|
| /// Validates that this file correctly matches the actual file at [path].
|
| Future validate(String path) {
|
| return _validateOneMatch(path, (file) {
|
| - return readTextFile(file).then((text) {
|
| - if (text == textContents) return null;
|
| + var text = readTextFile(file);
|
| + if (text == textContents) return null;
|
|
|
| - throw new ExpectException(
|
| - 'File $file should contain:\n\n$textContents\n\n'
|
| - 'but contained:\n\n$text');
|
| - });
|
| + throw new ExpectException(
|
| + 'File $file should contain:\n\n$textContents\n\n'
|
| + 'but contained:\n\n$text');
|
| });
|
| }
|
|
|
| @@ -944,13 +943,13 @@ class DirectoryDescriptor extends Descriptor {
|
| /// Creates the file within [dir]. Returns a [Future] that is completed after
|
| /// the creation is done.
|
| Future<Directory> create(parentDir) {
|
| - // Create the directory.
|
| - return ensureDir(join(parentDir, _stringName)).then((dir) {
|
| - if (contents == null) return new Future<Directory>.immediate(dir);
|
| + return defer(() {
|
| + // Create the directory.
|
| + var dir = ensureDir(join(parentDir, _stringName));
|
| + if (contents == null) return dir;
|
|
|
| // Recursively create all of its children.
|
| - final childFutures =
|
| - contents.map((child) => child.create(dir)).toList();
|
| + var childFutures = contents.map((child) => child.create(dir)).toList();
|
| // Only complete once all of the children have been created too.
|
| return Future.wait(childFutures).then((_) => dir);
|
| });
|
| @@ -1154,8 +1153,8 @@ class NothingDescriptor extends Descriptor {
|
| Future delete(dir) => new Future.immediate(null);
|
|
|
| Future validate(String dir) {
|
| - return exists(join(dir, name)).then((exists) {
|
| - if (exists) {
|
| + return defer(() {
|
| + if (entryExists(join(dir, name))) {
|
| throw new ExpectException('File $name in $dir should not exist.');
|
| }
|
| });
|
| @@ -1179,12 +1178,10 @@ typedef Validator ValidatorCreator(Entrypoint entrypoint);
|
| Future<Pair<List<String>, List<String>>> schedulePackageValidation(
|
| ValidatorCreator fn) {
|
| return _scheduleValue((sandboxDir) {
|
| - var cache = new SystemCache.withSources(
|
| - join(sandboxDir, cachePath));
|
| + var cache = new SystemCache.withSources(join(sandboxDir, cachePath));
|
|
|
| - return Entrypoint.load(join(sandboxDir, appPath), cache)
|
| - .then((entrypoint) {
|
| - var validator = fn(entrypoint);
|
| + return defer(() {
|
| + var validator = fn(new Entrypoint(join(sandboxDir, appPath), cache));
|
| return validator.validate().then((_) {
|
| return new Pair(validator.errors, validator.warnings);
|
| });
|
| @@ -1529,7 +1526,7 @@ class ScheduledServer {
|
| /// Raises an error complaining of an unexpected request.
|
| void _awaitHandle(HttpRequest request, HttpResponse response) {
|
| if (_ignored.contains(new Pair(request.method, request.path))) return;
|
| - var future = timeout(new Future.immediate(null).then((_) {
|
| + var future = timeout(defer(() {
|
| if (_handlers.isEmpty) {
|
| fail('Unexpected ${request.method} request to ${request.path}.');
|
| }
|
|
|