blob: 4a163b0e6d46ca75dec35b94e90c05d2cde6983e [file] [log] [blame]
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
import 'package:dds/src/devtools/client.dart';
import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
import 'package:stream_channel/stream_channel.dart';
import 'package:test/test.dart';
void main() {
late json_rpc.Peer client;
late DevToolsClient devToolsClient;
setUp(() {
final requestController = StreamController<String>();
final requestStream = requestController.stream;
final requestSink = requestController.sink;
final responseController = StreamController<String>();
final responseStream = responseController.stream;
final responseSink = responseController.sink;
client = json_rpc.Peer(StreamChannel(responseStream, requestSink));
unawaited(client.listen());
devToolsClient = DevToolsClient(
stream: requestStream,
sink: responseSink,
);
});
test('DevToolsClient API', () async {
var response = await client.sendRequest('connected', {
'uri': 'http://127.0.0.1:8181',
});
expect(response, isNull);
expect(devToolsClient.hasConnection, true);
expect(devToolsClient.vmServiceUri, Uri.parse('http://127.0.0.1:8181'));
expect(devToolsClient.embedded, false);
expect(devToolsClient.currentPage, isNull);
response = await client.sendRequest('disconnected');
expect(response, isNull);
expect(devToolsClient.hasConnection, false);
expect(devToolsClient.vmServiceUri, isNull);
expect(devToolsClient.embedded, false);
expect(devToolsClient.currentPage, isNull);
response = await client.sendRequest('currentPage', {
'id': 'foo',
'embedded': true,
});
expect(response, isNull);
expect(devToolsClient.hasConnection, false);
expect(devToolsClient.vmServiceUri, isNull);
expect(devToolsClient.embedded, true);
expect(devToolsClient.currentPage, 'foo');
// TODO: add tests for package:devtools_shared/devtools_server.dart
});
test('DevToolsClient notifications', () async {
final enableNotifications = Completer<void>();
client.registerMethod(
'enableNotifications',
(_) => enableNotifications.complete(),
);
devToolsClient.enableNotifications();
await enableNotifications.future;
final showPage = Completer<void>();
String? pageId;
client.registerMethod('showPage', (parameters) {
pageId = parameters['page'].asString;
showPage.complete();
});
devToolsClient.showPage('foo');
await showPage.future;
expect(pageId, 'foo');
final connectToVmService = Completer<void>();
String? uri;
bool notifyUser = false;
client.registerMethod('connectToVm', (parameters) {
uri = parameters['uri'].asString;
notifyUser = parameters['notify'].asBool;
connectToVmService.complete();
});
devToolsClient.connectToVmService(Uri.parse('http://127.0.0.1:8181'), true);
await connectToVmService.future;
expect(uri, 'http://127.0.0.1:8181');
expect(notifyUser, true);
final notify = Completer<void>();
client.registerMethod('notify', (_) => notify.complete());
devToolsClient.notify();
await notify.future;
});
}