OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 /** | 5 /** |
6 * A library for writing dart unit tests. | 6 * A library for writing dart unit tests. |
7 * | 7 * |
8 * To import this library, use the pub package manager. | 8 * To import this library, use the pub package manager. |
9 * Create a pubspec.yaml file in your project and add | 9 * Create a pubspec.yaml file in your project and add |
10 * a dependency on unittest with the following lines: | 10 * a dependency on unittest with the following lines: |
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
355 } | 355 } |
356 | 356 |
357 shouldCallBack() { | 357 shouldCallBack() { |
358 ++actualCalls; | 358 ++actualCalls; |
359 if (testCase.isComplete) { | 359 if (testCase.isComplete) { |
360 // Don't run if the test is done. We don't throw here as this is not | 360 // Don't run if the test is done. We don't throw here as this is not |
361 // the current test, but we do mark the old test as having an error | 361 // the current test, but we do mark the old test as having an error |
362 // if it previously passed. | 362 // if it previously passed. |
363 if (testCase.result == PASS) { | 363 if (testCase.result == PASS) { |
364 testCase.error( | 364 testCase.error( |
365 'Callback ${id}called after test case ${testCase.description} ' | 365 'Callback ${id}called ($actualCalls) after test case ' |
366 'has already been marked as done.', ''); | 366 '${testCase.description} has already been marked as ' |
| 367 '${testCase.result}.', ''); |
367 } | 368 } |
368 return false; | 369 return false; |
369 } else if (maxExpectedCalls >= 0 && actualCalls > maxExpectedCalls) { | 370 } else if (maxExpectedCalls >= 0 && actualCalls > maxExpectedCalls) { |
370 throw new TestFailure('Callback ${id}called more times than expected ' | 371 throw new TestFailure('Callback ${id}called more times than expected ' |
371 '($maxExpectedCalls).'); | 372 '($maxExpectedCalls).'); |
372 } | 373 } |
373 return true; | 374 return true; |
374 } | 375 } |
375 | 376 |
376 after() { | 377 after() { |
377 if (!complete) { | 378 if (!complete) { |
378 if (minExpectedCalls > 0 && actualCalls < minExpectedCalls) return; | 379 if (minExpectedCalls > 0 && actualCalls < minExpectedCalls) return; |
379 if (isDone != null && !isDone()) return; | 380 if (isDone != null && !isDone()) return; |
380 | 381 |
381 // Mark this callback as complete and remove it from the testcase | 382 // Mark this callback as complete and remove it from the testcase |
382 // oustanding callback count; if that hits zero the testcase is done. | 383 // oustanding callback count; if that hits zero the testcase is done. |
383 complete = true; | 384 complete = true; |
384 if (--testCase.callbackFunctionsOutstanding == 0 && | 385 testCase.markCallbackComplete(); |
385 !testCase.isComplete) { | |
386 testCase.pass(); | |
387 } | |
388 } | 386 } |
389 } | 387 } |
390 | 388 |
391 invoke([arg0 = sentinel, arg1 = sentinel, arg2 = sentinel, | 389 invoke([arg0 = sentinel, arg1 = sentinel, arg2 = sentinel, |
392 arg3 = sentinel, arg4 = sentinel]) { | 390 arg3 = sentinel, arg4 = sentinel]) { |
393 return guardAsync(() { | 391 return guardAsync(() { |
394 if (!shouldCallBack()) { | 392 if (!shouldCallBack()) { |
395 return; | 393 return; |
396 } else if (arg0 == sentinel) { | 394 } else if (arg0 == sentinel) { |
397 return callback(); | 395 return callback(); |
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
804 | 802 |
805 /** | 803 /** |
806 * Lazily initializes the test library if not already initialized. | 804 * Lazily initializes the test library if not already initialized. |
807 */ | 805 */ |
808 void ensureInitialized() { | 806 void ensureInitialized() { |
809 if (_initialized) { | 807 if (_initialized) { |
810 return; | 808 return; |
811 } | 809 } |
812 _initialized = true; | 810 _initialized = true; |
813 // Hook our async guard into the matcher library. | 811 // Hook our async guard into the matcher library. |
814 wrapAsync = expectAsync1; | 812 wrapAsync = (f, [id]) => expectAsync1(f, id: id); |
815 | 813 |
816 _tests = <TestCase>[]; | 814 _tests = <TestCase>[]; |
817 _testRunner = _nextBatch; | 815 _testRunner = _nextBatch; |
818 _uncaughtErrorMessage = null; | 816 _uncaughtErrorMessage = null; |
819 | 817 |
820 if (_config == null) { | 818 if (_config == null) { |
821 _config = new Configuration(); | 819 _config = new Configuration(); |
822 } | 820 } |
823 _config.onInit(); | 821 _config.onInit(); |
824 | 822 |
(...skipping 30 matching lines...) Expand all Loading... |
855 } | 853 } |
856 | 854 |
857 /** Enable a test by ID. */ | 855 /** Enable a test by ID. */ |
858 void enableTest(int testId) => _setTestEnabledState(testId, true); | 856 void enableTest(int testId) => _setTestEnabledState(testId, true); |
859 | 857 |
860 /** Disable a test by ID. */ | 858 /** Disable a test by ID. */ |
861 void disableTest(int testId) => _setTestEnabledState(testId, false); | 859 void disableTest(int testId) => _setTestEnabledState(testId, false); |
862 | 860 |
863 /** Signature for a test function. */ | 861 /** Signature for a test function. */ |
864 typedef dynamic TestFunction(); | 862 typedef dynamic TestFunction(); |
OLD | NEW |