Chromium Code Reviews| Index: pkg/unittest/lib/unittest.dart |
| =================================================================== |
| --- pkg/unittest/lib/unittest.dart (revision 18992) |
| +++ pkg/unittest/lib/unittest.dart (working copy) |
| @@ -113,6 +113,18 @@ |
| * callback should be protected within a call to guardAsync(); this will ensure |
| * that exceptions are properly handled. |
| * |
| + * A variation on this is expectAsyncUntilX(); this takes a callback as the first |
|
Siggi Cherem (dart-lang)
2013/02/26 00:25:29
80 col
gram
2013/03/04 19:51:52
Done.
|
| + * parameter and a predicate function as the second parameter; after each time |
| + * the callback is called, the predicate function will be called; if it returns |
| + * false the test will still be considered incomplete. |
| + * |
| + * Test functions can return [Future]s, which provide another way of doing |
| + * asynchronous tests. The test framework will handle exceptions thrown by |
| + * the Future, and will advance to the next test when the Future is complete. |
| + * It is still important to use expectAsync/guardAsync with any parts of the |
| + * test that may be invoked via an [Isolate] (for example, with Timer.run()], |
|
Siggi Cherem (dart-lang)
2013/02/26 00:25:29
rephrase: 'via an [Isolate]' sounds strange.
In t
gram
2013/03/04 19:51:52
Done.
|
| + * as the Future exception handler will not capture exceptions in such code. |
| + * |
| * Note: due to some language limitations we have to use different functions |
| * depending on the number of positional arguments of the callback. In the |
| * future, we plan to expose a single `expectAsync` function that can be used |
| @@ -678,17 +690,17 @@ |
| } |
| } |
| -/** Runs [callback] at the end of the event loop. */ |
| +/** |
| + * Runs [callback] at the end of the event loop. Note that we don't wrap |
| + * the callback in guardAsync; this is for test framework functions which |
| + * should not be throwing unexpected exceptions that end up failing test |
| + * cases! Furthermore, we need the final exception to be thrown but not |
| + * caught by the test framework if any test cases failed. However, tests |
| + * that make use of a similar defer function *should* wrap the callback |
| + * (as we do in unitttest_test.dart). |
| + */ |
| _defer(void callback()) { |
| - // Exploit isolate ports as a platform-independent mechanism to queue a |
| - // message at the end of the event loop. |
| - // TODO(sigmund): expose this functionality somewhere in our libraries. |
| - final port = new ReceivePort(); |
| - port.receive((msg, reply) { |
| - callback(); |
| - port.close(); |
| - }); |
| - port.toSendPort().send(null, null); |
| + (new Future.immediate(null)).then((_) => callback()); |
|
Siggi Cherem (dart-lang)
2013/02/26 00:25:29
I wonder if anything depends on the old behavior h
gram
2013/03/04 19:51:52
I've run all tests in vm (checked/unchecked) and a
|
| } |
| rerunTests() { |
| @@ -781,11 +793,7 @@ |
| final testCase = _tests[_currentTest]; |
| var f = guardAsync(testCase.run, null, _currentTest); |
| if (f != null) { |
| - f.then((_){}) |
| - .catchError((e) { |
| - testCase.error(e.toString(), e.stackTrace); |
| - }) |
| - .whenComplete(() { |
| + f.whenComplete(() { |
| _nextTestCase(); // Schedule the next test. |
| }); |
| break; |