diff --git a/packages/flutter_tools/lib/src/test/coverage_collector.dart b/packages/flutter_tools/lib/src/test/coverage_collector.dart index e89dc4227c8..72171bc931a 100644 --- a/packages/flutter_tools/lib/src/test/coverage_collector.dart +++ b/packages/flutter_tools/lib/src/test/coverage_collector.dart @@ -181,7 +181,10 @@ Future> collect(Uri serviceUri, bool Function(String) libra }) async { final VMService vmService = await connector(serviceUri); await vmService.getVM(); - return _getAllCoverage(vmService, libraryPredicate); + final Map result = await _getAllCoverage( + vmService, libraryPredicate); + await vmService.close(); + return result; } Future> _getAllCoverage(VMService service, bool Function(String) libraryPredicate) async { diff --git a/packages/flutter_tools/lib/src/vmservice.dart b/packages/flutter_tools/lib/src/vmservice.dart index 7fc46644f8f..f18f802772b 100644 --- a/packages/flutter_tools/lib/src/vmservice.dart +++ b/packages/flutter_tools/lib/src/vmservice.dart @@ -452,6 +452,8 @@ class VMService { Future getVM() async => await vm.reload(); Future refreshViews({ bool waitForViews = false }) => vm.refreshViews(waitForViews: waitForViews); + + Future close() async => await _peer.close(); } /// An error that is thrown when constructing/updating a service object. diff --git a/packages/flutter_tools/test/general.shard/vmservice_test.dart b/packages/flutter_tools/test/general.shard/vmservice_test.dart index a0830c02b1d..646fdf10d59 100644 --- a/packages/flutter_tools/test/general.shard/vmservice_test.dart +++ b/packages/flutter_tools/test/general.shard/vmservice_test.dart @@ -33,13 +33,11 @@ class MockPeer implements rpc.Peer { } @override - bool get isClosed { - throw 'unexpected call to isClosed'; - } + bool get isClosed => _isClosed; @override Future close() async { - throw 'unexpected call to close()'; + _isClosed = true; } @override @@ -70,6 +68,7 @@ class MockPeer implements rpc.Peer { List registeredMethods = []; bool isolatesEnabled = false; + bool _isClosed = false; Future _getVMLatch; Completer _currentGetVMLatchCompleter; @@ -213,6 +212,14 @@ void main() { WebSocketConnector: () => (String url, {CompressionOptions compression}) async => throw const SocketException('test'), }); + testUsingContext('closing VMService closes Peer', () async { + final MockPeer mockPeer = MockPeer(); + final VMService vmService = VMService(mockPeer, null, null, null, null, null, MockDevice(), null); + expect(mockPeer.isClosed, equals(false)); + await vmService.close(); + expect(mockPeer.isClosed, equals(true)); + }); + testUsingContext('refreshViews', () { FakeAsync().run((FakeAsync time) { bool done = false;