Index: test/invoker_test.dart |
diff --git a/test/invoker_test.dart b/test/invoker_test.dart |
deleted file mode 100644 |
index 5dea8118bbe19e55d81ca42ac25c9c294228b7f0..0000000000000000000000000000000000000000 |
--- a/test/invoker_test.dart |
+++ /dev/null |
@@ -1,495 +0,0 @@ |
-// Copyright (c) 2015, 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 'dart:async'; |
- |
-import 'package:fake_async/fake_async.dart'; |
-import 'package:unittest/src/backend/invoker.dart'; |
-import 'package:unittest/src/backend/state.dart'; |
-import 'package:unittest/src/backend/suite.dart'; |
-import 'package:unittest/unittest.dart'; |
- |
-import 'utils.dart'; |
- |
-void main() { |
- var suite; |
- setUp(() { |
- lastState = null; |
- suite = new Suite("suite", []); |
- }); |
- |
- group("Invoker.current", () { |
- var invoker = Invoker.current; |
- test("returns null outside of a test body", () { |
- expect(invoker, isNull); |
- }); |
- |
- test("returns the current invoker in a test body", () { |
- var invoker; |
- var liveTest = new LocalTest("test", () { |
- invoker = Invoker.current; |
- }).load(suite); |
- liveTest.onError.listen(expectAsync((_) {}, count: 0)); |
- |
- return liveTest.run().then((_) { |
- expect(invoker.liveTest, equals(liveTest)); |
- }); |
- }); |
- |
- test("returns the current invoker in a test body after the test completes", |
- () { |
- var status; |
- var completer = new Completer(); |
- var liveTest = new LocalTest("test", () { |
- // Use [new Future] in particular to wait longer than a microtask for |
- // the test to complete. |
- new Future(() { |
- status = Invoker.current.liveTest.state.status; |
- completer.complete(Invoker.current); |
- }); |
- }).load(suite); |
- liveTest.onError.listen(expectAsync((_) {}, count: 0)); |
- |
- expect(liveTest.run(), completes); |
- return completer.future.then((invoker) { |
- expect(invoker.liveTest, equals(liveTest)); |
- expect(status, equals(Status.complete)); |
- }); |
- }); |
- |
- test("returns the current invoker in a tearDown body", () { |
- var invoker; |
- var liveTest = new LocalTest("test", () {}, tearDown: () { |
- invoker = Invoker.current; |
- }).load(suite); |
- liveTest.onError.listen(expectAsync((_) {}, count: 0)); |
- |
- return liveTest.run().then((_) { |
- expect(invoker.liveTest, equals(liveTest)); |
- }); |
- }); |
- |
- test("returns the current invoker in a tearDown body after the test " |
- "completes", () { |
- var status; |
- var completer = new Completer(); |
- var liveTest = new LocalTest("test", () {}, tearDown: () { |
- // Use [new Future] in particular to wait longer than a microtask for |
- // the test to complete. |
- new Future(() { |
- status = Invoker.current.liveTest.state.status; |
- completer.complete(Invoker.current); |
- }); |
- }).load(suite); |
- liveTest.onError.listen(expectAsync((_) {}, count: 0)); |
- |
- expect(liveTest.run(), completes); |
- return completer.future.then((invoker) { |
- expect(invoker.liveTest, equals(liveTest)); |
- expect(status, equals(Status.complete)); |
- }); |
- }); |
- }); |
- |
- group("in a successful test,", () { |
- test("the state changes from pending to running to complete", () { |
- var stateInTest; |
- var stateInTearDown; |
- var liveTest; |
- liveTest = new LocalTest("test", () { |
- stateInTest = liveTest.state; |
- }, tearDown: () { |
- stateInTearDown = liveTest.state; |
- }).load(suite); |
- liveTest.onError.listen(expectAsync((_) {}, count: 0)); |
- |
- expect(liveTest.state.status, equals(Status.pending)); |
- expect(liveTest.state.result, equals(Result.success)); |
- |
- var future = liveTest.run(); |
- |
- expect(liveTest.state.status, equals(Status.running)); |
- expect(liveTest.state.result, equals(Result.success)); |
- |
- return future.then((_) { |
- expect(stateInTest.status, equals(Status.running)); |
- expect(stateInTest.result, equals(Result.success)); |
- |
- expect(stateInTearDown.status, equals(Status.running)); |
- expect(stateInTearDown.result, equals(Result.success)); |
- |
- expect(liveTest.state.status, equals(Status.complete)); |
- expect(liveTest.state.result, equals(Result.success)); |
- }); |
- }); |
- |
- test("onStateChange fires for each state change", () { |
- var liveTest = new LocalTest("test", () {}).load(suite); |
- liveTest.onError.listen(expectAsync((_) {}, count: 0)); |
- |
- var first = true; |
- liveTest.onStateChange.listen(expectAsync((state) { |
- if (first) { |
- expect(state.status, equals(Status.running)); |
- first = false; |
- } else { |
- expect(state.status, equals(Status.complete)); |
- } |
- expect(state.result, equals(Result.success)); |
- }, count: 2, max: 2)); |
- |
- return liveTest.run(); |
- }); |
- |
- test("onComplete completes once the test body and tearDown are done", () { |
- var testRun = false; |
- var tearDownRun = false; |
- var liveTest = new LocalTest("test", () { |
- testRun = true; |
- }, tearDown: () { |
- tearDownRun = true; |
- }).load(suite); |
- |
- expect(liveTest.onComplete.then((_) { |
- expect(testRun, isTrue); |
- expect(tearDownRun, isTrue); |
- }), completes); |
- |
- return liveTest.run(); |
- }); |
- }); |
- |
- group("in a test with failures,", () { |
- test("a synchronous throw is reported and causes the test to fail", () { |
- var liveTest = new LocalTest("test", () { |
- throw new TestFailure('oh no'); |
- }).load(suite); |
- |
- expectSingleFailure(liveTest); |
- return liveTest.run(); |
- }); |
- |
- test("a synchronous reported failure causes the test to fail", () { |
- var liveTest = new LocalTest("test", () { |
- Invoker.current.handleError(new TestFailure("oh no")); |
- }).load(suite); |
- |
- expectSingleFailure(liveTest); |
- return liveTest.run(); |
- }); |
- |
- test("a failure reported asynchronously during the test causes it to fail", |
- () { |
- var liveTest = new LocalTest("test", () { |
- Invoker.current.addOutstandingCallback(); |
- new Future(() => Invoker.current.handleError(new TestFailure("oh no"))); |
- }).load(suite); |
- |
- expectSingleFailure(liveTest); |
- return liveTest.run(); |
- }); |
- |
- test("a failure thrown asynchronously during the test causes it to fail", |
- () { |
- var liveTest = new LocalTest("test", () { |
- Invoker.current.addOutstandingCallback(); |
- new Future(() => throw new TestFailure("oh no")); |
- }).load(suite); |
- |
- expectSingleFailure(liveTest); |
- return liveTest.run(); |
- }); |
- |
- test("a failure reported asynchronously after the test causes it to error", |
- () { |
- var liveTest = new LocalTest("test", () { |
- new Future(() => Invoker.current.handleError(new TestFailure("oh no"))); |
- }).load(suite); |
- |
- expectStates(liveTest, [ |
- const State(Status.running, Result.success), |
- const State(Status.complete, Result.success), |
- const State(Status.complete, Result.failure), |
- const State(Status.complete, Result.error) |
- ]); |
- |
- expectErrors(liveTest, [(error) { |
- expect(lastState, equals(const State(Status.complete, Result.failure))); |
- expect(error, isTestFailure("oh no")); |
- }, (error) { |
- expect(lastState, equals(const State(Status.complete, Result.error))); |
- expect(error, equals( |
- "This test failed after it had already completed. Make sure to " |
- "use [expectAsync]\n" |
- "or the [completes] matcher when testing async code.")); |
- }]); |
- |
- return liveTest.run(); |
- }); |
- |
- test("multiple asynchronous failures are reported", () { |
- var liveTest = new LocalTest("test", () { |
- Invoker.current.addOutstandingCallback(); |
- new Future(() => throw new TestFailure("one")); |
- new Future(() => throw new TestFailure("two")); |
- new Future(() => throw new TestFailure("three")); |
- new Future(() => throw new TestFailure("four")); |
- }).load(suite); |
- |
- expectStates(liveTest, [ |
- const State(Status.running, Result.success), |
- const State(Status.complete, Result.failure) |
- ]); |
- |
- expectErrors(liveTest, [(error) { |
- expect(lastState.status, equals(Status.complete)); |
- expect(error, isTestFailure("one")); |
- }, (error) { |
- expect(error, isTestFailure("two")); |
- }, (error) { |
- expect(error, isTestFailure("three")); |
- }, (error) { |
- expect(error, isTestFailure("four")); |
- }]); |
- |
- return liveTest.run(); |
- }); |
- |
- test("a failure after an error doesn't change the state of the test", () { |
- var liveTest = new LocalTest("test", () { |
- new Future(() => throw new TestFailure("fail")); |
- throw "error"; |
- }).load(suite); |
- |
- expectStates(liveTest, [ |
- const State(Status.running, Result.success), |
- const State(Status.complete, Result.error) |
- ]); |
- |
- expectErrors(liveTest, [(error) { |
- expect(lastState, equals(const State(Status.complete, Result.error))); |
- expect(error, equals("error")); |
- }, (error) { |
- expect(error, isTestFailure("fail")); |
- }]); |
- |
- return liveTest.run(); |
- }); |
- |
- test("tearDown is run after an asynchronous failure", () { |
- var stateDuringTearDown; |
- var liveTest; |
- liveTest = new LocalTest("test", () { |
- Invoker.current.addOutstandingCallback(); |
- new Future(() => throw new TestFailure("oh no")); |
- }, tearDown: () { |
- stateDuringTearDown = liveTest.state; |
- }).load(suite); |
- |
- expectSingleFailure(liveTest); |
- return liveTest.run().then((_) { |
- expect(stateDuringTearDown, |
- equals(const State(Status.complete, Result.failure))); |
- }); |
- }); |
- }); |
- |
- group("in a test with errors,", () { |
- test("a synchronous throw is reported and causes the test to error", () { |
- var liveTest = new LocalTest("test", () { |
- throw 'oh no'; |
- }).load(suite); |
- |
- expectSingleError(liveTest); |
- return liveTest.run(); |
- }); |
- |
- test("a synchronous reported error causes the test to error", () { |
- var liveTest = new LocalTest("test", () { |
- Invoker.current.handleError("oh no"); |
- }).load(suite); |
- |
- expectSingleError(liveTest); |
- return liveTest.run(); |
- }); |
- |
- test("an error reported asynchronously during the test causes it to error", |
- () { |
- var liveTest = new LocalTest("test", () { |
- Invoker.current.addOutstandingCallback(); |
- new Future(() => Invoker.current.handleError("oh no")); |
- }).load(suite); |
- |
- expectSingleError(liveTest); |
- return liveTest.run(); |
- }); |
- |
- test("an error thrown asynchronously during the test causes it to error", |
- () { |
- var liveTest = new LocalTest("test", () { |
- Invoker.current.addOutstandingCallback(); |
- new Future(() => throw "oh no"); |
- }).load(suite); |
- |
- expectSingleError(liveTest); |
- return liveTest.run(); |
- }); |
- |
- test("an error reported asynchronously after the test causes it to error", |
- () { |
- var liveTest = new LocalTest("test", () { |
- new Future(() => Invoker.current.handleError("oh no")); |
- }).load(suite); |
- |
- expectStates(liveTest, [ |
- const State(Status.running, Result.success), |
- const State(Status.complete, Result.success), |
- const State(Status.complete, Result.error) |
- ]); |
- |
- expectErrors(liveTest, [(error) { |
- expect(lastState, equals(const State(Status.complete, Result.error))); |
- expect(error, equals("oh no")); |
- }, (error) { |
- expect(error, equals( |
- "This test failed after it had already completed. Make sure to " |
- "use [expectAsync]\n" |
- "or the [completes] matcher when testing async code.")); |
- }]); |
- |
- return liveTest.run(); |
- }); |
- |
- test("multiple asynchronous errors are reported", () { |
- var liveTest = new LocalTest("test", () { |
- Invoker.current.addOutstandingCallback(); |
- new Future(() => throw "one"); |
- new Future(() => throw "two"); |
- new Future(() => throw "three"); |
- new Future(() => throw "four"); |
- }).load(suite); |
- |
- expectStates(liveTest, [ |
- const State(Status.running, Result.success), |
- const State(Status.complete, Result.error) |
- ]); |
- |
- expectErrors(liveTest, [(error) { |
- expect(lastState.status, equals(Status.complete)); |
- expect(error, equals("one")); |
- }, (error) { |
- expect(error, equals("two")); |
- }, (error) { |
- expect(error, equals("three")); |
- }, (error) { |
- expect(error, equals("four")); |
- }]); |
- |
- return liveTest.run(); |
- }); |
- |
- test("an error after a failure changes the state of the test", () { |
- var liveTest = new LocalTest("test", () { |
- new Future(() => throw "error"); |
- throw new TestFailure("fail"); |
- }).load(suite); |
- |
- expectStates(liveTest, [ |
- const State(Status.running, Result.success), |
- const State(Status.complete, Result.failure), |
- const State(Status.complete, Result.error) |
- ]); |
- |
- expectErrors(liveTest, [(error) { |
- expect(lastState, equals(const State(Status.complete, Result.failure))); |
- expect(error, isTestFailure("fail")); |
- }, (error) { |
- expect(lastState, equals(const State(Status.complete, Result.error))); |
- expect(error, equals("error")); |
- }]); |
- |
- return liveTest.run(); |
- }); |
- |
- test("tearDown is run after an asynchronous error", () { |
- var stateDuringTearDown; |
- var liveTest; |
- liveTest = new LocalTest("test", () { |
- Invoker.current.addOutstandingCallback(); |
- new Future(() => throw "oh no"); |
- }, tearDown: () { |
- stateDuringTearDown = liveTest.state; |
- }).load(suite); |
- |
- expectSingleError(liveTest); |
- return liveTest.run().then((_) { |
- expect(stateDuringTearDown, |
- equals(const State(Status.complete, Result.error))); |
- }); |
- }); |
- }); |
- |
- test("a test doesn't complete until there are no outstanding callbacks", |
- () { |
- var outstandingCallbackRemoved = false; |
- var liveTest = new LocalTest("test", () { |
- Invoker.current.addOutstandingCallback(); |
- |
- // Pump the event queue to make sure the test isn't coincidentally |
- // completing after the outstanding callback is removed. |
- pumpEventQueue().then((_) { |
- outstandingCallbackRemoved = true; |
- Invoker.current.removeOutstandingCallback(); |
- }); |
- }).load(suite); |
- |
- liveTest.onError.listen(expectAsync((_) {}, count: 0)); |
- |
- return liveTest.run().then((_) { |
- expect(outstandingCallbackRemoved, isTrue); |
- }); |
- }); |
- |
- test("a test's tearDown isn't run until there are no outstanding callbacks", |
- () { |
- var outstandingCallbackRemoved = false; |
- var outstandingCallbackRemovedBeforeTeardown = false; |
- var liveTest = new LocalTest("test", () { |
- Invoker.current.addOutstandingCallback(); |
- pumpEventQueue().then((_) { |
- outstandingCallbackRemoved = true; |
- Invoker.current.removeOutstandingCallback(); |
- }); |
- }, tearDown: () { |
- outstandingCallbackRemovedBeforeTeardown = outstandingCallbackRemoved; |
- }).load(suite); |
- |
- liveTest.onError.listen(expectAsync((_) {}, count: 0)); |
- |
- return liveTest.run().then((_) { |
- expect(outstandingCallbackRemovedBeforeTeardown, isTrue); |
- }); |
- }); |
- |
- test("a test times out after 30 seconds", () { |
- new FakeAsync().run((async) { |
- var liveTest = new LocalTest("test", () { |
- Invoker.current.addOutstandingCallback(); |
- }).load(suite); |
- |
- expectStates(liveTest, [ |
- const State(Status.running, Result.success), |
- const State(Status.complete, Result.error) |
- ]); |
- |
- expectErrors(liveTest, [(error) { |
- expect(lastState.status, equals(Status.complete)); |
- expect(error, new isInstanceOf<TimeoutException>()); |
- }]); |
- |
- liveTest.run(); |
- async.elapse(new Duration(seconds: 30)); |
- }); |
- }); |
-} |