Index: test/isolate_test.dart |
diff --git a/test/isolate_test.dart b/test/isolate_test.dart |
index b08bdd9158db4d4326739dbc8fc1e97da022cfe2..9f3beef9f38210d5969e5b04a23ff89ef4a3ebcf 100644 |
--- a/test/isolate_test.dart |
+++ b/test/isolate_test.dart |
@@ -165,6 +165,19 @@ void main() { |
expect(other.onExit, completes); |
}); |
}); |
+ |
+ test("onServiceExtensionAdded fires when an extension is added", () async { |
+ client = await runAndConnect(main: """ |
+ registerExtension('ext.test', (_, __) {}); |
+ """, flags: ["--pause-isolates-on-start"]); |
+ |
+ var isolate = await (await client.getVM()).isolates.first.loadRunnable(); |
+ await isolate.waitUntilPaused(); |
+ await isolate.resume(); |
+ |
+ VMServiceExtension ext = await isolate.onServiceExtensionAdded.first; |
+ expect(ext.method, 'ext.test'); |
+ }); |
}); |
group("loadRunnable", () { |
@@ -375,6 +388,44 @@ void main() { |
expect(breakpoint.number, equals(1)); |
}); |
}); |
+ |
+ group("invokeExtension", () { |
+ test("enforces ext. prefix", () async { |
+ var client = await runAndConnect(); |
+ var isolate = await (await client.getVM()).isolates.first.loadRunnable(); |
+ expect(() => isolate.invokeExtension('noprefix'), throwsArgumentError); |
+ }); |
+ |
+ test("forwards to scope", () async { |
+ var client = await runAndConnect(main: r""" |
+ registerExtension('ext.ping', (_, __) async { |
+ return new ServiceExtensionResponse.result('{"type": "pong"}'); |
+ }); |
+ """); |
+ |
+ var isolate = await (await client.getVM()).isolates.first.loadRunnable(); |
+ var response = await isolate.invokeExtension('ext.ping'); |
+ expect(response, {'type': 'pong'}); |
+ }); |
+ |
+ test("passes parameters", () async { |
+ var client = await runAndConnect(main: r""" |
+ registerExtension('ext.params', (_, params) async { |
+ return new ServiceExtensionResponse.result('''{ |
+ "foo": "${params['foo']}" |
+ }'''); |
+ }); |
+ """); |
+ |
+ var isolate = await (await client.getVM()).isolates.first.loadRunnable(); |
+ var response = await isolate.invokeExtension('ext.params', { |
+ 'foo': 'bar', |
+ }); |
+ expect(response, { |
+ 'foo': 'bar', |
+ }); |
+ }); |
+ }); |
} |
/// Starts a client with two unpaused empty isolates. |