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 |