Index: tests/lib/unittest/unittest_test.dart |
=================================================================== |
--- tests/lib/unittest/unittest_test.dart (revision 10689) |
+++ tests/lib/unittest/unittest_test.dart (working copy) |
@@ -1,198 +0,0 @@ |
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-// TODO(gram): |
-// Unfortunately I can't seem to test anything that involves timeouts, e.g. |
-// insufficient callbacks, because the timeout is controlled externally |
-// (test.dart?), and we would need to use a shorter timeout for the inner tests |
-// so the outer timeout doesn't fire. So I removed all such tests. |
-// I'd like to revisit this at some point. |
- |
-#library('unittestTest'); |
-#import('dart:isolate'); |
-#import('../../../pkg/unittest/unittest.dart'); |
- |
-var tests; // array of test names |
-var expected; // array of test expected results (from buildStatusString) |
-var actual; // actual test results (from buildStatusString in config.onDone) |
-var _testconfig; // test configuration to capture onDone |
- |
-_defer(void fn()) { |
- // Exploit isolate ports as a platform-independent mechanism to queue a |
- // message at the end of the event loop. Stolen from unittest.dart. |
- final port = new ReceivePort(); |
- port.receive((msg, reply) { |
- fn(); |
- port.close(); |
- }); |
- port.toSendPort().send(null, null); |
-} |
- |
-String buildStatusString(int passed, int failed, int errors, |
- var results, |
- [int count = 0, |
- String setup = '', String teardown = '', |
- String uncaughtError = null, |
- String message = '']) { |
- var totalTests = 0; |
- String testDetails = ''; |
- if (results is String) { |
- totalTests = passed + failed + errors; |
- testDetails = ':$results:$message'; |
- } else { |
- totalTests = results.length; |
- for (var i = 0; i < results.length; i++) { |
- testDetails = '$testDetails:${results[i].description}:' |
- '${collapseWhitespace(results[i].message)}'; |
- } |
- } |
- var result = '$passed:$failed:$errors:$totalTests:$count:' |
- '$setup:$teardown:$uncaughtError$testDetails'; |
- return result; |
-} |
- |
-class TestConfiguration extends Configuration { |
- |
- // Some test state that is captured |
- int count = 0; // a count of callbacks |
- String setup = ''; // the name of the test group setup function, if any |
- String teardown = ''; // the name of the test group teardown function, if any |
- |
- // The port to communicate with the parent isolate |
- SendPort _port; |
- |
- TestConfiguration(this._port); |
- |
- void onDone(int passed, int failed, int errors, List<TestCase> results, |
- String uncaughtError) { |
- var result = buildStatusString(passed, failed, errors, results, count, |
- setup, teardown, uncaughtError); |
- _port.send(result); |
- } |
-} |
-runTest() { |
- port.receive((testName, sendport) { |
- configure(_testconfig = new TestConfiguration(sendport)); |
- if (testName == 'single correct test') { |
- test(testName, () => expect(2 + 3, equals(5))); |
- } else if (testName == 'single failing test') { |
- test(testName, () => expect(2 + 2, equals(5))); |
- } else if (testName == 'exception test') { |
- test(testName, () { throw new Exception('Fail.'); }); |
- } else if (testName == 'group name test') { |
- group('a', () { |
- test('a', () {}); |
- group('b', () { |
- test('b', () {}); |
- }); |
- }); |
- } else if (testName == 'setup test') { |
- group('a', () { |
- setUp(() { _testconfig.setup = 'setup'; }); |
- test(testName, () {}); |
- }); |
- } else if (testName == 'teardown test') { |
- group('a', () { |
- tearDown(() { _testconfig.teardown = 'teardown'; }); |
- test(testName, () {}); |
- }); |
- } else if (testName == 'setup and teardown test') { |
- group('a', () { |
- setUp(() { _testconfig.setup = 'setup'; }); |
- tearDown(() { _testconfig.teardown = 'teardown'; }); |
- test(testName, () {}); |
- }); |
- } else if (testName == 'correct callback test') { |
- test(testName, |
- () =>_defer(expectAsync0((){ ++_testconfig.count;}))); |
- } else if (testName == 'excess callback test') { |
- test(testName, () { |
- var _callback = expectAsync0((){ ++_testconfig.count;}); |
- _defer(_callback); |
- _defer(_callback); |
- }); |
- } else if (testName == 'completion test') { |
- test(testName, () { |
- var _callback; |
- _callback = expectAsyncUntil0(() { |
- if (++_testconfig.count < 10) { |
- _defer(_callback); |
- } |
- }, |
- () => (_testconfig.count == 10)); |
- _defer(_callback); |
- }); |
- } else if (testName == 'async exception test') { |
- test(testName, () { |
- expectAsync0(() {}); |
- _defer(() => guardAsync(() { throw "error!"; })); |
- }); |
- } else if (testName == 'late exception test') { |
- test('testOne', () { |
- var f = expectAsync0(() {}); |
- _defer(protectAsync0(() { |
- _defer(protectAsync0(() => expect(false))); |
- expect(false); |
- })); |
- }); |
- test('testTwo', () { |
- _defer(expectAsync0(() {})); |
- }); |
- } |
- }); |
-} |
- |
-void nextTest(int testNum) { |
- SendPort sport = spawnFunction(runTest); |
- sport.call(tests[testNum]).then((msg) { |
- actual.add(msg); |
- if (actual.length == expected.length) { |
- for (var i = 0; i < tests.length; i++) { |
- test(tests[i], () => expect(actual[i].trim(), equals(expected[i]))); |
- } |
- } else { |
- nextTest(testNum+1); |
- } |
- }); |
-} |
- |
-main() { |
- tests = [ |
- 'single correct test', |
- 'single failing test', |
- 'exception test', |
- 'group name test', |
- 'setup test', |
- 'teardown test', |
- 'setup and teardown test', |
- 'correct callback test', |
- 'excess callback test', |
- 'completion test', |
- 'async exception test', |
- 'late exception test' |
- ]; |
- |
- expected = [ |
- buildStatusString(1, 0, 0, tests[0]), |
- buildStatusString(0, 1, 0, tests[1], |
- message: 'Expected: <5> but: was <4>.'), |
- buildStatusString(0, 1, 0, tests[2], message: 'Caught Exception: Fail.'), |
- buildStatusString(2, 0, 0, 'a a::a b b'), |
- buildStatusString(1, 0, 0, 'a ${tests[4]}', 0, 'setup'), |
- buildStatusString(1, 0, 0, 'a ${tests[5]}', 0, '', 'teardown'), |
- buildStatusString(1, 0, 0, 'a ${tests[6]}', 0, |
- 'setup', 'teardown'), |
- buildStatusString(1, 0, 0, tests[7], 1), |
- buildStatusString(0, 0, 1, tests[8], 1, |
- message: 'Callback called more times than expected (2 > 1).'), |
- buildStatusString(1, 0, 0, tests[9], 10), |
- buildStatusString(0, 1, 0, tests[10], message: 'Caught error!'), |
- buildStatusString(1, 0, 1, 'testOne', message: 'Callback called after already being marked as done (1).:testTwo:') |
- ]; |
- |
- actual = []; |
- |
- nextTest(0); |
-} |
- |