| Index: test/vm_listener_test.dart
|
| diff --git a/test/vm_listener_test.dart b/test/vm_listener_test.dart
|
| index b626ad151a72a86cf4cb05c007053674145c1d22..47ee330a7998cad6511ade452ac866bdf9d09b35 100644
|
| --- a/test/vm_listener_test.dart
|
| +++ b/test/vm_listener_test.dart
|
| @@ -9,6 +9,7 @@ import 'package:unittest/src/declarer.dart';
|
| import 'package:unittest/src/invoker.dart';
|
| import 'package:unittest/src/isolate_test.dart';
|
| import 'package:unittest/src/live_test.dart';
|
| +import 'package:unittest/src/remote_exception.dart';
|
| import 'package:unittest/src/state.dart';
|
| import 'package:unittest/src/suite.dart';
|
| import 'package:unittest/src/vm_listener.dart';
|
| @@ -41,7 +42,11 @@ void main() {
|
| test("sends a list of available tests on startup", () {
|
| return _spawnIsolate(_successfulTests).then((receivePort) {
|
| return receivePort.first;
|
| - }).then((tests) {
|
| + }).then((response) {
|
| + expect(response, containsPair("type", "success"));
|
| + expect(response, contains("tests"));
|
| +
|
| + var tests = response["tests"];
|
| expect(tests, hasLength(3));
|
| expect(tests[0], containsPair("name", "successful 1"));
|
| expect(tests[1], containsPair("name", "successful 2"));
|
| @@ -49,6 +54,52 @@ void main() {
|
| });
|
| });
|
|
|
| + test("sends an error response if loading fails", () {
|
| + return _spawnIsolate(_loadError).then((receivePort) {
|
| + return receivePort.first;
|
| + }).then((response) {
|
| + expect(response, containsPair("type", "error"));
|
| + expect(response, contains("error"));
|
| +
|
| + var error = RemoteException.deserialize(response["error"]).error;
|
| + expect(error.message, equals("oh no"));
|
| + expect(error.type, equals("String"));
|
| + });
|
| + });
|
| +
|
| + test("sends an error response on a NoSuchMethodError", () {
|
| + return _spawnIsolate(_noSuchMethodError).then((receivePort) {
|
| + return receivePort.first;
|
| + }).then((response) {
|
| + expect(response, containsPair("type", "loadException"));
|
| + expect(response,
|
| + containsPair("message", "No top-level main() function defined."));
|
| + });
|
| + });
|
| +
|
| + test("sends an error response on non-function main", () {
|
| + return _spawnIsolate(_nonFunction).then((receivePort) {
|
| + return receivePort.first;
|
| + }).then((response) {
|
| + expect(response, containsPair("type", "loadException"));
|
| + expect(response,
|
| + containsPair("message", "Top-level main getter is not a function."));
|
| + });
|
| + });
|
| +
|
| + test("sends an error response on wrong-arity main", () {
|
| + return _spawnIsolate(_wrongArity).then((receivePort) {
|
| + return receivePort.first;
|
| + }).then((response) {
|
| + expect(response, containsPair("type", "loadException"));
|
| + expect(
|
| + response,
|
| + containsPair(
|
| + "message",
|
| + "Top-level main() function takes arguments."));
|
| + });
|
| + });
|
| +
|
| group("in a successful test", () {
|
| test("the state changes from pending to running to complete", () {
|
| return _isolateTest(_successfulTests).then((liveTest) {
|
| @@ -218,7 +269,9 @@ Future<LiveTest> _isolateTest(void entryPoint(SendPort sendPort)) {
|
| return _spawnIsolate(entryPoint).then((receivePort) {
|
| return receivePort.first;
|
| }).then((response) {
|
| - var testMap = response.first;
|
| + expect(response, containsPair("type", "success"));
|
| +
|
| + var testMap = response["tests"].first;
|
| var test = new IsolateTest(testMap["name"], testMap["sendPort"]);
|
| var suite = new Suite("suite", [test]);
|
| _liveTest = test.load(suite);
|
| @@ -238,9 +291,27 @@ Future<ReceivePort> _spawnIsolate(void entryPoint(SendPort sendPort)) {
|
| });
|
| }
|
|
|
| +/// An isolate entrypoint that throws immediately.
|
| +void _loadError(SendPort sendPort) =>
|
| + VmListener.start(sendPort, () => () => throw 'oh no');
|
| +
|
| +/// An isolate entrypoint that throws a NoSuchMethodError.
|
| +void _noSuchMethodError(SendPort sendPort) {
|
| + return VmListener.start(sendPort, () =>
|
| + throw new NoSuchMethodError(null, #main, [], {}));
|
| +}
|
| +
|
| +/// An isolate entrypoint that returns a non-function.
|
| +void _nonFunction(SendPort sendPort) =>
|
| + VmListener.start(sendPort, () => null);
|
| +
|
| +/// An isolate entrypoint that returns a function with the wrong arity.
|
| +void _wrongArity(SendPort sendPort) =>
|
| + VmListener.start(sendPort, () => (_) {});
|
| +
|
| /// An isolate entrypoint that defines three tests that succeed.
|
| void _successfulTests(SendPort sendPort) {
|
| - VmListener.start(sendPort, () {
|
| + VmListener.start(sendPort, () => () {
|
| _declarer.test("successful 1", () {});
|
| _declarer.test("successful 2", () {});
|
| _declarer.test("successful 3", () {});
|
| @@ -249,14 +320,14 @@ void _successfulTests(SendPort sendPort) {
|
|
|
| /// An isolate entrypoint that defines a test that fails.
|
| void _failingTest(SendPort sendPort) {
|
| - VmListener.start(sendPort, () {
|
| + VmListener.start(sendPort, () => () {
|
| _declarer.test("failure", () => throw new TestFailure('oh no'));
|
| });
|
| }
|
|
|
| /// An isolate entrypoint that defines a test that fails after succeeding.
|
| void _failAfterSucceedTest(SendPort sendPort) {
|
| - VmListener.start(sendPort, () {
|
| + VmListener.start(sendPort, () => () {
|
| _declarer.test("fail after succeed", () {
|
| pumpEventQueue().then((_) {
|
| throw new TestFailure('oh no');
|
| @@ -267,7 +338,7 @@ void _failAfterSucceedTest(SendPort sendPort) {
|
|
|
| /// An isolate entrypoint that defines a test that fails multiple times.
|
| void _multiFailTest(SendPort sendPort) {
|
| - VmListener.start(sendPort, () {
|
| + VmListener.start(sendPort, () => () {
|
| _declarer.test("multiple failures", () {
|
| Invoker.current.addOutstandingCallback();
|
| new Future(() => throw new TestFailure("one"));
|
| @@ -280,14 +351,14 @@ void _multiFailTest(SendPort sendPort) {
|
|
|
| /// An isolate entrypoint that defines a test that errors.
|
| void _errorTest(SendPort sendPort) {
|
| - VmListener.start(sendPort, () {
|
| + VmListener.start(sendPort, () => () {
|
| _declarer.test("error", () => throw 'oh no');
|
| });
|
| }
|
|
|
| /// An isolate entrypoint that defines a test that errors after succeeding.
|
| void _errorAfterSucceedTest(SendPort sendPort) {
|
| - VmListener.start(sendPort, () {
|
| + VmListener.start(sendPort, () => () {
|
| _declarer.test("error after succeed", () {
|
| pumpEventQueue().then((_) => throw 'oh no');
|
| });
|
| @@ -296,7 +367,7 @@ void _errorAfterSucceedTest(SendPort sendPort) {
|
|
|
| /// An isolate entrypoint that defines a test that errors multiple times.
|
| void _multiErrorTest(SendPort sendPort) {
|
| - VmListener.start(sendPort, () {
|
| + VmListener.start(sendPort, () => () {
|
| _declarer.test("multiple errors", () {
|
| Invoker.current.addOutstandingCallback();
|
| new Future(() => throw "one");
|
|
|