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.domain.analysis; | 5 library test.domain.analysis; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 | 8 |
9 import 'package:analysis_server/src/analysis_server.dart'; | 9 import 'package:analysis_server/src/analysis_server.dart'; |
10 import 'package:analysis_server/src/domain_analysis.dart'; | 10 import 'package:analysis_server/src/domain_analysis.dart'; |
(...skipping 12 matching lines...) Expand all Loading... | |
23 AnalysisDomainHandler handler; | 23 AnalysisDomainHandler handler; |
24 MemoryResourceProvider resourceProvider = new MemoryResourceProvider(); | 24 MemoryResourceProvider resourceProvider = new MemoryResourceProvider(); |
25 | 25 |
26 setUp(() { | 26 setUp(() { |
27 serverChannel = new MockServerChannel(); | 27 serverChannel = new MockServerChannel(); |
28 server = new AnalysisServer(serverChannel, resourceProvider); | 28 server = new AnalysisServer(serverChannel, resourceProvider); |
29 handler = new AnalysisDomainHandler(server); | 29 handler = new AnalysisDomainHandler(server); |
30 }); | 30 }); |
31 | 31 |
32 group('notification.errors', testNotificationErrors); | 32 group('notification.errors', testNotificationErrors); |
33 group('notification.errors', testUpdateContent); | |
Brian Wilkerson
2014/05/28 20:38:15
"errors" --> "updateContent"?
I still don't under
scheglov
2014/05/28 20:44:05
Done.
| |
33 | 34 |
34 group('AnalysisDomainHandler', () { | 35 group('AnalysisDomainHandler', () { |
35 test('getFixes', () { | 36 test('getFixes', () { |
36 var request = new Request('0', AnalysisDomainHandler.GET_FIXES_METHOD); | 37 var request = new Request('0', AnalysisDomainHandler.GET_FIXES_METHOD); |
37 request.setParameter(AnalysisDomainHandler.ERRORS_PARAM, []); | 38 request.setParameter(AnalysisDomainHandler.ERRORS_PARAM, []); |
38 var response = handler.handleRequest(request); | 39 var response = handler.handleRequest(request); |
39 // TODO(scheglov) implement | 40 // TODO(scheglov) implement |
40 expect(response, isNull); | 41 expect(response, isNull); |
41 }); | 42 }); |
42 | 43 |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
103 { | 104 { |
104 AnalysisService.HIGHLIGHTS : ['project/a.dart', 'project/b.dart'], | 105 AnalysisService.HIGHLIGHTS : ['project/a.dart', 'project/b.dart'], |
105 AnalysisService.NAVIGATION : ['project/c.dart'], | 106 AnalysisService.NAVIGATION : ['project/c.dart'], |
106 AnalysisService.OUTLINE : ['project/d.dart', 'project/e.dart'] | 107 AnalysisService.OUTLINE : ['project/d.dart', 'project/e.dart'] |
107 }); | 108 }); |
108 var response = handler.handleRequest(request); | 109 var response = handler.handleRequest(request); |
109 // TODO(scheglov) implement | 110 // TODO(scheglov) implement |
110 expect(response, isNull); | 111 expect(response, isNull); |
111 }); | 112 }); |
112 | 113 |
113 test('updateContent', () { | |
114 var request = new Request('0', AnalysisDomainHandler.UPDATE_CONTENT_METHOD ); | |
115 // request.setParameter( | |
116 // AnalysisDomainHandler.FILES_PARAM, | |
117 // {'project/test.dart' : null}); | |
118 var response = handler.handleRequest(request); | |
119 // TODO(scheglov) implement | |
120 expect(response, isNull); | |
121 }); | |
122 | |
123 test('updateOptions', () { | 114 test('updateOptions', () { |
124 var request = new Request('0', AnalysisDomainHandler.UPDATE_OPTIONS_METHOD ); | 115 var request = new Request('0', AnalysisDomainHandler.UPDATE_OPTIONS_METHOD ); |
125 request.setParameter( | 116 request.setParameter( |
126 AnalysisDomainHandler.OPTIONS_PARAM, | 117 AnalysisDomainHandler.OPTIONS_PARAM, |
127 { | 118 { |
128 'analyzeAngular' : true, | 119 'analyzeAngular' : true, |
129 'enableDeferredLoading': true, | 120 'enableDeferredLoading': true, |
130 'enableEnums': false | 121 'enableEnums': false |
131 }); | 122 }); |
132 var response = handler.handleRequest(request); | 123 var response = handler.handleRequest(request); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
206 * May be empty, but not `null`. | 197 * May be empty, but not `null`. |
207 */ | 198 */ |
208 List<AnalysisError> getTestErrors() { | 199 List<AnalysisError> getTestErrors() { |
209 return getErrors(testFile); | 200 return getErrors(testFile); |
210 } | 201 } |
211 | 202 |
212 /** | 203 /** |
213 * Creates a project with a single Dart file `/project/bin/test.dart` with | 204 * Creates a project with a single Dart file `/project/bin/test.dart` with |
214 * the given [code]. | 205 * the given [code]. |
215 */ | 206 */ |
216 createSingleFileProject(code) { | 207 void createSingleFileProject(code) { |
217 if (code is List<String>) { | 208 this.testCode = _getCodeString(code); |
218 code = code.join('\n'); | |
219 } | |
220 this.testCode = code; | |
221 resourceProvider.newFolder('/project'); | 209 resourceProvider.newFolder('/project'); |
222 resourceProvider.newFile('/project/pubspec.yaml', 'name: project'); | 210 resourceProvider.newFile('/project/pubspec.yaml', 'name: project'); |
223 resourceProvider.newFile(testFile, testCode); | 211 resourceProvider.newFile(testFile, testCode); |
224 Request request = new Request('0', AnalysisDomainHandler.SET_ANALYSIS_ROOTS_ METHOD); | 212 Request request = new Request('0', AnalysisDomainHandler.SET_ANALYSIS_ROOTS_ METHOD); |
225 request.setParameter(AnalysisDomainHandler.INCLUDED_PARAM, ['/project']); | 213 request.setParameter(AnalysisDomainHandler.INCLUDED_PARAM, ['/project']); |
226 request.setParameter(AnalysisDomainHandler.EXCLUDED_PARAM, []); | 214 request.setParameter(AnalysisDomainHandler.EXCLUDED_PARAM, []); |
215 handleSuccessfulRequest(request); | |
216 } | |
217 | |
218 /** | |
219 * Validates that the given [request] is handled successfully. | |
220 */ | |
221 void handleSuccessfulRequest(Request request) { | |
227 Response response = handler.handleRequest(request); | 222 Response response = handler.handleRequest(request); |
228 expect(response, isResponseSuccess('0')); | 223 expect(response, isResponseSuccess('0')); |
229 } | 224 } |
225 | |
226 /** | |
227 * Stops the associated server. | |
228 */ | |
229 void stopServer() { | |
230 server.done(); | |
231 } | |
232 | |
233 static String _getCodeString(code) { | |
234 if (code is List<String>) { | |
235 code = code.join('\n'); | |
236 } | |
237 return code as String; | |
238 } | |
230 } | 239 } |
231 | 240 |
232 | 241 |
233 testNotificationErrors() { | 242 testNotificationErrors() { |
234 AnalysisTestHelper helper; | 243 AnalysisTestHelper helper; |
235 | 244 |
236 setUp(() { | 245 setUp(() { |
237 helper = new AnalysisTestHelper(); | 246 helper = new AnalysisTestHelper(); |
238 }); | 247 }); |
239 | 248 |
(...skipping 19 matching lines...) Expand all Loading... | |
259 return helper.waitForTasksFinished().then((_) { | 268 return helper.waitForTasksFinished().then((_) { |
260 List<AnalysisError> errors = helper.getTestErrors(); | 269 List<AnalysisError> errors = helper.getTestErrors(); |
261 expect(errors, hasLength(1)); | 270 expect(errors, hasLength(1)); |
262 AnalysisError error = errors[0]; | 271 AnalysisError error = errors[0]; |
263 expect(error.errorCode, 'StaticWarningCode.UNDEFINED_IDENTIFIER'); | 272 expect(error.errorCode, 'StaticWarningCode.UNDEFINED_IDENTIFIER'); |
264 }); | 273 }); |
265 }); | 274 }); |
266 } | 275 } |
267 | 276 |
268 | 277 |
278 testUpdateContent() { | |
279 test('full content', () { | |
280 AnalysisTestHelper helper = new AnalysisTestHelper(); | |
281 helper.createSingleFileProject('// empty'); | |
282 return helper.waitForTasksFinished().then((_) { | |
283 // no errors initially | |
284 List<AnalysisError> errors = helper.getTestErrors(); | |
285 expect(errors, isEmpty); | |
286 // update code | |
287 { | |
288 Request request = new Request('0', AnalysisDomainHandler.UPDATE_CONTENT_ METHOD); | |
289 request.setParameter('files', | |
290 { | |
291 helper.testFile : { | |
292 AnalysisDomainHandler.CONTENT_PARAM : 'library lib' | |
293 } | |
294 }); | |
295 helper.handleSuccessfulRequest(request); | |
296 } | |
297 // wait, there is an error | |
298 helper.waitForTasksFinished().then((_) { | |
299 List<AnalysisError> errors = helper.getTestErrors(); | |
300 expect(errors, hasLength(1)); | |
301 }); | |
302 }); | |
303 }); | |
304 | |
305 test('incremental', () { | |
306 AnalysisTestHelper helper = new AnalysisTestHelper(); | |
307 helper.createSingleFileProject('library A;'); | |
308 return helper.waitForTasksFinished().then((_) { | |
309 // no errors initially | |
310 List<AnalysisError> errors = helper.getTestErrors(); | |
311 expect(errors, isEmpty); | |
312 // update code | |
313 { | |
314 Request request = new Request('0', AnalysisDomainHandler.UPDATE_CONTENT_ METHOD); | |
315 request.setParameter('files', | |
316 { | |
317 helper.testFile : { | |
318 AnalysisDomainHandler.CONTENT_PARAM : 'library lib', | |
319 AnalysisDomainHandler.OFFSET_PARAM : 'library '.length, | |
320 AnalysisDomainHandler.OLD_LENGTH_PARAM : 'A;'.length, | |
321 AnalysisDomainHandler.NEW_LENGTH_PARAM : 'lib'.length, | |
322 } | |
323 }); | |
324 helper.handleSuccessfulRequest(request); | |
325 } | |
326 // wait, there is an error | |
327 helper.waitForTasksFinished().then((_) { | |
328 List<AnalysisError> errors = helper.getTestErrors(); | |
329 expect(errors, hasLength(1)); | |
330 }); | |
331 }); | |
332 }); | |
333 } | |
334 | |
335 | |
269 class AnalysisError { | 336 class AnalysisError { |
270 final String file; | 337 final String file; |
271 final String errorCode; | 338 final String errorCode; |
272 final int offset; | 339 final int offset; |
273 final int length; | 340 final int length; |
274 final String message; | 341 final String message; |
275 final String correction; | 342 final String correction; |
276 AnalysisError(this.file, this.errorCode, this.offset, this.length, | 343 AnalysisError(this.file, this.errorCode, this.offset, this.length, |
277 this.message, this.correction); | 344 this.message, this.correction); |
278 | 345 |
279 @override | 346 @override |
280 String toString() { | 347 String toString() { |
281 return 'NotificationError(file=$file; errorCode=$errorCode; ' | 348 return 'NotificationError(file=$file; errorCode=$errorCode; ' |
282 'offset=$offset; length=$length; message=$message)'; | 349 'offset=$offset; length=$length; message=$message)'; |
283 } | 350 } |
284 } | 351 } |
285 | 352 |
286 | 353 |
287 AnalysisError jsonToAnalysisError(Map<String, Object> json) { | 354 AnalysisError jsonToAnalysisError(Map<String, Object> json) { |
288 return new AnalysisError( | 355 return new AnalysisError( |
289 json['file'], | 356 json['file'], |
290 json['errorCode'], | 357 json['errorCode'], |
291 json['offset'], | 358 json['offset'], |
292 json['length'], | 359 json['length'], |
293 json['message'], | 360 json['message'], |
294 json['correction']); | 361 json['correction']); |
295 } | 362 } |
OLD | NEW |