| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library test.analysis_server; | 5 library test.analysis_server; |
| 6 | 6 |
| 7 import 'dart:async'; | |
| 8 | |
| 9 import 'package:analyzer/src/generated/engine.dart'; | 7 import 'package:analyzer/src/generated/engine.dart'; |
| 10 import 'package:analyzer/src/generated/error.dart'; | 8 import 'package:analyzer/src/generated/error.dart'; |
| 11 import 'package:analyzer/src/generated/source.dart'; | 9 import 'package:analyzer/src/generated/source.dart'; |
| 12 import 'package:analysis_server/src/analysis_server.dart'; | 10 import 'package:analysis_server/src/analysis_server.dart'; |
| 13 import 'package:analysis_server/src/constants.dart'; | 11 import 'package:analysis_server/src/constants.dart'; |
| 14 import 'package:analysis_server/src/domain_server.dart'; | 12 import 'package:analysis_server/src/domain_server.dart'; |
| 15 import 'package:analysis_server/src/protocol.dart'; | 13 import 'package:analysis_server/src/protocol.dart'; |
| 16 import 'package:analysis_server/src/resource.dart'; | 14 import 'package:analysis_server/src/resource.dart'; |
| 17 import 'package:mock/mock.dart'; | 15 import 'package:mock/mock.dart'; |
| 18 import 'package:unittest/unittest.dart'; | 16 import 'package:unittest/unittest.dart'; |
| 19 | 17 |
| 20 import 'mocks.dart'; | 18 import 'mocks.dart'; |
| 21 | 19 |
| 22 class AnalysisServerTestHelper { | 20 class AnalysisServerTestHelper { |
| 23 MockServerChannel channel; | 21 MockServerChannel channel; |
| 24 AnalysisServer server; | 22 AnalysisServer server; |
| 25 MockAnalysisLogger logger; | 23 MockAnalysisLogger logger; |
| 26 | 24 |
| 27 AnalysisServerTestHelper() { | 25 AnalysisServerTestHelper() { |
| 28 channel = new MockServerChannel(); | 26 channel = new MockServerChannel(); |
| 29 server = new AnalysisServer(channel, PhysicalResourceProvider.INSTANCE); | 27 server = new AnalysisServer(channel, PhysicalResourceProvider.INSTANCE); |
| 30 logger = new MockAnalysisLogger(); | 28 logger = new MockAnalysisLogger(); |
| 31 AnalysisEngine.instance.logger = logger; | 29 AnalysisEngine.instance.logger = logger; |
| 32 } | 30 } |
| 33 } | 31 } |
| 34 | 32 |
| 35 main() { | 33 main() { |
| 36 group('AnalysisServer', () { | 34 group('AnalysisServer', () { |
| 37 test('addContextToWorkQueue_whenNotRunning', () { | |
| 38 AnalysisServerTestHelper helper = new AnalysisServerTestHelper(); | |
| 39 helper.server.running = false; | |
| 40 MockAnalysisContext context = new MockAnalysisContext(); | |
| 41 helper.server.addContextToWorkQueue(context); | |
| 42 // Pump the event queue to make sure the server doesn't try to do any | |
| 43 // analysis. | |
| 44 return pumpEventQueue(); | |
| 45 }); | |
| 46 | |
| 47 test('server.status notifications', () { | 35 test('server.status notifications', () { |
| 48 AnalysisServerTestHelper helper = new AnalysisServerTestHelper(); | 36 AnalysisServerTestHelper helper = new AnalysisServerTestHelper(); |
| 49 MockAnalysisContext context = new MockAnalysisContext(); | 37 MockAnalysisContext context = new MockAnalysisContext(); |
| 50 MockSource source = new MockSource(); | 38 MockSource source = new MockSource(); |
| 51 source.when(callsTo('get fullName')).alwaysReturn('foo.dart'); | 39 source.when(callsTo('get fullName')).alwaysReturn('foo.dart'); |
| 52 source.when(callsTo('get isInSystemLibrary')).alwaysReturn(false); | 40 source.when(callsTo('get isInSystemLibrary')).alwaysReturn(false); |
| 53 ChangeNoticeImpl notice = new ChangeNoticeImpl(source); | 41 ChangeNoticeImpl notice = new ChangeNoticeImpl(source); |
| 54 notice.setErrors([], new LineInfo([0])); | 42 notice.setErrors([], new LineInfo([0])); |
| 55 AnalysisResult firstResult = new AnalysisResult([notice], 0, '', 0); | 43 AnalysisResult firstResult = new AnalysisResult([notice], 0, '', 0); |
| 56 AnalysisResult lastResult = new AnalysisResult(null, 1, '', 1); | 44 AnalysisResult lastResult = new AnalysisResult(null, 1, '', 1); |
| 57 context.when(callsTo("performAnalysisTask")) | 45 context.when(callsTo("performAnalysisTask")) |
| 58 ..thenReturn(firstResult, 3) | 46 ..thenReturn(firstResult, 3) |
| 59 ..thenReturn(lastResult); | 47 ..thenReturn(lastResult); |
| 60 helper.server.addContextToWorkQueue(context); | 48 helper.server.schedulePerformAnalysisOperation(context); |
| 61 // Pump the event queue to make sure the server has finished any | 49 // Pump the event queue to make sure the server has finished any |
| 62 // analysis. | 50 // analysis. |
| 63 return pumpEventQueue().then((_) { | 51 return pumpEventQueue().then((_) { |
| 64 List<Notification> notifications = helper.channel.notificationsReceived; | 52 List<Notification> notifications = helper.channel.notificationsReceived; |
| 65 expect(notifications.length, equals(9)); | 53 expect(notifications, isNot(isEmpty)); |
| 66 Notification notification = notifications[notifications.length - 1]; | 54 Notification notification = notifications[notifications.length - 1]; |
| 67 Map analysisStatus = notification.params['analysis']; | 55 Map analysisStatus = notification.params['analysis']; |
| 68 expect(analysisStatus['analyzing'], isFalse); | 56 expect(analysisStatus['analyzing'], isFalse); |
| 69 }); | 57 }); |
| 70 }); | 58 }); |
| 71 | 59 |
| 72 test('echo', () { | 60 test('echo', () { |
| 73 AnalysisServerTestHelper helper = new AnalysisServerTestHelper(); | 61 AnalysisServerTestHelper helper = new AnalysisServerTestHelper(); |
| 74 helper.server.handlers = [new EchoHandler()]; | 62 helper.server.handlers = [new EchoHandler()]; |
| 75 var request = new Request('my22', 'echo'); | 63 var request = new Request('my22', 'echo'); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 // %s formatting in its correction string. But no such errors or hints | 104 // %s formatting in its correction string. But no such errors or hints |
| 117 // currently exist! | 105 // currently exist! |
| 118 HintCode errorCode = HintCode.MISSING_RETURN; | 106 HintCode errorCode = HintCode.MISSING_RETURN; |
| 119 | 107 |
| 120 AnalysisError analysisError = | 108 AnalysisError analysisError = |
| 121 new AnalysisError.con2(source, 10, 5, errorCode, ['int']); | 109 new AnalysisError.con2(source, 10, 5, errorCode, ['int']); |
| 122 Map<String, Object> json = AnalysisServer.errorToJson(analysisError); | 110 Map<String, Object> json = AnalysisServer.errorToJson(analysisError); |
| 123 expect(json['correction'], equals(errorCode.correction)); | 111 expect(json['correction'], equals(errorCode.correction)); |
| 124 }); | 112 }); |
| 125 | 113 |
| 126 test('performTask_whenNotRunning', () { | |
| 127 AnalysisServerTestHelper helper = new AnalysisServerTestHelper(); | |
| 128 // If the server is shut down while there is analysis still pending, | |
| 129 // performTask() should notice that the server is no longer running and | |
| 130 // do no analysis. | |
| 131 MockAnalysisContext context = new MockAnalysisContext(); | |
| 132 helper.server.addContextToWorkQueue(context); | |
| 133 helper.server.running = false; | |
| 134 // Pump the event queue to make sure the server doesn't try to do any | |
| 135 // analysis. | |
| 136 return pumpEventQueue(); | |
| 137 }); | |
| 138 | |
| 139 test('shutdown', () { | 114 test('shutdown', () { |
| 140 AnalysisServerTestHelper helper = new AnalysisServerTestHelper(); | 115 AnalysisServerTestHelper helper = new AnalysisServerTestHelper(); |
| 141 helper.server.handlers = [new ServerDomainHandler(helper.server)]; | 116 helper.server.handlers = [new ServerDomainHandler(helper.server)]; |
| 142 var request = new Request('my28', METHOD_SHUTDOWN); | 117 var request = new Request('my28', METHOD_SHUTDOWN); |
| 143 return helper.channel.sendRequest(request) | 118 return helper.channel.sendRequest(request) |
| 144 .then((Response response) { | 119 .then((Response response) { |
| 145 expect(response.id, equals('my28')); | 120 expect(response.id, equals('my28')); |
| 146 expect(response.error, isNull); | 121 expect(response.error, isNull); |
| 147 }); | 122 }); |
| 148 }); | 123 }); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 164 @override | 139 @override |
| 165 Response handleRequest(Request request) { | 140 Response handleRequest(Request request) { |
| 166 if (request.method == 'echo') { | 141 if (request.method == 'echo') { |
| 167 var response = new Response(request.id); | 142 var response = new Response(request.id); |
| 168 response.setResult('echo', true); | 143 response.setResult('echo', true); |
| 169 return response; | 144 return response; |
| 170 } | 145 } |
| 171 return null; | 146 return null; |
| 172 } | 147 } |
| 173 } | 148 } |
| OLD | NEW |