Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Unified Diff: pkg/unittest/test/unittest_test.dart

Issue 21220004: Split unittest tests into separate test files. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/unittest/test/unittest_test.dart
===================================================================
--- pkg/unittest/test/unittest_test.dart (revision 25630)
+++ pkg/unittest/test/unittest_test.dart (working copy)
@@ -1,479 +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 'dart:async';
-import 'package:unittest/unittest.dart';
-
-Future _defer(void fn()) {
- return new Future.sync(fn);
-}
-
-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;
- var testDetails = new StringBuffer();
- if(results == null) {
- // no op
- assert(message == '');
- } else if (results is String) {
- totalTests = passed + failed + errors;
- testDetails.write(':$results:$message');
- } else {
- totalTests = results.length;
- for (var i = 0; i < results.length; i++) {
- testDetails.write(':${results[i].description}:'
- '${collapseWhitespace(results[i].message)}');
- }
- }
- return '$passed:$failed:$errors:$totalTests:$count:'
- '$setup:$teardown:$uncaughtError$testDetails';
-}
-
-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
- final SendPort _port;
- String _result;
-
- TestConfiguration(this._port);
-
- void onSummary(int passed, int failed, int errors, List<TestCase> results,
- String uncaughtError) {
- _result = buildStatusString(passed, failed, errors, results,
- count: count, setup: setup, teardown: teardown,
- uncaughtError: uncaughtError);
- }
-
- void onDone(bool success) {
- _port.send(_result);
- }
-}
-
-makeDelayedSetup(index, s) => () {
- return new Future.delayed(new Duration(milliseconds:1), () {
- s.write('l$index U ');
- });
-};
-
-makeDelayedTeardown(index, s) => () {
- return new Future.delayed(new Duration(milliseconds:1), () {
- s.write('l$index D ');
- });
-};
-
-makeImmediateSetup(index, s) => () {
- s.write('l$index U ');
-};
-
-makeImmediateTeardown(index, s) => () {
- s.write('l$index D ');
-};
-
-runTest() {
- port.receive((String testName, sendport) {
- var testConfig = new TestConfiguration(sendport);
- unittestConfiguration = testConfig;
-
- 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 _callback0 = expectAsync0(() => ++testConfig.count);
- var _callback1 = expectAsync0(() => ++testConfig.count);
- var _callback2 = expectAsync0(() {
- _callback1();
- _callback1();
- _callback0();
- });
- _defer(_callback2);
- });
- } 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') {
- var f;
- test('testOne', () {
- f = expectAsync0(() {});
- _defer(f);
- });
- test('testTwo', () {
- _defer(expectAsync0(() { f(); }));
- });
- } else if (testName == 'middle exception test') {
- test('testOne', () { expect(true, isTrue); });
- test('testTwo', () { expect(true, isFalse); });
- test('testThree', () {
- var done = expectAsync0((){});
- _defer(() {
- expect(true, isTrue);
- done();
- });
- });
- } else if (testName == 'async setup/teardown test') {
- group('good setup/good teardown', () {
- setUp(() {
- return new Future.value(0);
- });
- tearDown(() {
- return new Future.value(0);
- });
- test('foo1', (){});
- });
- group('good setup/bad teardown', () {
- setUp(() {
- return new Future.value(0);
- });
- tearDown(() {
- return new Future.error("Failed to complete tearDown");
- });
- test('foo2', (){});
- });
- group('bad setup/good teardown', () {
- setUp(() {
- return new Future.error("Failed to complete setUp");
- });
- tearDown(() {
- return new Future.value(0);
- });
- test('foo3', (){});
- });
- group('bad setup/bad teardown', () {
- setUp(() {
- return new Future.error("Failed to complete setUp");
- });
- tearDown(() {
- return new Future.error("Failed to complete tearDown");
- });
- test('foo4', (){});
- });
- // The next test is just to make sure we make steady progress
- // through the tests.
- test('post groups', () {});
- } else if (testName == 'test returning future') {
- test("successful", () {
- return _defer(() {
- expect(true, true);
- });
- });
- // We repeat the fail and error tests, because during development
- // I had a situation where either worked fine on their own, and
- // error/fail worked, but fail/error would time out.
- test("error1", () {
- var callback = expectAsync0((){});
- var excesscallback = expectAsync0((){});
- return _defer(() {
- excesscallback();
- excesscallback();
- excesscallback();
- callback();
- });
- });
- test("fail1", () {
- return _defer(() {
- expect(true, false);
- });
- });
- test("error2", () {
- var callback = expectAsync0((){});
- var excesscallback = expectAsync0((){});
- return _defer(() {
- excesscallback();
- excesscallback();
- callback();
- });
- });
- test("fail2", () {
- return _defer(() {
- fail('failure');
- });
- });
- test('foo5', () {
- });
- } else if (testName == 'test returning future using runAsync') {
- test("successful", () {
- return _defer(() {
- runAsync(() {
- guardAsync(() {
- expect(true, true);
- });
- });
- });
- });
- test("fail1", () {
- var callback = expectAsync0((){});
- return _defer(() {
- runAsync(() {
- guardAsync(() {
- expect(true, false);
- callback();
- });
- });
- });
- });
- test('error1', () {
- var callback = expectAsync0((){});
- var excesscallback = expectAsync0((){});
- return _defer(() {
- runAsync(() {
- guardAsync(() {
- excesscallback();
- excesscallback();
- callback();
- });
- });
- });
- });
- test("fail2", () {
- var callback = expectAsync0((){});
- return _defer(() {
- runAsync(() {
- guardAsync(() {
- fail('failure');
- callback();
- });
- });
- });
- });
- test('error2', () {
- var callback = expectAsync0((){});
- var excesscallback = expectAsync0((){});
- return _defer(() {
- runAsync(() {
- guardAsync(() {
- excesscallback();
- excesscallback();
- excesscallback();
- callback();
- });
- });
- });
- });
- test('foo6', () {
- });
- } else if (testName == 'testCases immutable') {
- test(testName, () {
- expect(() => testCases.clear(), throwsUnsupportedError);
- expect(() => testCases.removeLast(), throwsUnsupportedError);
- });
- } else if (testName == 'runTests without tests') {
- runTests();
- } else if (testName == 'nested groups setup/teardown') {
- StringBuffer s = new StringBuffer();
- group('level 1', () {
- setUp(makeDelayedSetup(1, s));
- group('level 2', () {
- setUp(makeImmediateSetup(2, s));
- tearDown(makeDelayedTeardown(2, s));
- group('level 3', () {
- group('level 4', () {
- setUp(makeDelayedSetup(4, s));
- tearDown(makeImmediateTeardown(4, s));
- group('level 5', () {
- setUp(makeImmediateSetup(5, s));
- group('level 6', () {
- tearDown(makeDelayedTeardown(6, s));
- test('inner', () {});
- });
- });
- });
- });
- });
- });
- test('after nest', () {
- expect(s.toString(), "l1 U l2 U l4 U l5 U l6 D l4 D l2 D ");
- });
- } else if (testName == 'skipped/soloed nested groups with setup/teardown') {
- StringBuffer s = null;
- setUp(() {
- if (s == null)
- s = new StringBuffer();
- });
- test('top level', () {
- s.write('A');
- });
- skip_test('skipped top level', () {
- s.write('B');
- });
- skip_group('skipped top level group', () {
- setUp(() {
- s.write('C');
- });
- solo_test('skipped solo nested test', () {
- s.write('D');
- });
- });
- group('non-solo group', () {
- setUp(() {
- s.write('E');
- });
- test('in non-solo group', () {
- s.write('F');
- });
- solo_test('solo_test in non-solo group', () {
- s.write('G');
- });
- });
- solo_group('solo group', () {
- setUp(() {
- s.write('H');
- });
- test('solo group non-solo test', () {
- s.write('I');
- });
- solo_test('solo group solo test', () {
- s.write('J');
- });
- group('nested non-solo group in solo group', () {
- test('nested non-solo group non-solo test', () {
- s.write('K');
- });
- solo_test('nested non-solo group solo test', () {
- s.write('L');
- });
- });
- });
- solo_test('final', () {
- expect(s.toString(), "EGHIHJHKHL");
- });
- }
- });
-}
-
-main() {
- var tests = {
- 'single correct test': buildStatusString(1, 0, 0, 'single correct test'),
- 'single failing test': buildStatusString(0, 1, 0, 'single failing test',
- message: 'Expected: <5> Actual: <4>'),
- 'exception test': buildStatusString(0, 0, 1, 'exception test',
- message: 'Test failed: Caught Exception: Fail.'),
- 'group name test': buildStatusString(2, 0, 0, 'a a::a b b'),
- 'setup test': buildStatusString(1, 0, 0, 'a setup test',
- count: 0, setup: 'setup'),
- 'teardown test': buildStatusString(1, 0, 0, 'a teardown test',
- count: 0, setup: '', teardown: 'teardown'),
- 'setup and teardown test': buildStatusString(1, 0, 0,
- 'a setup and teardown test', count: 0, setup: 'setup',
- teardown: 'teardown'),
- 'correct callback test': buildStatusString(1, 0, 0, 'correct callback test',
- count: 1),
- 'excess callback test': buildStatusString(0, 1, 0, 'excess callback test',
- count: 1, message: 'Callback called more times than expected (1).'),
- 'completion test': buildStatusString(1, 0, 0, 'completion test', count: 10),
- 'async exception test': buildStatusString(0, 1, 0, 'async exception test',
- message: 'Caught error!'),
- 'late exception test': buildStatusString(1, 0, 1, 'testOne',
- message: 'Callback called (2) after test case testOne has already '
- 'been marked as pass.:testTwo:'),
- 'middle exception test': buildStatusString(2, 1, 0,
- 'testOne::testTwo:Expected: false Actual: <true>:testThree'),
- 'async setup/teardown test': buildStatusString(2, 0, 3,
- 'good setup/good teardown foo1::'
- 'good setup/bad teardown foo2:'
- 'Teardown failed: Caught Failed to complete tearDown:'
- 'bad setup/good teardown foo3:'
- 'Setup failed: Caught Failed to complete setUp:'
- 'bad setup/bad teardown foo4:'
- 'Setup failed: Caught Failed to complete setUp:'
- 'post groups'),
- 'test returning future': buildStatusString(2, 4, 0,
- 'successful::'
- 'error1:Callback called more times than expected (1).:'
- 'fail1:Expected: <false> Actual: <true>:'
- 'error2:Callback called more times than expected (1).:'
- 'fail2:failure:'
- 'foo5'),
- 'test returning future using runAsync': buildStatusString(2, 4, 0,
- 'successful::'
- 'fail1:Expected: <false> Actual: <true>:'
- 'error1:Callback called more times than expected (1).:'
- 'fail2:failure:'
- 'error2:Callback called more times than expected (1).:'
- 'foo6'),
- 'testCases immutable':
- buildStatusString(1, 0, 0, 'testCases immutable'),
- 'runTests without tests': buildStatusString(0, 0, 0, null),
- 'nested groups setup/teardown':
- buildStatusString(2, 0, 0,
- 'level 1 level 2 level 3 level 4 level 5 level 6 inner::'
- 'after nest'),
- 'skipped/soloed nested groups with setup/teardown':
- buildStatusString(6, 0, 0,
- 'non-solo group solo_test in non-solo group::'
- 'solo group solo group non-solo test::'
- 'solo group solo group solo test::'
- 'solo group nested non-solo group in solo group nested non-'
- 'solo group non-solo test::'
- 'solo group nested non-solo group in solo'
- ' group nested non-solo group solo test::'
- 'final')
- };
-
- tests.forEach((String name, String expected) {
- test(name, () => spawnFunction(runTest)
- .call(name)
- .then((String msg) => expect(msg.trim(), equals(expected))));
- });
-}
-

Powered by Google App Engine
This is Rietveld 408576698