Chromium Code Reviews| Index: pkg/scheduled_test/test/scheduled_test/tear_down_test.dart |
| diff --git a/pkg/scheduled_test/test/scheduled_test/tear_down_test.dart b/pkg/scheduled_test/test/scheduled_test/tear_down_test.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..07c9021aa70dfd9131d58f663b6fb2d39f6246d4 |
| --- /dev/null |
| +++ b/pkg/scheduled_test/test/scheduled_test/tear_down_test.dart |
| @@ -0,0 +1,202 @@ |
| +// Copyright (c) 2013, 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. |
| + |
| +import 'package:scheduled_test/scheduled_test.dart'; |
| + |
| +import '../metatest.dart'; |
| +import '../utils.dart'; |
| + |
| +void main(_, message) { |
| + initMetatest(message); |
| + |
| + setUpTimeout(); |
| + |
| + expectTestsPass('tearDown is run synchronously after each test', () { |
| + var tearDownRun = false; |
| + tearDown(() { |
| + tearDownRun = true; |
| + schedule(() => tearDownRun = false); |
| + }); |
| + |
| + test('test 1', () { |
| + expect(tearDownRun, isFalse); |
| + schedule(() => expect(tearDownRun, isTrue)); |
| + }); |
| + |
| + test('test 2', () { |
| + expect(tearDownRun, isFalse); |
| + schedule(() => expect(tearDownRun, isTrue)); |
| + }); |
| + }); |
| + |
| + expectTestsPass('tearDown can schedule events', () { |
| + var tearDownRun = false; |
| + tearDown(() { |
| + schedule(() => tearDownRun = true); |
| + }); |
| + |
| + test('test 1', () { |
| + schedule(() => expect(tearDownRun, isFalse)); |
| + }); |
| + |
| + test('test 2', () { |
| + expect(tearDownRun, isTrue); |
| + }); |
| + }); |
| + |
| + expectTestsFail('synchronous errors in tearDown will cause tests to fail', () { |
|
Bob Nystrom
2014/06/27 17:04:54
Long line (I'd just delete "will").
nweiz
2014/06/30 21:10:20
Done.
|
| + tearDown(() => expect('foo', equals('bar'))); |
| + test('test 1', () => expect('foo', equals('foo'))); |
| + test('test 2', () => expect('foo', equals('foo'))); |
| + }); |
| + |
| + expectTestsFail('scheduled errors in tearDown will cause tests to fail', () { |
| + tearDown(() => schedule(() => expect('foo', equals('bar')))); |
| + test('test 1', () => expect('foo', equals('foo'))); |
| + test('test 2', () => expect('foo', equals('foo'))); |
| + }); |
| + |
| + expectTestsPass('synchronous errors in tearDown will cause onException to run', |
|
Bob Nystrom
2014/06/27 17:04:54
And here.
nweiz
2014/06/30 21:10:20
Done.
|
| + () { |
| + var onExceptionRun = false; |
| + tearDown(() { |
| + currentSchedule.onException.schedule(() { |
| + onExceptionRun = true; |
| + }); |
| + |
| + if (!onExceptionRun) expect('foo', equals('bar')); |
| + }); |
| + |
| + test('test 1', () => expect('foo', equals('foo'))); |
| + test('test 2', () => expect(onExceptionRun, isTrue)); |
| + }, passing: ['test 2']); |
| + |
| + expectTestsPass("tearDown applies to child groups", () { |
| + var tearDownRun = false; |
| + tearDown(() { |
| + tearDownRun = true; |
| + schedule(() => tearDownRun = false); |
| + }); |
| + |
| + test('outer', () { |
| + expect(tearDownRun, isFalse); |
| + schedule(() => expect(tearDownRun, isTrue)); |
| + }); |
| + |
| + group('group', () { |
| + test('inner', () { |
| + expect(tearDownRun, isFalse); |
| + schedule(() => expect(tearDownRun, isTrue)); |
| + }); |
| + }); |
| + }); |
| + |
| + expectTestsPass("tearDown doesn't apply to parent groups", () { |
| + var tearDownRun = false; |
| + group('group', () { |
| + tearDown(() { |
| + tearDownRun = true; |
| + schedule(() => tearDownRun = false); |
| + }); |
| + |
| + test('inner', () { |
| + expect(tearDownRun, isFalse); |
| + schedule(() => expect(tearDownRun, isTrue)); |
| + }); |
| + }); |
| + |
| + test('outer', () { |
| + expect(tearDownRun, isFalse); |
| + schedule(() => expect(tearDownRun, isFalse)); |
| + }); |
| + }); |
| + |
| + expectTestsPass("tearDown doesn't apply to sibling groups", () { |
| + var tearDownRun = false; |
| + group('group 1', () { |
| + tearDown(() { |
| + tearDownRun = true; |
| + schedule(() => tearDownRun = false); |
| + }); |
| + |
| + test('test', () { |
| + expect(tearDownRun, isFalse); |
| + schedule(() => expect(tearDownRun, isTrue)); |
| + }); |
| + }); |
| + |
| + group('group 2', () { |
| + test('test', () { |
| + expect(tearDownRun, isFalse); |
| + schedule(() => expect(tearDownRun, isFalse)); |
| + }); |
| + }); |
| + }); |
| + |
| + expectTestsPass("tearDown calls are chained", () { |
| + var tearDownOuterRun = false; |
| + var tearDownInnerRun = false; |
|
Bob Nystrom
2014/06/27 17:04:54
Nit, but I'd find these easier to read as "outerTe
nweiz
2014/06/30 21:10:20
Done.
|
| + group('outer group', () { |
| + tearDown(() { |
|
Bob Nystrom
2014/06/27 17:04:53
Expect that innerTearDown is false here to validat
nweiz
2014/06/30 21:10:20
Done.
|
| + tearDownOuterRun = true; |
| + schedule(() => tearDownOuterRun = false); |
| + }); |
| + |
| + group('intermediate group with no tearDown', () { |
| + group('inner group', () { |
| + tearDown(() { |
| + tearDownInnerRun = true; |
| + schedule(() => tearDownInnerRun = false); |
| + }); |
| + |
| + test('inner', () { |
| + expect(tearDownOuterRun, isFalse); |
| + expect(tearDownInnerRun, isFalse); |
| + schedule(() { |
| + expect(tearDownOuterRun, isTrue); |
| + expect(tearDownInnerRun, isTrue); |
| + }); |
| + }); |
| + }); |
| + }); |
| + |
| + test('outer', () { |
| + expect(tearDownOuterRun, isFalse); |
| + expect(tearDownInnerRun, isFalse); |
| + schedule(() { |
| + expect(tearDownOuterRun, isTrue); |
| + expect(tearDownInnerRun, isFalse); |
| + }); |
| + }); |
| + }); |
| + |
| + test('top', () { |
| + expect(tearDownOuterRun, isFalse); |
| + expect(tearDownInnerRun, isFalse); |
| + schedule(() { |
| + expect(tearDownOuterRun, isFalse); |
| + expect(tearDownInnerRun, isFalse); |
| + }); |
| + }); |
| + }); |
| + |
| + expectTestsPass("a future returned by tearDown is implicitly wrapped", () { |
| + var futureComplete = false; |
| + tearDown(() => pumpEventQueue().then((_) => futureComplete = true)); |
| + |
| + test('test', () { |
| + currentSchedule.onComplete.schedule(() => expect(futureComplete, isTrue)); |
| + }); |
| + }); |
| + |
| + expectTestsPass("a future returned by tearDown should not block the schedule", |
| + () { |
| + var futureComplete = false; |
| + tearDown(() => pumpEventQueue().then((_) => futureComplete = true)); |
| + |
| + test('test', () { |
| + schedule(() => expect(futureComplete, isFalse)); |
| + }); |
| + }); |
| +} |