| 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 import 'dart:async'; | 5 import 'dart:async'; |
| 6 | 6 |
| 7 import 'package:analysis_server/protocol/protocol.dart'; | 7 import 'package:analysis_server/protocol/protocol.dart'; |
| 8 import 'package:analysis_server/protocol/protocol_generated.dart'; | 8 import 'package:analysis_server/protocol/protocol_generated.dart'; |
| 9 import 'package:analysis_server/src/analysis_server.dart'; | 9 import 'package:analysis_server/src/analysis_server.dart'; |
| 10 import 'package:analysis_server/src/constants.dart'; | 10 import 'package:analysis_server/src/constants.dart'; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 }); | 34 }); |
| 35 } | 35 } |
| 36 | 36 |
| 37 @reflectiveTest | 37 @reflectiveTest |
| 38 class AnalysisServerTest { | 38 class AnalysisServerTest { |
| 39 MockServerChannel channel; | 39 MockServerChannel channel; |
| 40 AnalysisServer server; | 40 AnalysisServer server; |
| 41 MemoryResourceProvider resourceProvider; | 41 MemoryResourceProvider resourceProvider; |
| 42 MockPackageMapProvider packageMapProvider; | 42 MockPackageMapProvider packageMapProvider; |
| 43 | 43 |
| 44 void processRequiredPlugins(ServerPlugin serverPlugin) { | |
| 45 List<Plugin> plugins = <Plugin>[]; | |
| 46 plugins.addAll(AnalysisEngine.instance.requiredPlugins); | |
| 47 plugins.add(serverPlugin); | |
| 48 | |
| 49 ExtensionManager manager = new ExtensionManager(); | |
| 50 manager.processPlugins(plugins); | |
| 51 } | |
| 52 | |
| 53 void setUp() { | |
| 54 ServerPlugin serverPlugin = new ServerPlugin(); | |
| 55 processRequiredPlugins(serverPlugin); | |
| 56 channel = new MockServerChannel(); | |
| 57 resourceProvider = new MemoryResourceProvider(); | |
| 58 // Create an SDK in the mock file system. | |
| 59 new MockSdk(resourceProvider: resourceProvider); | |
| 60 packageMapProvider = new MockPackageMapProvider(); | |
| 61 server = new AnalysisServer( | |
| 62 channel, | |
| 63 resourceProvider, | |
| 64 packageMapProvider, | |
| 65 null, | |
| 66 serverPlugin, | |
| 67 new AnalysisServerOptions(), | |
| 68 new DartSdkManager('/', false), | |
| 69 InstrumentationService.NULL_SERVICE, | |
| 70 rethrowExceptions: true); | |
| 71 } | |
| 72 | |
| 73 Future test_echo() { | |
| 74 server.handlers = [new EchoHandler()]; | |
| 75 var request = new Request('my22', 'echo'); | |
| 76 return channel.sendRequest(request).then((Response response) { | |
| 77 expect(response.id, equals('my22')); | |
| 78 expect(response.error, isNull); | |
| 79 }); | |
| 80 } | |
| 81 | |
| 82 /** | 44 /** |
| 83 * Test that having multiple analysis contexts analyze the same file doesn't | 45 * Test that having multiple analysis contexts analyze the same file doesn't |
| 84 * cause that file to receive duplicate notifications when it's modified. | 46 * cause that file to receive duplicate notifications when it's modified. |
| 85 */ | 47 */ |
| 86 Future test_no_duplicate_notifications() async { | 48 Future do_not_test_no_duplicate_notifications() async { |
| 87 // Subscribe to STATUS so we'll know when analysis is done. | 49 // Subscribe to STATUS so we'll know when analysis is done. |
| 88 server.serverServices = [ServerService.STATUS].toSet(); | 50 server.serverServices = [ServerService.STATUS].toSet(); |
| 89 resourceProvider.newFolder('/foo'); | 51 resourceProvider.newFolder('/foo'); |
| 90 resourceProvider.newFolder('/bar'); | 52 resourceProvider.newFolder('/bar'); |
| 91 resourceProvider.newFile('/foo/foo.dart', 'import "../bar/bar.dart";'); | 53 resourceProvider.newFile('/foo/foo.dart', 'import "../bar/bar.dart";'); |
| 92 File bar = resourceProvider.newFile('/bar/bar.dart', 'library bar;'); | 54 File bar = resourceProvider.newFile('/bar/bar.dart', 'library bar;'); |
| 93 server.setAnalysisRoots('0', ['/foo', '/bar'], [], {}); | 55 server.setAnalysisRoots('0', ['/foo', '/bar'], [], {}); |
| 94 Map<AnalysisService, Set<String>> subscriptions = | 56 Map<AnalysisService, Set<String>> subscriptions = |
| 95 <AnalysisService, Set<String>>{}; | 57 <AnalysisService, Set<String>>{}; |
| 96 for (AnalysisService service in AnalysisService.VALUES) { | 58 for (AnalysisService service in AnalysisService.VALUES) { |
| 97 subscriptions[service] = <String>[bar.path].toSet(); | 59 subscriptions[service] = <String>[bar.path].toSet(); |
| 98 } | 60 } |
| 61 // The following line causes the isolate to continue running even though the |
| 62 // test completes. |
| 99 server.setAnalysisSubscriptions(subscriptions); | 63 server.setAnalysisSubscriptions(subscriptions); |
| 100 await server.onAnalysisComplete; | 64 await server.onAnalysisComplete; |
| 101 expect(server.statusAnalyzing, isFalse); | 65 expect(server.statusAnalyzing, isFalse); |
| 102 channel.notificationsReceived.clear(); | 66 channel.notificationsReceived.clear(); |
| 103 server.updateContent( | 67 server.updateContent( |
| 104 '0', {bar.path: new AddContentOverlay('library bar; void f() {}')}); | 68 '0', {bar.path: new AddContentOverlay('library bar; void f() {}')}); |
| 105 await server.onAnalysisComplete; | 69 await server.onAnalysisComplete; |
| 106 expect(server.statusAnalyzing, isFalse); | 70 expect(server.statusAnalyzing, isFalse); |
| 107 expect(channel.notificationsReceived, isNotEmpty); | 71 expect(channel.notificationsReceived, isNotEmpty); |
| 108 Set<String> notificationTypesReceived = new Set<String>(); | 72 Set<String> notificationTypesReceived = new Set<String>(); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 119 break; | 83 break; |
| 120 default: | 84 default: |
| 121 if (!notificationTypesReceived.add(notificationType)) { | 85 if (!notificationTypesReceived.add(notificationType)) { |
| 122 fail('Notification type $notificationType received more than once'); | 86 fail('Notification type $notificationType received more than once'); |
| 123 } | 87 } |
| 124 break; | 88 break; |
| 125 } | 89 } |
| 126 } | 90 } |
| 127 } | 91 } |
| 128 | 92 |
| 93 void processRequiredPlugins(ServerPlugin serverPlugin) { |
| 94 List<Plugin> plugins = <Plugin>[]; |
| 95 plugins.addAll(AnalysisEngine.instance.requiredPlugins); |
| 96 plugins.add(serverPlugin); |
| 97 |
| 98 ExtensionManager manager = new ExtensionManager(); |
| 99 manager.processPlugins(plugins); |
| 100 } |
| 101 |
| 102 void setUp() { |
| 103 ServerPlugin serverPlugin = new ServerPlugin(); |
| 104 processRequiredPlugins(serverPlugin); |
| 105 channel = new MockServerChannel(); |
| 106 resourceProvider = new MemoryResourceProvider(); |
| 107 // Create an SDK in the mock file system. |
| 108 new MockSdk(resourceProvider: resourceProvider); |
| 109 packageMapProvider = new MockPackageMapProvider(); |
| 110 server = new AnalysisServer( |
| 111 channel, |
| 112 resourceProvider, |
| 113 packageMapProvider, |
| 114 null, |
| 115 serverPlugin, |
| 116 new AnalysisServerOptions(), |
| 117 new DartSdkManager('/', false), |
| 118 InstrumentationService.NULL_SERVICE, |
| 119 rethrowExceptions: true); |
| 120 } |
| 121 |
| 122 Future test_echo() { |
| 123 server.handlers = [new EchoHandler()]; |
| 124 var request = new Request('my22', 'echo'); |
| 125 return channel.sendRequest(request).then((Response response) { |
| 126 expect(response.id, equals('my22')); |
| 127 expect(response.error, isNull); |
| 128 }); |
| 129 } |
| 130 |
| 129 void test_rethrowExceptions() { | 131 void test_rethrowExceptions() { |
| 130 Exception exceptionToThrow = new Exception('test exception'); | 132 Exception exceptionToThrow = new Exception('test exception'); |
| 131 MockServerOperation operation = | 133 MockServerOperation operation = |
| 132 new MockServerOperation(ServerOperationPriority.ANALYSIS, (_) { | 134 new MockServerOperation(ServerOperationPriority.ANALYSIS, (_) { |
| 133 throw exceptionToThrow; | 135 throw exceptionToThrow; |
| 134 }); | 136 }); |
| 135 server.operationQueue.add(operation); | 137 server.operationQueue.add(operation); |
| 136 server.performOperationPending = true; | 138 server.performOperationPending = true; |
| 137 try { | 139 try { |
| 138 server.performOperation(); | 140 server.performOperation(); |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 239 | 241 |
| 240 class EchoHandler implements RequestHandler { | 242 class EchoHandler implements RequestHandler { |
| 241 @override | 243 @override |
| 242 Response handleRequest(Request request) { | 244 Response handleRequest(Request request) { |
| 243 if (request.method == 'echo') { | 245 if (request.method == 'echo') { |
| 244 return new Response(request.id, result: {'echo': true}); | 246 return new Response(request.id, result: {'echo': true}); |
| 245 } | 247 } |
| 246 return null; | 248 return null; |
| 247 } | 249 } |
| 248 } | 250 } |
| OLD | NEW |