Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Side by Side Diff: pkg/analysis_server/test/domain_analysis_test.dart

Issue 300553014: Implementation for 'analysis.updateContent' API. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698