| 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 'package:analysis_server/src/analysis_server.dart'; | 7 import 'package:analysis_server/src/analysis_server.dart'; |
| 8 import 'package:analysis_server/src/constants.dart'; | 8 import 'package:analysis_server/src/constants.dart'; |
| 9 import 'package:analysis_server/src/domain_server.dart'; | 9 import 'package:analysis_server/src/domain_server.dart'; |
| 10 import 'package:analysis_server/src/operation/operation.dart'; | 10 import 'package:analysis_server/src/operation/operation.dart'; |
| 11 import 'package:analysis_server/src/protocol.dart'; | 11 import 'package:analysis_server/src/protocol.dart'; |
| 12 import 'package:analyzer/file_system/memory_file_system.dart'; | 12 import 'package:analyzer/file_system/memory_file_system.dart'; |
| 13 import 'package:analyzer/src/generated/engine.dart'; | 13 import 'package:analyzer/src/generated/engine.dart'; |
| 14 import 'package:analyzer/src/generated/java_engine.dart'; | 14 import 'package:analyzer/src/generated/java_engine.dart'; |
| 15 import 'package:analyzer/src/generated/source.dart'; | 15 import 'package:analyzer/src/generated/source.dart'; |
| 16 import 'package:typed_mock/typed_mock.dart'; | 16 import 'package:typed_mock/typed_mock.dart'; |
| 17 import 'package:unittest/unittest.dart'; | 17 import 'package:unittest/unittest.dart'; |
| 18 | 18 |
| 19 import 'mock_sdk.dart'; |
| 19 import 'mocks.dart'; | 20 import 'mocks.dart'; |
| 20 import 'mock_sdk.dart'; | |
| 21 | 21 |
| 22 main() { | 22 main() { |
| 23 group('AnalysisServer', () { | 23 group('AnalysisServer', () { |
| 24 test('server.status notifications', () { | 24 test('server.status notifications', () { |
| 25 AnalysisServerTestHelper helper = new AnalysisServerTestHelper(); | 25 AnalysisServerTestHelper helper = new AnalysisServerTestHelper(); |
| 26 MockAnalysisContext context = new MockAnalysisContext('context'); | 26 MockAnalysisContext context = new MockAnalysisContext('context'); |
| 27 MockSource source = new MockSource('source'); | 27 MockSource source = new MockSource('source'); |
| 28 when(source.fullName).thenReturn('foo.dart'); | 28 when(source.fullName).thenReturn('foo.dart'); |
| 29 when(source.isInSystemLibrary).thenReturn(false); | 29 when(source.isInSystemLibrary).thenReturn(false); |
| 30 ChangeNoticeImpl notice = new ChangeNoticeImpl(source); | 30 ChangeNoticeImpl notice = new ChangeNoticeImpl(source); |
| 31 notice.setErrors([], new LineInfo([0])); | 31 notice.setErrors([], new LineInfo([0])); |
| 32 AnalysisResult firstResult = new AnalysisResult([notice], 0, '', 0); | 32 AnalysisResult firstResult = new AnalysisResult([notice], 0, '', 0); |
| 33 AnalysisResult lastResult = new AnalysisResult(null, 1, '', 1); | 33 AnalysisResult lastResult = new AnalysisResult(null, 1, '', 1); |
| 34 when(context.performAnalysisTask).thenReturnList( | 34 when( |
| 35 [firstResult, firstResult, firstResult, lastResult]); | 35 context.performAnalysisTask).thenReturnList( |
| 36 [firstResult, firstResult, firstResult, lastResult]); |
| 36 helper.server.serverServices.add(ServerService.STATUS); | 37 helper.server.serverServices.add(ServerService.STATUS); |
| 37 helper.server.schedulePerformAnalysisOperation(context); | 38 helper.server.schedulePerformAnalysisOperation(context); |
| 38 // Pump the event queue to make sure the server has finished any | 39 // Pump the event queue to make sure the server has finished any |
| 39 // analysis. | 40 // analysis. |
| 40 return pumpEventQueue().then((_) { | 41 return pumpEventQueue().then((_) { |
| 41 List<Notification> notifications = helper.channel.notificationsReceived; | 42 List<Notification> notifications = helper.channel.notificationsReceived; |
| 42 expect(notifications, isNot(isEmpty)); | 43 expect(notifications, isNot(isEmpty)); |
| 43 // expect at least one notification indicating analysis is in progress | 44 // expect at least one notification indicating analysis is in progress |
| 44 expect(notifications.any((Notification notification) { | 45 expect(notifications.any((Notification notification) { |
| 45 if (notification.event == SERVER_STATUS) { | 46 if (notification.event == SERVER_STATUS) { |
| 46 var params = new ServerStatusParams.fromNotification(notification); | 47 var params = new ServerStatusParams.fromNotification(notification); |
| 47 return params.analysis.isAnalyzing; | 48 return params.analysis.isAnalyzing; |
| 48 } | 49 } |
| 49 return false; | 50 return false; |
| 50 }), isTrue); | 51 }), isTrue); |
| 51 // the last notification should indicate that analysis is complete | 52 // the last notification should indicate that analysis is complete |
| 52 Notification notification = notifications[notifications.length - 1]; | 53 Notification notification = notifications[notifications.length - 1]; |
| 53 var params = new ServerStatusParams.fromNotification(notification); | 54 var params = new ServerStatusParams.fromNotification(notification); |
| 54 expect(params.analysis.isAnalyzing, isFalse); | 55 expect(params.analysis.isAnalyzing, isFalse); |
| 55 }); | 56 }); |
| 56 }); | 57 }); |
| 57 | 58 |
| 58 test('echo', () { | 59 test('echo', () { |
| 59 AnalysisServerTestHelper helper = new AnalysisServerTestHelper(); | 60 AnalysisServerTestHelper helper = new AnalysisServerTestHelper(); |
| 60 helper.server.handlers = [new EchoHandler()]; | 61 helper.server.handlers = [new EchoHandler()]; |
| 61 var request = new Request('my22', 'echo'); | 62 var request = new Request('my22', 'echo'); |
| 62 return helper.channel.sendRequest(request) | 63 return helper.channel.sendRequest(request).then((Response response) { |
| 63 .then((Response response) { | 64 expect(response.id, equals('my22')); |
| 64 expect(response.id, equals('my22')); | 65 expect(response.error, isNull); |
| 65 expect(response.error, isNull); | 66 }); |
| 66 }); | |
| 67 }); | 67 }); |
| 68 | 68 |
| 69 test('shutdown', () { | 69 test('shutdown', () { |
| 70 AnalysisServerTestHelper helper = new AnalysisServerTestHelper(); | 70 AnalysisServerTestHelper helper = new AnalysisServerTestHelper(); |
| 71 helper.server.handlers = [new ServerDomainHandler(helper.server)]; | 71 helper.server.handlers = [new ServerDomainHandler(helper.server)]; |
| 72 var request = new Request('my28', SERVER_SHUTDOWN); | 72 var request = new Request('my28', SERVER_SHUTDOWN); |
| 73 return helper.channel.sendRequest(request) | 73 return helper.channel.sendRequest(request).then((Response response) { |
| 74 .then((Response response) { | 74 expect(response.id, equals('my28')); |
| 75 expect(response.id, equals('my28')); | 75 expect(response.error, isNull); |
| 76 expect(response.error, isNull); | 76 }); |
| 77 }); | |
| 78 }); | 77 }); |
| 79 | 78 |
| 80 test('unknownRequest', () { | 79 test('unknownRequest', () { |
| 81 AnalysisServerTestHelper helper = new AnalysisServerTestHelper(); | 80 AnalysisServerTestHelper helper = new AnalysisServerTestHelper(); |
| 82 helper.server.handlers = [new EchoHandler()]; | 81 helper.server.handlers = [new EchoHandler()]; |
| 83 var request = new Request('my22', 'randomRequest'); | 82 var request = new Request('my22', 'randomRequest'); |
| 84 return helper.channel.sendRequest(request) | 83 return helper.channel.sendRequest(request).then((Response response) { |
| 85 .then((Response response) { | 84 expect(response.id, equals('my22')); |
| 86 expect(response.id, equals('my22')); | 85 expect(response.error, isNotNull); |
| 87 expect(response.error, isNotNull); | 86 }); |
| 88 }); | |
| 89 }); | 87 }); |
| 90 | 88 |
| 91 test('rethrow exceptions', () { | 89 test('rethrow exceptions', () { |
| 92 AnalysisServerTestHelper helper = new AnalysisServerTestHelper(); | 90 AnalysisServerTestHelper helper = new AnalysisServerTestHelper(); |
| 93 Exception exceptionToThrow = new Exception('test exception'); | 91 Exception exceptionToThrow = new Exception('test exception'); |
| 94 MockServerOperation operation = new MockServerOperation( | 92 MockServerOperation operation = |
| 95 ServerOperationPriority.ANALYSIS, (_) { throw exceptionToThrow; }); | 93 new MockServerOperation(ServerOperationPriority.ANALYSIS, (_) { |
| 94 throw exceptionToThrow; |
| 95 }); |
| 96 helper.server.operationQueue.add(operation); | 96 helper.server.operationQueue.add(operation); |
| 97 helper.server.performOperationPending = true; | 97 helper.server.performOperationPending = true; |
| 98 try { | 98 try { |
| 99 helper.server.performOperation(); | 99 helper.server.performOperation(); |
| 100 fail('exception not rethrown'); | 100 fail('exception not rethrown'); |
| 101 } on AnalysisException catch (exception) { | 101 } on AnalysisException catch (exception) { |
| 102 expect(exception.cause.exception, equals(exceptionToThrow)); | 102 expect(exception.cause.exception, equals(exceptionToThrow)); |
| 103 } | 103 } |
| 104 }); | 104 }); |
| 105 | 105 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 127 | 127 |
| 128 helper.server.setAnalysisRoots('0', ['/foo'], [], {}); | 128 helper.server.setAnalysisRoots('0', ['/foo'], [], {}); |
| 129 return pumpEventQueue().then((_) { | 129 return pumpEventQueue().then((_) { |
| 130 expect(wasAdded, isTrue); | 130 expect(wasAdded, isTrue); |
| 131 expect(wasChanged, isFalse); | 131 expect(wasChanged, isFalse); |
| 132 expect(wasRemoved, isFalse); | 132 expect(wasRemoved, isFalse); |
| 133 | 133 |
| 134 wasAdded = false; | 134 wasAdded = false; |
| 135 wasChanged = false; | 135 wasChanged = false; |
| 136 wasRemoved = false; | 136 wasRemoved = false; |
| 137 helper.server.setAnalysisRoots('0', ['/foo'], [], {'/foo':'/bar'}); | 137 helper.server.setAnalysisRoots('0', ['/foo'], [], { |
| 138 '/foo': '/bar' |
| 139 }); |
| 138 return pumpEventQueue(); | 140 return pumpEventQueue(); |
| 139 }).then((_) { | 141 }).then((_) { |
| 140 expect(wasAdded, isFalse); | 142 expect(wasAdded, isFalse); |
| 141 expect(wasChanged, isTrue); | 143 expect(wasChanged, isTrue); |
| 142 expect(wasRemoved, isFalse); | 144 expect(wasRemoved, isFalse); |
| 143 | 145 |
| 144 wasAdded = false; | 146 wasAdded = false; |
| 145 wasChanged = false; | 147 wasChanged = false; |
| 146 wasRemoved = false; | 148 wasRemoved = false; |
| 147 helper.server.setAnalysisRoots('0', [], [], {}); | 149 helper.server.setAnalysisRoots('0', [], [], {}); |
| 148 return pumpEventQueue(); | 150 return pumpEventQueue(); |
| 149 }).then((_) { | 151 }).then((_) { |
| 150 expect(wasAdded, isFalse); | 152 expect(wasAdded, isFalse); |
| 151 expect(wasChanged, isFalse); | 153 expect(wasChanged, isFalse); |
| 152 expect(wasRemoved, isTrue); | 154 expect(wasRemoved, isTrue); |
| 153 }); | 155 }); |
| 154 }); | 156 }); |
| 155 }); | 157 }); |
| 156 } | 158 } |
| 157 | 159 |
| 158 class AnalysisServerTestHelper { | 160 class AnalysisServerTestHelper { |
| 159 MockServerChannel channel; | 161 MockServerChannel channel; |
| 160 AnalysisServer server; | 162 AnalysisServer server; |
| 161 MemoryResourceProvider resourceProvider; | 163 MemoryResourceProvider resourceProvider; |
| 162 | 164 |
| 163 AnalysisServerTestHelper({bool rethrowExceptions: true}) { | 165 AnalysisServerTestHelper({bool rethrowExceptions: true}) { |
| 164 channel = new MockServerChannel(); | 166 channel = new MockServerChannel(); |
| 165 resourceProvider = new MemoryResourceProvider(); | 167 resourceProvider = new MemoryResourceProvider(); |
| 166 server = new AnalysisServer(channel, resourceProvider, | 168 server = new AnalysisServer( |
| 167 new MockPackageMapProvider(), null, new MockSdk(), | 169 channel, |
| 170 resourceProvider, |
| 171 new MockPackageMapProvider(), |
| 172 null, |
| 173 new MockSdk(), |
| 168 rethrowExceptions: rethrowExceptions); | 174 rethrowExceptions: rethrowExceptions); |
| 169 } | 175 } |
| 170 } | 176 } |
| 171 | 177 |
| 172 class EchoHandler implements RequestHandler { | 178 class EchoHandler implements RequestHandler { |
| 173 @override | 179 @override |
| 174 Response handleRequest(Request request) { | 180 Response handleRequest(Request request) { |
| 175 if (request.method == 'echo') { | 181 if (request.method == 'echo') { |
| 176 return new Response(request.id, result: {'echo': true}); | 182 return new Response(request.id, result: { |
| 183 'echo': true |
| 184 }); |
| 177 } | 185 } |
| 178 return null; | 186 return null; |
| 179 } | 187 } |
| 180 } | 188 } |
| OLD | NEW |