OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 /// Test infrastructure for testing pub. | 5 /// Test infrastructure for testing pub. |
6 /// | 6 /// |
7 /// Unlike typical unit tests, most pub tests are integration tests that stage | 7 /// Unlike typical unit tests, most pub tests are integration tests that stage |
8 /// some stuff on the file system, run pub, and then validate the results. This | 8 /// some stuff on the file system, run pub, and then validate the results. This |
9 /// library provides an API to build tests like that. | 9 /// library provides an API to build tests like that. |
10 library test_pub; | 10 library test_pub; |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
337 | 337 |
338 /// Schedules an invocation of pub [command] and validates that it completes | 338 /// Schedules an invocation of pub [command] and validates that it completes |
339 /// in an expected way. | 339 /// in an expected way. |
340 /// | 340 /// |
341 /// By default, this validates that the command completes successfully and | 341 /// By default, this validates that the command completes successfully and |
342 /// understands the normal output of a successful pub command. If [warning] is | 342 /// understands the normal output of a successful pub command. If [warning] is |
343 /// given, it expects the command to complete successfully *and* print | 343 /// given, it expects the command to complete successfully *and* print |
344 /// [warning] to stderr. If [error] is given, it expects the command to *only* | 344 /// [warning] to stderr. If [error] is given, it expects the command to *only* |
345 /// print [error] to stderr. [output], [error], and [warning] may be strings, | 345 /// print [error] to stderr. [output], [error], and [warning] may be strings, |
346 /// [RegExp]s, or [Matcher]s. | 346 /// [RegExp]s, or [Matcher]s. |
| 347 /// |
| 348 /// If [exitCode] is given, expects the command to exit with that code. |
347 // TODO(rnystrom): Clean up other tests to call this when possible. | 349 // TODO(rnystrom): Clean up other tests to call this when possible. |
348 void pubCommand(RunCommand command, | 350 void pubCommand(RunCommand command, |
349 {Iterable<String> args, output, error, warning}) { | 351 {Iterable<String> args, output, error, warning, int exitCode}) { |
350 if (error != null && warning != null) { | 352 if (error != null && warning != null) { |
351 throw new ArgumentError("Cannot pass both 'error' and 'warning'."); | 353 throw new ArgumentError("Cannot pass both 'error' and 'warning'."); |
352 } | 354 } |
353 | 355 |
354 var allArgs = [command.name]; | 356 var allArgs = [command.name]; |
355 if (args != null) allArgs.addAll(args); | 357 if (args != null) allArgs.addAll(args); |
356 | 358 |
357 if (output == null) output = command.success; | 359 if (output == null) output = command.success; |
358 | 360 |
359 var exitCode = null; | 361 if (error != null && exitCode == null) exitCode = 1; |
360 if (error != null) exitCode = 1; | |
361 | 362 |
362 // No success output on an error. | 363 // No success output on an error. |
363 if (error != null) output = null; | 364 if (error != null) output = null; |
364 if (warning != null) error = warning; | 365 if (warning != null) error = warning; |
365 | 366 |
366 schedulePub(args: allArgs, output: output, error: error, exitCode: exitCode); | 367 schedulePub(args: allArgs, output: output, error: error, exitCode: exitCode); |
367 } | 368 } |
368 | 369 |
369 void pubGet({Iterable<String> args, output, error, warning}) { | 370 void pubGet({Iterable<String> args, output, error, warning, int exitCode}) { |
370 pubCommand(RunCommand.get, args: args, output: output, error: error, | 371 pubCommand(RunCommand.get, args: args, output: output, error: error, |
371 warning: warning); | 372 warning: warning, exitCode: exitCode); |
372 } | 373 } |
373 | 374 |
374 void pubUpgrade({Iterable<String> args, output, error, warning}) { | 375 void pubUpgrade({Iterable<String> args, output, error, warning, int exitCode}) { |
375 pubCommand(RunCommand.upgrade, args: args, output: output, error: error, | 376 pubCommand(RunCommand.upgrade, args: args, output: output, error: error, |
376 warning: warning); | 377 warning: warning, exitCode: exitCode); |
377 } | 378 } |
378 | 379 |
379 /// Defines an integration test. | 380 /// Defines an integration test. |
380 /// | 381 /// |
381 /// The [body] should schedule a series of operations which will be run | 382 /// The [body] should schedule a series of operations which will be run |
382 /// asynchronously. | 383 /// asynchronously. |
383 void integration(String description, void body()) => | 384 void integration(String description, void body()) => |
384 _integration(description, body, test); | 385 _integration(description, body, test); |
385 | 386 |
386 /// Like [integration], but causes only this test to run. | 387 /// Like [integration], but causes only this test to run. |
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
921 _lastMatcher.matches(item.last, matchState); | 922 _lastMatcher.matches(item.last, matchState); |
922 } | 923 } |
923 | 924 |
924 Description describe(Description description) { | 925 Description describe(Description description) { |
925 return description.addAll("(", ", ", ")", [_firstMatcher, _lastMatcher]); | 926 return description.addAll("(", ", ", ")", [_firstMatcher, _lastMatcher]); |
926 } | 927 } |
927 } | 928 } |
928 | 929 |
929 /// A [StreamMatcher] that matches multiple lines of output. | 930 /// A [StreamMatcher] that matches multiple lines of output. |
930 StreamMatcher emitsLines(String output) => inOrder(output.split("\n")); | 931 StreamMatcher emitsLines(String output) => inOrder(output.split("\n")); |
OLD | NEW |