Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(415)

Unified Diff: utils/tests/pub/test_pub.dart

Issue 11785028: Commit Martin's patch for pub + lib_v2. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Revise. Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « utils/tests/pub/pub_uploader_test.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: utils/tests/pub/test_pub.dart
diff --git a/utils/tests/pub/test_pub.dart b/utils/tests/pub/test_pub.dart
index a6042fb87375e95ba61f5e085d59c99ecf013df4..6fe24b5ed93e902cdfededb038587572b2919a73 100644
--- a/utils/tests/pub/test_pub.dart
+++ b/utils/tests/pub/test_pub.dart
@@ -170,7 +170,7 @@ void servePackages(List<Map> pubspecs) {
_servedPackageDir.contents.clear();
for (var name in _servedPackages.keys) {
- var versions = _servedPackages[name].keys.toList());
+ var versions = _servedPackages[name].keys.toList();
_servedPackageDir.contents.addAll([
file('$name.json',
json.stringify({'versions': versions})),
@@ -465,7 +465,7 @@ void run() {
return _runScheduled(sandboxDir, _scheduled);
});
- future.catchError((error) {
+ future.catchError((e) {
// If an error occurs during testing, delete the sandbox, throw the error so
// that the test framework sees it, then finally call asyncDone so that the
// test framework knows we're done doing asynchronous stuff.
@@ -477,6 +477,10 @@ void run() {
registerException(e.error, e.stackTrace);
return true;
});
+ subFuture.then((_) => registerException(e.error, e.stackTrace));
+ return true;
+ });
+
timeout(future, _TIMEOUT, 'waiting for a test to complete')
.then((_) => cleanup())
.then((_) => asyncDone());
@@ -548,7 +552,7 @@ ScheduledProcess startPub({List args, Future<Uri> tokenEndpoint}) {
///
/// Any futures in [args] will be resolved before the process is started.
ScheduledProcess startPubLish(ScheduledServer server, {List args}) {
- var tokenEndpoint = server.url.transform((url) =>
+ var tokenEndpoint = server.url.then((url) =>
url.resolve('/token').toString());
if (args == null) args = [];
args = flatten(['lish', '--server', tokenEndpoint, args]);
@@ -582,7 +586,7 @@ Future _doPub(Function fn, sandboxDir, List args, Future<Uri> tokenEndpoint) {
ensureDir(pathInSandbox(appPath)),
_awaitObject(args),
tokenEndpoint == null ? new Future.immediate(null) : tokenEndpoint
- ]).chain((results) {
+ ]).then((results) {
var args = results[1];
var tokenEndpoint = results[2];
// Find a Dart executable we can use to spawn. Use the same one that was
@@ -1160,7 +1164,7 @@ Future<Pair<List<String>, List<String>>> schedulePackageValidation(
join(sandboxDir, sdkPath));
return Entrypoint.load(join(sandboxDir, appPath), cache)
- .chain((entrypoint) {
+ .then((entrypoint) {
var validator = fn(entrypoint);
return validator.validate().then((_) {
return new Pair(validator.errors, validator.warnings);
@@ -1207,20 +1211,26 @@ class ScheduledProcess {
/// The name of the process. Used for error reporting.
final String name;
- /// The process that's scheduled to run.
- final Future<Process> _process;
+ /// The process future that's scheduled to run.
+ Future<Process> _processFuture;
+
+ /// The process that's scheduled to run. It may be null.
+ Process _process;
+
+ /// The exit code of the scheduled program. It may be null.
+ int _exitCode;
/// A [StringInputStream] wrapping the stdout of the process that's scheduled
/// to run.
- final Future<StringInputStream> _stdout;
+ final Future<StringInputStream> _stdoutFuture;
/// A [StringInputStream] wrapping the stderr of the process that's scheduled
/// to run.
- final Future<StringInputStream> _stderr;
+ final Future<StringInputStream> _stderrFuture;
/// The exit code of the process that's scheduled to run. This will naturally
/// only complete once the process has terminated.
- Future<int> get _exitCode => _exitCodeCompleter.future;
+ Future<int> get _exitCodeFuture => _exitCodeCompleter.future;
/// The completer for [_exitCode].
final Completer<int> _exitCodeCompleter = new Completer();
@@ -1234,9 +1244,12 @@ class ScheduledProcess {
/// Wraps a [Process] [Future] in a scheduled process.
ScheduledProcess(this.name, Future<Process> process)
- : _process = process,
- _stdout = process.then((p) => new StringInputStream(p.stdout)),
- _stderr = process.then((p) => new StringInputStream(p.stderr)) {
+ : _processFuture = process,
+ _stdoutFuture = process.then((p) => new StringInputStream(p.stdout)),
+ _stderrFuture = process.then((p) => new StringInputStream(p.stderr)) {
+ process.then((p) {
+ _process = p;
+ });
_schedule((_) {
if (!_endScheduled) {
@@ -1244,9 +1257,10 @@ class ScheduledProcess {
"or kill() called before the test is run.");
}
- return _process.then((p) {
+ return process.then((p) {
p.onExit = (c) {
if (_endExpected) {
+ _exitCode = c;
_exitCodeCompleter.complete(c);
return;
}
@@ -1269,31 +1283,30 @@ class ScheduledProcess {
});
_scheduleOnException((_) {
- if (!_process.hasValue) return;
+ if (_process == null) return;
- if (!_exitCode.hasValue) {
+ if (_exitCode == null) {
print("\nKilling process $name prematurely.");
_endExpected = true;
- _process.value.kill();
+ _process.kill();
}
return _printStreams();
});
_scheduleCleanup((_) {
- if (!_process.hasValue) return;
+ if (_process == null) return;
// Ensure that the process is dead and we aren't waiting on any IO.
- var process = _process.value;
- process.kill();
- process.stdout.close();
- process.stderr.close();
+ _process.kill();
+ _process.stdout.close();
+ _process.stderr.close();
});
}
/// Reads the next line of stdout from the process.
Future<String> nextLine() {
return _scheduleValue((_) {
- return timeout(_stdout.chain((stream) => readLine(stream)),
+ return timeout(_stdoutFuture.then((stream) => readLine(stream)),
_SCHEDULE_TIMEOUT,
"waiting for the next stdout line from process $name");
});
@@ -1302,7 +1315,7 @@ class ScheduledProcess {
/// Reads the next line of stderr from the process.
Future<String> nextErrLine() {
return _scheduleValue((_) {
- return timeout(_stderr.chain((stream) => readLine(stream)),
+ return timeout(_stderrFuture.then((stream) => readLine(stream)),
_SCHEDULE_TIMEOUT,
"waiting for the next stderr line from process $name");
});
@@ -1317,7 +1330,8 @@ class ScheduledProcess {
}
return _scheduleValue((_) {
- return timeout(_stdout.chain(consumeStringInputStream), _SCHEDULE_TIMEOUT,
+ return timeout(_stdoutFuture.then(consumeStringInputStream),
+ _SCHEDULE_TIMEOUT,
"waiting for the last stdout line from process $name");
});
}
@@ -1331,14 +1345,16 @@ class ScheduledProcess {
}
return _scheduleValue((_) {
- return timeout(_stderr.chain(consumeStringInputStream), _SCHEDULE_TIMEOUT,
+ return timeout(_stderrFuture.then(consumeStringInputStream),
+ _SCHEDULE_TIMEOUT,
"waiting for the last stderr line from process $name");
});
}
/// Writes [line] to the process as stdin.
void writeLine(String line) {
- _schedule((_) => _process.then((p) => p.stdin.writeString('$line\n')));
+ _schedule((_) => _processFuture.then(
+ (p) => p.stdin.writeString('$line\n')));
}
/// Kills the process, and waits until it's dead.
@@ -1346,11 +1362,9 @@ class ScheduledProcess {
_endScheduled = true;
_schedule((_) {
_endExpected = true;
- return _process.chain((p) {
- p.kill();
- return timeout(_exitCode, _SCHEDULE_TIMEOUT,
- "waiting for process $name to die");
- });
+ _process.kill();
+ timeout(_exitCodeCompleter.future, _SCHEDULE_TIMEOUT,
+ "waiting for process $name to die");
});
}
@@ -1360,7 +1374,7 @@ class ScheduledProcess {
_endScheduled = true;
_schedule((_) {
_endExpected = true;
- return timeout(_exitCode, _SCHEDULE_TIMEOUT,
+ return timeout(_exitCodeCompleter.future, _SCHEDULE_TIMEOUT,
"waiting for process $name to exit").then((exitCode) {
if (expectedExitCode != null) {
expect(exitCode, equals(expectedExitCode));
@@ -1384,8 +1398,12 @@ class ScheduledProcess {
});
}
- return printStream('stdout', _stdout.value)
- .chain((_) => printStream('stderr', _stderr.value));
+ return _stdoutFuture.then((stdout) {
+ return _stderrFuture.then((stderr) {
+ return printStream('stdout', stdout)
+ .then((_) => printStream('stderr', stderr));
+ });
+ });
}
}
@@ -1456,7 +1474,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).chain((_) {
+ var future = timeout(new Future.immediate(null).then((_) {
if (_handlers.isEmpty) {
fail('Unexpected ${request.method} request to ${request.path}.');
}
« no previous file with comments | « utils/tests/pub/pub_uploader_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698