Index: pkg/analysis_server_client/test/analysis_server_client_test.dart |
diff --git a/pkg/analysis_server_client/test/analysis_server_client_test.dart b/pkg/analysis_server_client/test/analysis_server_client_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4e2f5acfa3151177309ea1b94305bc535ee17e32 |
--- /dev/null |
+++ b/pkg/analysis_server_client/test/analysis_server_client_test.dart |
@@ -0,0 +1,93 @@ |
+// Copyright (c) 2017, 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 'dart:convert'; |
+import 'dart:io'; |
+ |
+import 'package:analysis_server_client/analysis_server_client.dart'; |
+import 'package:mockito/mockito.dart'; |
+import 'package:test/test.dart'; |
+ |
+void main() { |
+ Process _process; |
+ AnalysisServerClient serverWrapper; |
+ |
+ setUp(() async { |
+ _process = new MockProcess(); |
+ serverWrapper = new AnalysisServerClient(_process); |
+ when(_process.stdin).thenReturn(<int>[]); |
+ }); |
+ |
+ test('test_listenToOutput_good', () async { |
+ when(_process.stdout).thenReturn(_goodMessage()); |
+ |
+ final future = serverWrapper.send('blahMethod', null); |
+ serverWrapper.listenToOutput(); |
+ |
+ final response = await future; |
+ expect(response, new isInstanceOf<Map>()); |
+ final responseAsMap = response as Map; |
+ expect(responseAsMap['foo'], 'bar'); |
+ }); |
+ |
+ test('test_listenToOutput_error', () async { |
+ when(_process.stdout).thenReturn(_badMessage()); |
+ final future = serverWrapper.send('blahMethod', null); |
+ future.catchError((e) { |
+ expect(e, new isInstanceOf<ServerErrorMessage>()); |
+ final e2 = e as ServerErrorMessage; |
+ expect(e2.code, 'someErrorCode'); |
+ expect(e2.message, 'something went wrong'); |
+ expect(e2.stackTrace, 'some long stack trace'); |
+ }); |
+ serverWrapper.listenToOutput(); |
+ }); |
+ |
+ test('test_listenToOutput_event', () async { |
+ when(_process.stdout).thenReturn(_eventMessage()); |
+ |
+ void eventHandler(String event, Map<String, Object> params) { |
+ expect(event, 'fooEvent'); |
+ expect(params.length, 2); |
+ expect(params['foo'] as String, 'bar'); |
+ expect(params['baz'] as String, 'bang'); |
+ } |
+ |
+ serverWrapper.send('blahMethod', null); |
+ serverWrapper.listenToOutput(notificationProcessor: eventHandler); |
+ }); |
+} |
+ |
+Stream<List<int>> _goodMessage() async* { |
+ yield UTF8.encoder.convert('Observatory listening on foo bar\n'); |
+ final sampleJson = { |
+ 'id': '0', |
+ 'result': {'foo': 'bar'} |
+ }; |
+ yield UTF8.encoder.convert(JSON.encode(sampleJson)); |
+} |
+ |
+final _badErrorMessage = { |
+ 'code': 'someErrorCode', |
+ 'message': 'something went wrong', |
+ 'stackTrace': 'some long stack trace' |
+}; |
+ |
+Stream<List<int>> _badMessage() async* { |
+ yield UTF8.encoder.convert('Observatory listening on foo bar\n'); |
+ final sampleJson = {'id': '0', 'error': _badErrorMessage}; |
+ yield UTF8.encoder.convert(JSON.encode(sampleJson)); |
+} |
+ |
+Stream<List<int>> _eventMessage() async* { |
+ yield UTF8.encoder.convert('Observatory listening on foo bar\n'); |
+ final sampleJson = { |
+ 'event': 'fooEvent', |
+ 'params': {'foo': 'bar', 'baz': 'bang'} |
+ }; |
+ yield UTF8.encoder.convert(JSON.encode(sampleJson)); |
+} |
+ |
+class MockProcess extends Mock implements Process {} |