Index: lib/src/runner/plugin/platform.dart |
diff --git a/lib/src/runner/plugin/platform.dart b/lib/src/runner/plugin/platform.dart |
index be5a14ee0bdaa243c99e0fbb6fd29a92bdf81924..820f4c0371aaa94c6b271f0fec6767330d775d47 100644 |
--- a/lib/src/runner/plugin/platform.dart |
+++ b/lib/src/runner/plugin/platform.dart |
@@ -4,20 +4,14 @@ |
import 'dart:async'; |
-import 'package:stack_trace/stack_trace.dart'; |
import 'package:stream_channel/stream_channel.dart'; |
-import '../../backend/group.dart'; |
import '../../backend/metadata.dart'; |
-import '../../backend/test.dart'; |
import '../../backend/test_platform.dart'; |
-import '../../util/io.dart'; |
-import '../../util/remote_exception.dart'; |
import '../environment.dart'; |
-import '../load_exception.dart'; |
import '../runner_suite.dart'; |
-import '../runner_test.dart'; |
import 'environment.dart'; |
+import 'platform_helpers.dart'; |
/// A class that defines a platform for which test suites can be loaded. |
/// |
@@ -30,16 +24,10 @@ import 'environment.dart'; |
/// well, which returns a [RunnerSuite] that can contain a custom [Environment] |
/// and control debugging metadata such as [RunnerSuite.isDebugging] and |
/// [RunnerSuite.onDebugging]. To make this easier, implementations can call |
-/// [deserializeSuite]. |
+/// [deserializeSuite] in `platform_helpers.dart`. |
/// |
/// A platform plugin can be registered with [Loader.registerPlatformPlugin]. |
abstract class PlatformPlugin { |
- /// The platforms supported by this plugin. |
- /// |
- /// A plugin may declare support for existing platform, in which case it |
- /// overrides the previous loading functionality for that platform. |
- List<TestPlatform> get platforms; |
- |
/// Loads and establishes a connection with the test file at [path] using |
/// [platform]. |
/// |
@@ -65,7 +53,8 @@ abstract class PlatformPlugin { |
/// implementation of [Environment]. |
/// |
/// It's recommended that subclasses overriding this method call |
- /// [deserializeSuite] to obtain a [RunnerSuiteController]. |
+ /// [deserializeSuite] in `platform_helpers.dart` to obtain a |
+ /// [RunnerSuiteController]. |
Future<RunnerSuite> load(String path, TestPlatform platform, |
Metadata metadata) async { |
// loadChannel may throw an exception. That's fine; it will cause the |
@@ -76,105 +65,7 @@ abstract class PlatformPlugin { |
return controller.suite; |
} |
- /// A helper method for creating a [RunnerSuiteController] containing tests |
- /// that communicate over [channel]. |
- /// |
- /// This is notionally a protected method. It may be called by subclasses, but |
- /// it shouldn't be accessed by externally. |
- /// |
- /// This returns a controller so that the caller has a chance to control the |
- /// runner suite's debugging state based on plugin-specific logic. |
- Future<RunnerSuiteController> deserializeSuite(String path, |
- TestPlatform platform, Metadata metadata, Environment environment, |
- StreamChannel channel) async { |
- var disconnector = new Disconnector(); |
- var suiteChannel = new MultiChannel(channel.transform(disconnector)); |
- |
- suiteChannel.sink.add({ |
- 'platform': platform.identifier, |
- 'metadata': metadata.serialize(), |
- 'os': platform == TestPlatform.vm ? currentOS.name : null |
- }); |
- |
- var completer = new Completer(); |
- |
- handleError(error, stackTrace) { |
- disconnector.disconnect(); |
- |
- if (completer.isCompleted) { |
- // If we've already provided a controller, send the error to the |
- // LoadSuite. This will cause the virtual load test to fail, which will |
- // notify the user of the error. |
- Zone.current.handleUncaughtError(error, stackTrace); |
- } else { |
- completer.completeError(error, stackTrace); |
- } |
- } |
- |
- suiteChannel.stream.listen((response) { |
- switch (response["type"]) { |
- case "print": |
- print(response["line"]); |
- break; |
- |
- case "loadException": |
- handleError( |
- new LoadException(path, response["message"]), |
- new Trace.current()); |
- break; |
- |
- case "error": |
- var asyncError = RemoteException.deserialize(response["error"]); |
- handleError( |
- new LoadException(path, asyncError.error), |
- asyncError.stackTrace); |
- break; |
- |
- case "success": |
- completer.complete( |
- _deserializeGroup(suiteChannel, response["root"])); |
- break; |
- } |
- }, onError: handleError, onDone: () { |
- if (completer.isCompleted) return; |
- completer.completeError( |
- new LoadException( |
- path, "Connection closed before test suite loaded."), |
- new Trace.current()); |
- }); |
- |
- return new RunnerSuiteController( |
- environment, |
- await completer.future, |
- path: path, |
- platform: platform, |
- os: currentOS, |
- onClose: disconnector.disconnect); |
- } |
- |
- /// Deserializes [group] into a concrete [Group]. |
- Group _deserializeGroup(MultiChannel suiteChannel, Map group) { |
- var metadata = new Metadata.deserialize(group['metadata']); |
- return new Group(group['name'], group['entries'].map((entry) { |
- if (entry['type'] == 'group') { |
- return _deserializeGroup(suiteChannel, entry); |
- } |
+ Future closeEphemeral() async {} |
- return _deserializeTest(suiteChannel, entry); |
- }), |
- metadata: metadata, |
- setUpAll: _deserializeTest(suiteChannel, group['setUpAll']), |
- tearDownAll: _deserializeTest(suiteChannel, group['tearDownAll'])); |
- } |
- |
- /// Deserializes [test] into a concrete [Test] class. |
- /// |
- /// Returns `null` if [test] is `null`. |
- Test _deserializeTest(MultiChannel suiteChannel, Map test) { |
- if (test == null) return null; |
- |
- var metadata = new Metadata.deserialize(test['metadata']); |
- var testChannel = suiteChannel.virtualChannel(test['channel']); |
- return new RunnerTest(test['name'], metadata, testChannel); |
- } |
+ Future close() async {} |
} |