| Index: pkg/unittest/tests/unittest_test.dart
|
| ===================================================================
|
| --- pkg/unittest/tests/unittest_test.dart (revision 10770)
|
| +++ pkg/unittest/tests/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);
|
| -}
|
| -
|
|
|