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

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

Issue 15701006: Clean up tests that are duplicated between install and update. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Revise. Created 7 years, 7 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
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 d788ffc1d711e6f6d3ebdb06e1793e8f452c8e71..e21690150b56553c3a35f032c3fe314fc5ca26ad 100644
--- a/sdk/lib/_internal/pub/test/test_pub.dart
+++ b/sdk/lib/_internal/pub/test/test_pub.dart
@@ -235,6 +235,69 @@ final String packagesPath = "$appPath/packages";
/// Set to true when the current batch of scheduled events should be aborted.
bool _abortScheduled = false;
+/// Enum identifying a pub command that can be run with a well-defined success
+/// output.
+class RunCommand {
+ static final install = new RunCommand('install',
+ new RegExp("Dependencies installed!\$"));
+
+ static final update = new RunCommand('update',
+ new RegExp("Dependencies updated!\$"));
+
+ final String name;
+ final RegExp success;
+ RunCommand(this.name, this.success);
+}
+
+/// Many tests validate behavior that is the same between pub install and
+/// update have the same behavior. Instead of duplicating those tests, this
+/// takes a callback that defines install/update agnostic tests and runs them
+/// with both commands.
+void forBothPubInstallAndUpdate(void callback(RunCommand command)) {
+ group(RunCommand.install.name, () => callback(RunCommand.install));
+ group(RunCommand.update.name, () => callback(RunCommand.update));
+}
+
+/// Schedules an invocation of pub [command] and validates that it completes
+/// in an expected way.
+///
+/// By default, this validates that the command completes successfully and
+/// understands the normal output of a successful pub command. If [warning] is
+/// given, it expects the command to complete successfully *and* print
+/// [warning] to stderr. If [error] is given, it expects the command to *only*
+/// print [error] to stderr.
+// TODO(rnystrom): Clean up other tests to call this when possible.
+void pubCommand(RunCommand command, {Iterable<String> args, Pattern error,
+ Pattern warning}) {
+ if (error != null && warning != null) {
+ throw new ArgumentError("Cannot pass both 'error' and 'warning'.");
+ }
+
+ var allArgs = [command.name];
+ if (args != null) allArgs.addAll(args);
+
+ var output = command.success;
+
+ var exitCode = null;
+ if (error != null) exitCode = 1;
+
+ // No success output on an error.
+ if (error != null) output = null;
+ if (warning != null) error = warning;
+
+ schedulePub(args: allArgs, output: output, error: error, exitCode: exitCode);
+}
+
+void pubInstall({Iterable<String> args, Pattern error,
+ Pattern warning}) {
+ pubCommand(RunCommand.install, args: args, error: error, warning: warning);
+}
+
+void pubUpdate({Iterable<String> args, Pattern error,
+ Pattern warning}) {
+ pubCommand(RunCommand.update, args: args, error: error, warning: warning);
+}
+
/// Defines an integration test. The [body] should schedule a series of
/// operations which will be run asynchronously.
void integration(String description, void body()) =>
« no previous file with comments | « sdk/lib/_internal/pub/test/pub_install_and_update_test.dart ('k') | sdk/lib/_internal/pub/test/unknown_source_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698