|  | // Copyright (c) 2023, 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 'package:dart_service_protocol_shared/src/client.dart'; | 
|  | import 'package:test/test.dart'; | 
|  |  | 
|  | class TestClientManager extends ClientManager {} | 
|  |  | 
|  | class TestClient extends Client { | 
|  | int closeCount = 0; | 
|  | int sendRequestCount = 0; | 
|  | int streamNotifyCount = 0; | 
|  |  | 
|  | @override | 
|  | Future<void> close() { | 
|  | closeCount++; | 
|  | return Future.value(); | 
|  | } | 
|  |  | 
|  | @override | 
|  | Future sendRequest({required String method, parameters}) { | 
|  | sendRequestCount++; | 
|  | return Future.value(); | 
|  | } | 
|  |  | 
|  | @override | 
|  | void streamNotify(String stream, Object data) { | 
|  | streamNotifyCount++; | 
|  | } | 
|  | } | 
|  |  | 
|  | void main() { | 
|  | group('ClientManager', () { | 
|  | late ClientManager clientManager; | 
|  | setUp(() { | 
|  | clientManager = TestClientManager(); | 
|  | }); | 
|  | test('add and remove client', () { | 
|  | final client = TestClient(); | 
|  |  | 
|  | expect(clientManager.clients.length, 0); | 
|  |  | 
|  | clientManager.addClient(client); | 
|  |  | 
|  | expect(clientManager.clients.length, 1); | 
|  | expect(clientManager.clients.first, client); | 
|  |  | 
|  | clientManager.removeClient(client); | 
|  |  | 
|  | expect(clientManager.clients.length, 0); | 
|  | }); | 
|  |  | 
|  | test('client name', () { | 
|  | final client = TestClient(); | 
|  |  | 
|  | // Name unset until client is added to a manager | 
|  | expect(client.name, isNull); | 
|  |  | 
|  | // Sets the client name to a default | 
|  | clientManager.addClient(client); | 
|  | final defaultClientName = client.name; | 
|  | expect(client.name?.startsWith('client'), isTrue); | 
|  |  | 
|  | clientManager.setClientName(client, 'test'); | 
|  | expect(client.name, 'test'); | 
|  |  | 
|  | clientManager.clearClientName(client); | 
|  | expect(client.name, defaultClientName); | 
|  | }); | 
|  |  | 
|  | test('findClientThatHandlesServiceMethod', () { | 
|  | final client1 = TestClient(); | 
|  | final client2 = TestClient(); | 
|  | client1.services['service1'] = ClientServiceInfo( | 
|  | 'service1', {'method': ClientServiceMethodInfo('method')}); | 
|  | client2.services['service2'] = ClientServiceInfo( | 
|  | 'service2', {'method': ClientServiceMethodInfo('method')}); | 
|  | clientManager.addClient(client1); | 
|  | clientManager.addClient(client2); | 
|  |  | 
|  | expect( | 
|  | clientManager.findClientThatHandlesServiceMethod('service1', 'method'), | 
|  | client1, | 
|  | ); | 
|  | expect( | 
|  | clientManager.findClientThatHandlesServiceMethod('service1', 'xxxxx'), | 
|  | isNull, | 
|  | ); | 
|  | expect( | 
|  | clientManager.findClientThatHandlesServiceMethod('service2', 'method'), | 
|  | client2, | 
|  | ); | 
|  | expect( | 
|  | clientManager.findClientThatHandlesServiceMethod('xxxxx', 'method'), | 
|  | isNull, | 
|  | ); | 
|  | }); | 
|  |  | 
|  | test('shutdown', () async { | 
|  | final client1 = TestClient(); | 
|  | final client2 = TestClient(); | 
|  | final client3 = TestClient(); | 
|  | clientManager.addClient(client1); | 
|  | clientManager.addClient(client2); | 
|  | clientManager.addClient(client3); | 
|  |  | 
|  | expect(client1.closeCount, 0); | 
|  | expect(client2.closeCount, 0); | 
|  | expect(client3.closeCount, 0); | 
|  | expect( | 
|  | clientManager.clients, | 
|  | unorderedEquals([ | 
|  | client1, | 
|  | client2, | 
|  | client3, | 
|  | ]), | 
|  | ); | 
|  |  | 
|  | await clientManager.shutdown(); | 
|  |  | 
|  | expect(client1.closeCount, 1); | 
|  | expect(client2.closeCount, 1); | 
|  | expect(client3.closeCount, 1); | 
|  | expect( | 
|  | clientManager.clients, | 
|  | [], | 
|  | ); | 
|  | }); | 
|  | }); | 
|  | } |