Chromium Code Reviews| 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. Unlike typical unit tests, most pub | 5 /// Test infrastructure for testing pub. Unlike typical unit tests, most pub |
| 6 /// tests are integration tests that stage some stuff on the file system, run | 6 /// tests are integration tests that stage some stuff on the file system, run |
| 7 /// pub, and then validate the results. This library provides an API to build | 7 /// pub, and then validate the results. This library provides an API to build |
| 8 /// tests like that. | 8 /// tests like that. |
| 9 library test_pub; | 9 library test_pub; |
| 10 | 10 |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 230 /// directory. | 230 /// directory. |
| 231 final String appPath = "myapp"; | 231 final String appPath = "myapp"; |
| 232 | 232 |
| 233 /// The path of the packages directory in the mock app used for tests. Relative | 233 /// The path of the packages directory in the mock app used for tests. Relative |
| 234 /// to the sandbox directory. | 234 /// to the sandbox directory. |
| 235 final String packagesPath = "$appPath/packages"; | 235 final String packagesPath = "$appPath/packages"; |
| 236 | 236 |
| 237 /// Set to true when the current batch of scheduled events should be aborted. | 237 /// Set to true when the current batch of scheduled events should be aborted. |
| 238 bool _abortScheduled = false; | 238 bool _abortScheduled = false; |
| 239 | 239 |
| 240 /// Many tests validate behavior that is the same between pub install and | |
| 241 /// update have the same behavior. Instead of duplicating those tests, this | |
| 242 /// takes a callback that defines install/update agnostic tests and runs them | |
| 243 /// with both commands. | |
| 244 void forBothPubInstallAndUpdate(void callback(String command)) { | |
| 245 group('install', () => callback('install')); | |
| 246 group('update', () => callback('update')); | |
| 247 } | |
| 248 | |
| 249 /// Schedules an invocation of pub [command] and validates that it completes | |
| 250 /// in an expected way. | |
| 251 /// | |
| 252 /// By default, this validates that the command completes successfully and | |
| 253 /// understands the normal output of a successful pub command. If [warning] is | |
| 254 /// given, it expects the command to complete successfully *and* print | |
| 255 /// [warning] to stderr. If [error] is given, it expects the command to *only* | |
| 256 /// print [error] to stderr. | |
| 257 // TODO(rnystrom): Clean up other tests to call this when possible. | |
| 258 void runPub(String command, {Iterable<String> args, Pattern error, | |
|
nweiz
2013/05/23 20:54:57
Since [command] can only be one of a finite set of
Bob Nystrom
2013/05/23 23:44:44
Done.
| |
| 259 Pattern warning}) { | |
| 260 var allArgs = [command]; | |
| 261 if (args != null) allArgs.addAll(args); | |
| 262 | |
| 263 var output; | |
| 264 switch (command) { | |
| 265 case 'install': | |
| 266 output = new RegExp("Dependencies installed!\$"); | |
| 267 break; | |
| 268 | |
| 269 case 'update': | |
| 270 output = new RegExp("Dependencies updated!\$"); | |
| 271 break; | |
| 272 | |
| 273 default: | |
| 274 throw 'Unknown pub command "$command".'; | |
|
nweiz
2013/05/23 20:54:57
Wrap this in Exception.
Bob Nystrom
2013/05/23 23:44:44
Done.
| |
| 275 } | |
| 276 | |
| 277 var exitCode = null; | |
| 278 if (error != null) exitCode = 1; | |
| 279 | |
| 280 // No success output on an error. | |
| 281 if (error != null) output = null; | |
| 282 if (warning != null) error = warning; | |
|
nweiz
2013/05/23 20:54:57
We should probably document and assert that error
Bob Nystrom
2013/05/23 23:44:44
Done.
| |
| 283 | |
| 284 schedulePub(args: allArgs, output: output, error: error, exitCode: exitCode); | |
| 285 } | |
| 286 | |
| 240 /// Defines an integration test. The [body] should schedule a series of | 287 /// Defines an integration test. The [body] should schedule a series of |
| 241 /// operations which will be run asynchronously. | 288 /// operations which will be run asynchronously. |
| 242 void integration(String description, void body()) => | 289 void integration(String description, void body()) => |
| 243 _integration(description, body, test); | 290 _integration(description, body, test); |
| 244 | 291 |
| 245 /// Like [integration], but causes only this test to run. | 292 /// Like [integration], but causes only this test to run. |
| 246 void solo_integration(String description, void body()) => | 293 void solo_integration(String description, void body()) => |
| 247 _integration(description, body, solo_test); | 294 _integration(description, body, solo_test); |
| 248 | 295 |
| 249 void _integration(String description, void body(), [Function testFn]) { | 296 void _integration(String description, void body(), [Function testFn]) { |
| (...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 682 bool matches(item, MatchState matchState) { | 729 bool matches(item, MatchState matchState) { |
| 683 if (item is! Pair) return false; | 730 if (item is! Pair) return false; |
| 684 return _firstMatcher.matches(item.first, matchState) && | 731 return _firstMatcher.matches(item.first, matchState) && |
| 685 _lastMatcher.matches(item.last, matchState); | 732 _lastMatcher.matches(item.last, matchState); |
| 686 } | 733 } |
| 687 | 734 |
| 688 Description describe(Description description) { | 735 Description describe(Description description) { |
| 689 description.addAll("(", ", ", ")", [_firstMatcher, _lastMatcher]); | 736 description.addAll("(", ", ", ")", [_firstMatcher, _lastMatcher]); |
| 690 } | 737 } |
| 691 } | 738 } |
| OLD | NEW |