| Index: lib/src/runner/vm/isolate_listener.dart
|
| diff --git a/lib/src/runner/vm/isolate_listener.dart b/lib/src/runner/vm/isolate_listener.dart
|
| index 06e2d6a9693c4941ff8dd0e48c7cdd98af35cbb9..7b6aa5393b85d7d8c123eba5100229ca4f12a473 100644
|
| --- a/lib/src/runner/vm/isolate_listener.dart
|
| +++ b/lib/src/runner/vm/isolate_listener.dart
|
| @@ -10,8 +10,10 @@ import 'dart:async';
|
| import 'package:stack_trace/stack_trace.dart';
|
|
|
| import '../../backend/declarer.dart';
|
| +import '../../backend/group.dart';
|
| import '../../backend/metadata.dart';
|
| import '../../backend/suite.dart';
|
| +import '../../backend/suite_entry.dart';
|
| import '../../backend/test.dart';
|
| import '../../backend/test_platform.dart';
|
| import '../../util/io.dart';
|
| @@ -71,13 +73,14 @@ class IsolateListener {
|
| return;
|
| }
|
|
|
| - var declarer = new Declarer();
|
| + var declarer = new Declarer(metadata);
|
| try {
|
| - await runZoned(() => new Future.sync(main), zoneValues: {
|
| - #test.declarer: declarer
|
| - }, zoneSpecification: new ZoneSpecification(print: (_, __, ___, line) {
|
| - sendPort.send({"type": "print", "line": line});
|
| - }));
|
| + await declarer.declare(() {
|
| + return runZoned(() => new Future.sync(main),
|
| + zoneSpecification: new ZoneSpecification(print: (_, __, ___, line) {
|
| + sendPort.send({"type": "print", "line": line});
|
| + }));
|
| + });
|
| } catch (error, stackTrace) {
|
| sendPort.send({
|
| "type": "error",
|
| @@ -86,7 +89,7 @@ class IsolateListener {
|
| return;
|
| }
|
|
|
| - var suite = new Suite(declarer.tests,
|
| + var suite = new Suite(declarer.build(),
|
| platform: TestPlatform.vm, os: currentOS, metadata: metadata);
|
| new IsolateListener._(suite)._listen(sendPort);
|
| }
|
| @@ -103,26 +106,38 @@ class IsolateListener {
|
| /// Send information about [_suite] across [sendPort] and start listening for
|
| /// commands to run the tests.
|
| void _listen(SendPort sendPort) {
|
| - var tests = [];
|
| - for (var i = 0; i < _suite.tests.length; i++) {
|
| - var test = _suite.tests[i];
|
| - var receivePort = new ReceivePort();
|
| - tests.add({
|
| - "name": test.name,
|
| - "metadata": test.metadata.serialize(),
|
| - "sendPort": receivePort.sendPort
|
| - });
|
| + sendPort.send({
|
| + "type": "success",
|
| + "entries": _serializeEntries(_suite.entries)
|
| + });
|
| + }
|
|
|
| + /// Serializes [entries] into an Isolate-safe map.
|
| + List<Map> _serializeEntries(List<SuiteEntry> entries) {
|
| + return entries.map((entry) {
|
| + if (entry is Group) {
|
| + return {
|
| + "type": "group",
|
| + "name": entry.name,
|
| + "metadata": entry.metadata.serialize(),
|
| + "entries": _serializeEntries(entry.entries)
|
| + };
|
| + }
|
| +
|
| + var test = entry as Test;
|
| + var receivePort = new ReceivePort();
|
| receivePort.listen((message) {
|
| assert(message['command'] == 'run');
|
| _runTest(test, message['reply']);
|
| });
|
| - }
|
|
|
| - sendPort.send({
|
| - "type": "success",
|
| - "tests": tests
|
| - });
|
| + return {
|
| + "type": "test",
|
| + "name": test.name,
|
| + "metadata": test.metadata.serialize(),
|
| + "sendPort": receivePort.sendPort
|
| + };
|
| + }).toList();
|
| }
|
|
|
| /// Runs [test] and sends the results across [sendPort].
|
|
|