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

Unified Diff: test/test_pub.dart

Issue 2172523002: Refactor version_solver_test. (Closed) Base URL: git@github.com:dart-lang/pub.git@master
Patch Set: Created 4 years, 5 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 | « test/package_server.dart ('k') | test/version_solver_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/test_pub.dart
diff --git a/test/test_pub.dart b/test/test_pub.dart
index 6c2dd68066477f2a1b67c52d45c84996ba19514b..d23a3a1e23bb9eb557a5e8144d56001dedd1dfec 100644
--- a/test/test_pub.dart
+++ b/test/test_pub.dart
@@ -219,9 +219,10 @@ void scheduleSymlink(String target, String symlink) {
/// Schedules a call to the Pub command-line utility.
///
/// Runs Pub with [args] and validates that its results match [output] (or
-/// [outputJson]), [error], and [exitCode].
+/// [outputJson]), [error], [silent] (for logs that are silent by default), and
+/// [exitCode].
///
-/// [output] and [error] can be [String]s, [RegExp]s, or [Matcher]s.
+/// [output], [error], and [silent] can be [String]s, [RegExp]s, or [Matcher]s.
///
/// If [outputJson] is given, validates that pub outputs stringified JSON
/// matching that object, which can be a literal JSON object or any other
@@ -229,7 +230,7 @@ void scheduleSymlink(String target, String symlink) {
///
/// If [environment] is given, any keys in it will override the environment
/// variables passed to the spawned process.
-void schedulePub({List args, output, error, outputJson,
+void schedulePub({List args, output, error, outputJson, silent,
int exitCode: exit_codes.SUCCESS, Map<String, String> environment}) {
// Cannot pass both output and outputJson.
assert(output == null || outputJson == null);
@@ -237,30 +238,24 @@ void schedulePub({List args, output, error, outputJson,
var pub = startPub(args: args, environment: environment);
pub.shouldExit(exitCode);
- var failures = [];
- var stderr;
-
- expect(Future.wait([
- pub.stdoutStream().toList(),
- pub.stderrStream().toList()
- ]).then((results) {
- var stdout = results[0].join("\n");
- stderr = results[1].join("\n");
+ expect(() async {
+ var actualOutput = (await pub.stdoutStream().toList()).join("\n");
+ var actualError = (await pub.stderrStream().toList()).join("\n");
+ var actualSilent = (await pub.silentStream().toList()).join("\n");
+ var failures = [];
if (outputJson == null) {
- _validateOutput(failures, 'stdout', output, stdout);
- return null;
+ _validateOutput(failures, 'stdout', output, actualOutput);
+ } else {
+ _validateOutputJson(
+ failures, 'stdout', await awaitObject(outputJson), actualOutput);
}
- // Allow the expected JSON to contain futures.
- return awaitObject(outputJson).then((resolved) {
- _validateOutputJson(failures, 'stdout', resolved, stdout);
- });
- }).then((_) {
- _validateOutput(failures, 'stderr', error, stderr);
+ _validateOutput(failures, 'stderr', error, actualError);
+ _validateOutput(failures, 'silent', silent, actualSilent);
if (!failures.isEmpty) throw new TestFailure(failures.join('\n'));
- }), completes);
+ }(), completes);
}
/// Like [startPub], but runs `pub lish` in particular with [server] used both
@@ -373,6 +368,7 @@ class PubProcess extends ScheduledProcess {
Stream<Pair<log.Level, String>> _log;
Stream<String> _stdout;
Stream<String> _stderr;
+ Stream<String> _silent;
PubProcess.start(executable, arguments,
{workingDirectory, environment, String description,
@@ -446,6 +442,22 @@ class PubProcess extends ScheduledProcess {
_stderr = pair.first;
return pair.last;
}
+
+ /// A stream of log messages that are silent by default.
+ Stream<String> silentStream() {
+ if (_silent == null) {
+ _silent = _logStream().expand((entry) {
+ if (entry.first == log.Level.MESSAGE) return [];
+ if (entry.first == log.Level.ERROR) return [];
+ if (entry.first == log.Level.WARNING) return [];
+ return [entry.last];
+ });
+ }
+
+ var pair = tee(_silent);
+ _silent = pair.first;
+ return pair.last;
+ }
}
/// Fails the current test if Git is not installed.
« no previous file with comments | « test/package_server.dart ('k') | test/version_solver_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698