From d50d9c5e600e1574fd09cf9c8e51716df86d209f Mon Sep 17 00:00:00 2001 From: Kenzie Schmoll <43759233+kenzieschmoll@users.noreply.github.com> Date: Thu, 5 Sep 2019 09:50:36 -0700 Subject: [PATCH] Register flutterVersion service in flutter_tools. (#39524) * Register getFlutterVersion service in flutter_tools. * Add short revision ids to response. * Rename method and remove obsolete comments. * Fix broken test by adding sendPeerNotifications flag. * Implement mockPeer.sendNotification. --- packages/flutter_tools/lib/src/vmservice.dart | 18 ++++++++++++++---- .../test/general.shard/vmservice_test.dart | 11 ++++++++++- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/packages/flutter_tools/lib/src/vmservice.dart b/packages/flutter_tools/lib/src/vmservice.dart index a3de239a70b..03a8ef3ab2b 100644 --- a/packages/flutter_tools/lib/src/vmservice.dart +++ b/packages/flutter_tools/lib/src/vmservice.dart @@ -20,6 +20,7 @@ import 'base/io.dart' as io; import 'base/utils.dart'; import 'convert.dart' show base64; import 'globals.dart'; +import 'version.dart'; import 'vmservice_record_replay.dart'; /// Override `WebSocketConnector` in [context] to use a different constructor @@ -138,8 +139,6 @@ class VMService { } }); - // If the Flutter Engine doesn't support service registration this will - // have no effect _peer.sendNotification('registerService', { 'service': 'reloadSources', 'alias': 'Flutter Tools', @@ -164,14 +163,25 @@ class VMService { } }); - // If the Flutter Engine doesn't support service registration this will - // have no effect _peer.sendNotification('registerService', { 'service': 'hotRestart', 'alias': 'Flutter Tools', }); } + _peer.registerMethod('flutterVersion', (rpc.Parameters params) async { + final FlutterVersion version = FlutterVersion(); + final Map versionJson = version.toJson(); + versionJson['frameworkRevisionShort'] = version.frameworkRevisionShort; + versionJson['engineRevisionShort'] = version.engineRevisionShort; + return versionJson; + }); + + _peer.sendNotification('registerService', { + 'service': 'flutterVersion', + 'alias': 'Flutter Tools', + }); + if (compileExpression != null) { _peer.registerMethod('compileExpression', (rpc.Parameters params) async { final String isolateId = params['isolateId'].asString; diff --git a/packages/flutter_tools/test/general.shard/vmservice_test.dart b/packages/flutter_tools/test/general.shard/vmservice_test.dart index ccf816b6988..308b4c86e65 100644 --- a/packages/flutter_tools/test/general.shard/vmservice_test.dart +++ b/packages/flutter_tools/test/general.shard/vmservice_test.dart @@ -52,9 +52,12 @@ class MockPeer implements rpc.Peer { @override void sendNotification(String method, [ dynamic parameters ]) { - throw 'unexpected call to sendNotification'; + // this does get called + sentNotifications.putIfAbsent(method, () => []).add(parameters); } + Map> sentNotifications = >{}; + bool isolatesEnabled = false; Future _getVMLatch; @@ -192,6 +195,12 @@ void main() { final MockPeer mockPeer = MockPeer(); expect(mockPeer.returnedFromSendRequest, 0); final VMService vmService = VMService(mockPeer, null, null, null, null, null); + expect(mockPeer.sentNotifications, contains('registerService')); + final List registeredServices = + mockPeer.sentNotifications['registerService'] + .map((dynamic service) => (service as Map)['service']) + .toList(); + expect(registeredServices, contains('flutterVersion')); vmService.getVM().then((void value) { done = true; }); expect(done, isFalse); expect(mockPeer.returnedFromSendRequest, 0);