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

Unified Diff: sdk/lib/_internal/pub/test/test_pub.dart

Issue 23272002: Command to print paths to dependencies. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Remove unused variable. Created 7 years, 4 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 | « sdk/lib/_internal/pub/test/pub_test.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/_internal/pub/test/test_pub.dart
diff --git a/sdk/lib/_internal/pub/test/test_pub.dart b/sdk/lib/_internal/pub/test/test_pub.dart
index b018be1e2d6d6333029c869abbecaa9a13aa5d7c..f1358a9e9e5757bc965b02afc5aca342710bb6b8 100644
--- a/sdk/lib/_internal/pub/test/test_pub.dart
+++ b/sdk/lib/_internal/pub/test/test_pub.dart
@@ -366,20 +366,40 @@ void scheduleSymlink(String target, String symlink) {
'symlinking $target to $symlink');
}
-/// Schedules a call to the Pub command-line utility. Runs Pub with [args] and
-/// validates that its results match [output], [error], and [exitCode].
-void schedulePub({List args, Pattern output, Pattern error,
+/// 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]. If [outputJson] is given, validates
+/// that pub outputs stringified JSON matching that object.
+void schedulePub({List args, Pattern output, Pattern error, outputJson,
Future<Uri> tokenEndpoint, int exitCode: 0}) {
+ // Cannot pass both output and outputJson.
+ assert(output == null || outputJson == null);
+
var pub = startPub(args: args, tokenEndpoint: tokenEndpoint);
pub.shouldExit(exitCode);
+ var failures = [];
+ var stderr;
+
expect(Future.wait([
pub.remainingStdout(),
pub.remainingStderr()
]).then((results) {
- var failures = [];
- _validateOutput(failures, 'stdout', output, results[0].split('\n'));
- _validateOutput(failures, 'stderr', error, results[1].split('\n'));
+ stderr = results[1];
+
+ if (outputJson == null) {
+ _validateOutput(failures, 'stdout', output, results[0]);
+ return;
+ }
+
+ // Allow the expected JSON to contain futures.
+ return awaitObject(outputJson).then((resolved) {
+ _validateOutputJson(failures, 'stdout', resolved, results[0]);
+ });
+ }).then((_) {
+ _validateOutput(failures, 'stderr', error, stderr);
+
if (!failures.isEmpty) throw new TestFailure(failures.join('\n'));
}), completes);
}
@@ -647,13 +667,14 @@ Map packageVersionApiMap(Map pubspec, {bool full: false}) {
/// report the offending difference in a nice way. For other [Pattern]s, just
/// reports whether the output contained the pattern.
void _validateOutput(List<String> failures, String pipe, Pattern expected,
- List<String> actual) {
+ String actual) {
if (expected == null) return;
+ var actualLines = actual.split("\n");
if (expected is RegExp) {
- _validateOutputRegex(failures, pipe, expected, actual);
+ _validateOutputRegex(failures, pipe, expected, actualLines);
} else {
- _validateOutputString(failures, pipe, expected, actual);
+ _validateOutputString(failures, pipe, expected, actualLines);
}
}
@@ -719,6 +740,22 @@ void _validateOutputString(List<String> failures, String pipe,
}
}
+void _validateOutputJson(List<String> failures, String pipe,
+ expected, String actualText) {
+ var actual;
+ try {
+ actual = json.parse(actualText);
+ } on FormatException catch(error) {
+ failures.add('Expected $pipe JSON:');
+ failures.add(expected);
+ failures.add('Got invalid JSON:');
+ failures.add(actualText);
+ }
+
+ // Do a deep comparison of the JSON objects.
+ expect(actual, equals(expected));
+}
+
/// A function that creates a [Validator] subclass.
typedef Validator ValidatorCreator(Entrypoint entrypoint);
« no previous file with comments | « sdk/lib/_internal/pub/test/pub_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698