Chromium Code Reviews| 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 |