Make the `message` argument a Map (#1479)
Towards #1478
The argument to `PlatformPlugin.load` is always a `Map`. The intent is
always to pass it to `deserializeSuite`, where it is unconditionally
cast to `Map`. The loose `Object` argument type does not add any
capabilities.
Changing `PlatformPlugin.load` argument type is not likely to be
breaking since it is not intended for use from outside callers. Changing
the `deserializeSuite` argument is breaking for platform
implementations. Change `PlatformPlugin.load` now so implementations
can adjust before the change in `deserializeSuite`.
diff --git a/pkgs/test/lib/src/runner/browser/browser_manager.dart b/pkgs/test/lib/src/runner/browser/browser_manager.dart
index 6295fff..207aaa6 100644
--- a/pkgs/test/lib/src/runner/browser/browser_manager.dart
+++ b/pkgs/test/lib/src/runner/browser/browser_manager.dart
@@ -202,8 +202,8 @@
///
/// If [mapper] is passed, it's used to map stack traces for errors coming
/// from this test suite.
- Future<RunnerSuite> load(
- String path, Uri url, SuiteConfiguration suiteConfig, Object message,
+ Future<RunnerSuite> load(String path, Uri url, SuiteConfiguration suiteConfig,
+ Map<String, Object?> message,
{StackTraceMapper? mapper}) async {
url = url.replace(
fragment: Uri.encodeFull(jsonEncode({
diff --git a/pkgs/test/lib/src/runner/browser/platform.dart b/pkgs/test/lib/src/runner/browser/platform.dart
index f2fa5e9..7158944 100644
--- a/pkgs/test/lib/src/runner/browser/platform.dart
+++ b/pkgs/test/lib/src/runner/browser/platform.dart
@@ -208,7 +208,7 @@
/// Throws an [ArgumentError] if `platform.platform` isn't a browser.
@override
Future<RunnerSuite?> load(String path, SuitePlatform platform,
- SuiteConfiguration suiteConfig, Object message) async {
+ SuiteConfiguration suiteConfig, Map<String, Object?> message) async {
var browser = platform.runtime;
assert(suiteConfig.runtimes.contains(browser.identifier));
diff --git a/pkgs/test/lib/src/runner/node/platform.dart b/pkgs/test/lib/src/runner/node/platform.dart
index 2357b49..3a5b733 100644
--- a/pkgs/test/lib/src/runner/node/platform.dart
+++ b/pkgs/test/lib/src/runner/node/platform.dart
@@ -86,7 +86,7 @@
@override
Future<RunnerSuite> load(String path, SuitePlatform platform,
- SuiteConfiguration suiteConfig, Object message) async {
+ SuiteConfiguration suiteConfig, Map<String, Object?> message) async {
var pair = await _loadChannel(path, platform.runtime, suiteConfig);
var controller = deserializeSuite(
path, platform, suiteConfig, PluginEnvironment(), pair.first, message);
diff --git a/pkgs/test_core/CHANGELOG.md b/pkgs/test_core/CHANGELOG.md
index bd1ad29..3602465 100644
--- a/pkgs/test_core/CHANGELOG.md
+++ b/pkgs/test_core/CHANGELOG.md
@@ -9,6 +9,9 @@
you run into issues, but please also file a bug.
* Improve the error message for `hybridMain` functions with an incompatible
StreamChannel parameter type.
+* Change the `message` argument to `PlatformPlugin.load` to `Map<String,
+ Object?>`. In an upcoming release this will be required as the type for this
+ argument when passed through to `deserializeSuite`.
## 0.3.19
diff --git a/pkgs/test_core/lib/src/runner/platform.dart b/pkgs/test_core/lib/src/runner/platform.dart
index 25412d7..2cb4540 100644
--- a/pkgs/test_core/lib/src/runner/platform.dart
+++ b/pkgs/test_core/lib/src/runner/platform.dart
@@ -55,7 +55,7 @@
/// `platform_helpers.dart` to obtain a [RunnerSuiteController]. They must
/// pass the opaque [message] parameter to the [deserializeSuite] call.
Future<RunnerSuite?> load(String path, SuitePlatform platform,
- SuiteConfiguration suiteConfig, Object message);
+ SuiteConfiguration suiteConfig, Map<String, Object?> message);
Future closeEphemeral() async {}
diff --git a/pkgs/test_core/lib/src/runner/plugin/platform_helpers.dart b/pkgs/test_core/lib/src/runner/plugin/platform_helpers.dart
index d2b1120..4d63bdf 100644
--- a/pkgs/test_core/lib/src/runner/plugin/platform_helpers.dart
+++ b/pkgs/test_core/lib/src/runner/plugin/platform_helpers.dart
@@ -43,7 +43,7 @@
SuiteConfiguration suiteConfig,
Environment environment,
StreamChannel<Object?> channel,
- Object message,
+ Object /*Map<String, Object?>*/ message,
{Future<Map<String, dynamic>> Function()? gatherCoverage}) {
var disconnector = Disconnector<Object?>();
var suiteChannel = MultiChannel<Object?>(channel.transform(disconnector));
@@ -59,7 +59,8 @@
'noRetry': Configuration.current.noRetry,
'foldTraceExcept': Configuration.current.foldTraceExcept.toList(),
'foldTraceOnly': Configuration.current.foldTraceOnly.toList(),
- }..addAll(message as Map<String, dynamic>));
+ ...(message as Map<String, dynamic>),
+ });
var completer = Completer<Group>();
diff --git a/pkgs/test_core/lib/src/runner/vm/platform.dart b/pkgs/test_core/lib/src/runner/vm/platform.dart
index f0fe965..8f52f89 100644
--- a/pkgs/test_core/lib/src/runner/vm/platform.dart
+++ b/pkgs/test_core/lib/src/runner/vm/platform.dart
@@ -47,7 +47,7 @@
@override
Future<RunnerSuite?> load(String path, SuitePlatform platform,
- SuiteConfiguration suiteConfig, Object message) async {
+ SuiteConfiguration suiteConfig, Map<String, Object?> message) async {
assert(platform.runtime == Runtime.vm);
var receivePort = ReceivePort();