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

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

Issue 1278033006: tests for keyword/identifier replacementOffset - asserts fixes #23906 and fixes #23947 (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 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
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.completion; 5 library test.domain.completion;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:analysis_server/completion/completion_core.dart' 9 import 'package:analysis_server/completion/completion_core.dart'
10 show CompletionRequest, CompletionResult; 10 show CompletionRequest, CompletionResult;
11 import 'package:analysis_server/src/analysis_server.dart'; 11 import 'package:analysis_server/src/analysis_server.dart';
12 import 'package:analysis_server/src/channel/channel.dart'; 12 import 'package:analysis_server/src/channel/channel.dart';
13 import 'package:analysis_server/src/constants.dart'; 13 import 'package:analysis_server/src/constants.dart';
14 import 'package:analysis_server/src/context_manager.dart'; 14 import 'package:analysis_server/src/context_manager.dart';
15 import 'package:analysis_server/src/domain_analysis.dart'; 15 import 'package:analysis_server/src/domain_analysis.dart';
16 import 'package:analysis_server/src/domain_completion.dart'; 16 import 'package:analysis_server/src/domain_completion.dart';
17 import 'package:analysis_server/src/plugin/server_plugin.dart'; 17 import 'package:analysis_server/src/plugin/server_plugin.dart';
18 import 'package:analysis_server/src/protocol.dart'; 18 import 'package:analysis_server/src/protocol.dart';
19 import 'package:analysis_server/src/services/completion/completion_manager.dart' ; 19 import 'package:analysis_server/src/services/completion/completion_manager.dart' ;
20 import 'package:analysis_server/src/services/completion/dart_completion_manager. dart'; 20 import 'package:analysis_server/src/services/completion/dart_completion_manager. dart';
21 import 'package:analysis_server/src/services/index/index.dart' show Index; 21 import 'package:analysis_server/src/services/index/index.dart' show Index;
22 import 'package:analysis_server/src/services/index/local_memory_index.dart'; 22 import 'package:analysis_server/src/services/index/local_memory_index.dart';
23 import 'package:analysis_server/src/services/search/search_engine.dart'; 23 import 'package:analysis_server/src/services/search/search_engine.dart';
24 import 'package:analyzer/file_system/file_system.dart'; 24 import 'package:analyzer/file_system/file_system.dart';
25 import 'package:analyzer/instrumentation/instrumentation.dart'; 25 import 'package:analyzer/instrumentation/instrumentation.dart';
26 import 'package:analyzer/source/pub_package_map_provider.dart'; 26 import 'package:analyzer/source/pub_package_map_provider.dart';
27 import 'package:analyzer/src/generated/ast.dart';
27 import 'package:analyzer/src/generated/engine.dart'; 28 import 'package:analyzer/src/generated/engine.dart';
28 import 'package:analyzer/src/generated/sdk.dart'; 29 import 'package:analyzer/src/generated/sdk.dart';
29 import 'package:analyzer/src/generated/source.dart'; 30 import 'package:analyzer/src/generated/source.dart';
30 import 'package:plugin/manager.dart'; 31 import 'package:plugin/manager.dart';
31 import 'package:test_reflective_loader/test_reflective_loader.dart'; 32 import 'package:test_reflective_loader/test_reflective_loader.dart';
32 import 'package:unittest/unittest.dart'; 33 import 'package:unittest/unittest.dart';
33 34
34 import 'analysis_abstract.dart'; 35 import 'analysis_abstract.dart';
35 import 'mock_sdk.dart'; 36 import 'mock_sdk.dart';
36 import 'mocks.dart'; 37 import 'mocks.dart';
(...skipping 11 matching lines...) Expand all
48 AnalysisDomainHandler analysisDomain; 49 AnalysisDomainHandler analysisDomain;
49 Test_CompletionDomainHandler completionDomain; 50 Test_CompletionDomainHandler completionDomain;
50 Request request; 51 Request request;
51 int requestCount = 0; 52 int requestCount = 0;
52 String testFile2 = '/project/bin/test2.dart'; 53 String testFile2 = '/project/bin/test2.dart';
53 54
54 AnalysisServer createAnalysisServer(Index index) { 55 AnalysisServer createAnalysisServer(Index index) {
55 ExtensionManager manager = new ExtensionManager(); 56 ExtensionManager manager = new ExtensionManager();
56 ServerPlugin serverPlugin = new ServerPlugin(); 57 ServerPlugin serverPlugin = new ServerPlugin();
57 manager.processPlugins([serverPlugin]); 58 manager.processPlugins([serverPlugin]);
58 return new Test_AnalysisServer( 59 return new Test_AnalysisServer(super.serverChannel, super.resourceProvider,
59 super.serverChannel, 60 super.packageMapProvider, index, serverPlugin,
60 super.resourceProvider, 61 new AnalysisServerOptions(), new MockSdk(),
61 super.packageMapProvider,
62 index,
63 serverPlugin,
64 new AnalysisServerOptions(),
65 new MockSdk(),
66 InstrumentationService.NULL_SERVICE); 62 InstrumentationService.NULL_SERVICE);
67 } 63 }
68 64
69 @override 65 @override
70 Index createIndex() { 66 Index createIndex() {
71 return createLocalMemoryIndex(); 67 return createLocalMemoryIndex();
72 } 68 }
73 69
74 void sendRequest(String path) { 70 void sendRequest(String path) {
75 String id = (++requestCount).toString(); 71 String id = (++requestCount).toString();
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 257
262 @reflectiveTest 258 @reflectiveTest
263 class CompletionTest extends AbstractAnalysisTest { 259 class CompletionTest extends AbstractAnalysisTest {
264 String completionId; 260 String completionId;
265 int completionOffset; 261 int completionOffset;
266 int replacementOffset; 262 int replacementOffset;
267 int replacementLength; 263 int replacementLength;
268 List<CompletionSuggestion> suggestions = []; 264 List<CompletionSuggestion> suggestions = [];
269 bool suggestionsDone = false; 265 bool suggestionsDone = false;
270 266
271 String addTestFile(String content, {offset}) { 267 String addTestFile(String content, {int offset}) {
272 completionOffset = content.indexOf('^'); 268 completionOffset = content.indexOf('^');
273 if (offset != null) { 269 if (offset != null) {
274 expect(completionOffset, -1, reason: 'cannot supply offset and ^'); 270 expect(completionOffset, -1, reason: 'cannot supply offset and ^');
275 completionOffset = offset; 271 completionOffset = offset;
276 return super.addTestFile(content); 272 return super.addTestFile(content);
277 } 273 }
278 expect(completionOffset, isNot(equals(-1)), reason: 'missing ^'); 274 expect(completionOffset, isNot(equals(-1)), reason: 'missing ^');
279 int nextOffset = content.indexOf('^', completionOffset + 1); 275 int nextOffset = content.indexOf('^', completionOffset + 1);
280 expect(nextOffset, equals(-1), reason: 'too many ^'); 276 expect(nextOffset, equals(-1), reason: 'too many ^');
281 return super.addTestFile(content.substring(0, completionOffset) + 277 return super.addTestFile(content.substring(0, completionOffset) +
282 content.substring(completionOffset + 1)); 278 content.substring(completionOffset + 1));
283 } 279 }
284 280
285 void assertHasResult(CompletionSuggestionKind kind, String completion, 281 void assertHasResult(CompletionSuggestionKind kind, String completion,
286 [int relevance = DART_RELEVANCE_DEFAULT, 282 {int relevance: DART_RELEVANCE_DEFAULT,
287 bool isDeprecated = false, 283 bool isDeprecated: false,
288 bool isPotential = false]) { 284 bool isPotential: false,
285 int selectionOffset}) {
289 var cs; 286 var cs;
290 suggestions.forEach((s) { 287 suggestions.forEach((s) {
291 if (s.completion == completion) { 288 if (s.completion == completion) {
292 if (cs == null) { 289 if (cs == null) {
293 cs = s; 290 cs = s;
294 } else { 291 } else {
295 fail('expected exactly one $completion but found > 1'); 292 fail('expected exactly one $completion but found > 1');
296 } 293 }
297 } 294 }
298 }); 295 });
299 if (cs == null) { 296 if (cs == null) {
300 var completions = suggestions.map((s) => s.completion).toList(); 297 var completions = suggestions.map((s) => s.completion).toList();
301 fail('expected "$completion" but found\n $completions'); 298 fail('expected "$completion" but found\n $completions');
302 } 299 }
303 expect(cs.kind, equals(kind)); 300 expect(cs.kind, equals(kind));
304 expect(cs.relevance, equals(relevance)); 301 expect(cs.relevance, equals(relevance));
305 expect(cs.selectionOffset, equals(completion.length)); 302 expect(cs.selectionOffset, selectionOffset ?? completion.length);
306 expect(cs.selectionLength, equals(0)); 303 expect(cs.selectionLength, equals(0));
307 expect(cs.isDeprecated, equals(isDeprecated)); 304 expect(cs.isDeprecated, equals(isDeprecated));
308 expect(cs.isPotential, equals(isPotential)); 305 expect(cs.isPotential, equals(isPotential));
309 } 306 }
310 307
311 void assertNoResult(String completion) { 308 void assertNoResult(String completion) {
312 if (suggestions.any((cs) => cs.completion == completion)) { 309 if (suggestions.any((cs) => cs.completion == completion)) {
313 fail('did not expect completion: $completion'); 310 fail('did not expect completion: $completion');
314 } 311 }
315 } 312 }
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 '''); 376 ''');
380 return getSuggestions().then((_) { 377 return getSuggestions().then((_) {
381 expect(replacementOffset, equals(completionOffset)); 378 expect(replacementOffset, equals(completionOffset));
382 expect(replacementLength, equals(0)); 379 expect(replacementLength, equals(0));
383 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); 380 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object');
384 assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement'); 381 assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement');
385 assertNoResult('test'); 382 assertNoResult('test');
386 }); 383 });
387 } 384 }
388 385
386 test_imports_incremental() async {
387 addTestFile('''library foo;
388 e^
389 import "dart:async";
390 import "package:foo/foo.dart";
391 class foo { }''');
392 await waitForTasksFinished();
393 server.updateContent('uc1', {testFile: new AddContentOverlay(testCode)});
394 server.updateContent('uc2', {
395 testFile:
396 new ChangeContentOverlay([new SourceEdit(completionOffset, 0, 'xp')])
397 });
398 completionOffset += 2;
399 await getSuggestions();
400 expect(replacementOffset, completionOffset - 3);
401 expect(replacementLength, 3);
402 String completion = 'export';
Brian Wilkerson 2015/08/12 13:59:25 (I'd actually find it easier to read without the l
danrubel 2015/08/15 19:17:16 Done.
403 assertHasResult(CompletionSuggestionKind.KEYWORD, completion,
404 relevance: DART_RELEVANCE_HIGH);
Brian Wilkerson 2015/08/12 13:59:25 Should we also test for the absence of invalid sug
danrubel 2015/08/15 19:17:16 Good point. Added.
405 }
406
407 test_imports_partial() async {
408 addTestFile('''^
409 import "package:foo/foo.dart";
410 import "package:bar/bar.dart";
411 class Baz { }''');
412
413 // Wait for analysis then edit the content
414 await waitForTasksFinished();
415 String revisedContent = testCode.substring(0, completionOffset) +
416 'i' +
417 testCode.substring(completionOffset);
418 ++completionOffset;
419 server.handleRequest(new AnalysisUpdateContentParams(
420 {testFile: new AddContentOverlay(revisedContent)}).toRequest('add1'));
421
422 // Request code completion immediately after edit
423 Response response = handleSuccessfulRequest(new CompletionGetSuggestionsPara ms(
424 testFile, completionOffset).toRequest('0'));
425 completionId = response.id;
426 assertValidId(completionId);
427 await waitForTasksFinished();
428 expect(replacementOffset, completionOffset - 1);
429 expect(replacementLength, 1);
430 String completion = 'import';
431 assertHasResult(CompletionSuggestionKind.KEYWORD, completion,
432 relevance: DART_RELEVANCE_HIGH);
Brian Wilkerson 2015/08/12 13:59:25 We should also test for 'export', 'library' and 'p
danrubel 2015/08/15 19:17:16 Done.
433 }
434
389 test_imports_prefixed() { 435 test_imports_prefixed() {
390 addTestFile(''' 436 addTestFile('''
391 import 'dart:html' as foo; 437 import 'dart:html' as foo;
392 main() {^} 438 main() {^}
393 '''); 439 ''');
394 return getSuggestions().then((_) { 440 return getSuggestions().then((_) {
395 expect(replacementOffset, equals(completionOffset)); 441 expect(replacementOffset, equals(completionOffset));
396 expect(replacementLength, equals(0)); 442 expect(replacementLength, equals(0));
397 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); 443 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object');
398 assertHasResult(CompletionSuggestionKind.INVOCATION, 'foo'); 444 assertHasResult(CompletionSuggestionKind.INVOCATION, 'foo');
(...skipping 18 matching lines...) Expand all
417 expect(replacementLength, equals(0)); 463 expect(replacementLength, equals(0));
418 assertHasResult(CompletionSuggestionKind.INVOCATION, 'b'); 464 assertHasResult(CompletionSuggestionKind.INVOCATION, 'b');
419 }); 465 });
420 } 466 }
421 467
422 test_keyword() { 468 test_keyword() {
423 addTestFile('library A; cl^'); 469 addTestFile('library A; cl^');
424 return getSuggestions().then((_) { 470 return getSuggestions().then((_) {
425 expect(replacementOffset, equals(completionOffset - 2)); 471 expect(replacementOffset, equals(completionOffset - 2));
426 expect(replacementLength, equals(2)); 472 expect(replacementLength, equals(2));
427 assertHasResult( 473 assertHasResult(CompletionSuggestionKind.KEYWORD, 'export',
428 CompletionSuggestionKind.KEYWORD, 'export', DART_RELEVANCE_HIGH); 474 relevance: DART_RELEVANCE_HIGH);
Brian Wilkerson 2015/08/12 13:59:25 I think we're suggesting 'export' at this point so
danrubel 2015/08/15 19:17:16 That is correct.
429 assertHasResult( 475 assertHasResult(CompletionSuggestionKind.KEYWORD, 'class',
430 CompletionSuggestionKind.KEYWORD, 'class', DART_RELEVANCE_HIGH); 476 relevance: DART_RELEVANCE_HIGH);
431 }); 477 });
432 } 478 }
433 479
434 test_local_named_constructor() { 480 test_local_named_constructor() {
435 addTestFile('class A {A.c(); x() {new A.^}}'); 481 addTestFile('class A {A.c(); x() {new A.^}}');
436 return getSuggestions().then((_) { 482 return getSuggestions().then((_) {
437 expect(replacementOffset, equals(completionOffset)); 483 expect(replacementOffset, equals(completionOffset));
438 expect(replacementLength, equals(0)); 484 expect(replacementLength, equals(0));
439 assertHasResult(CompletionSuggestionKind.INVOCATION, 'c'); 485 assertHasResult(CompletionSuggestionKind.INVOCATION, 'c');
440 assertNoResult('A'); 486 assertNoResult('A');
441 }); 487 });
442 } 488 }
443 489
444 test_locals() { 490 test_locals() {
445 addTestFile('class A {var a; x() {var b;^}} class DateTime { }'); 491 addTestFile('class A {var a; x() {var b;^}} class DateTime { }');
446 return getSuggestions().then((_) { 492 return getSuggestions().then((_) {
447 expect(replacementOffset, equals(completionOffset)); 493 expect(replacementOffset, equals(completionOffset));
448 expect(replacementLength, equals(0)); 494 expect(replacementLength, equals(0));
449 assertHasResult(CompletionSuggestionKind.INVOCATION, 'A'); 495 assertHasResult(CompletionSuggestionKind.INVOCATION, 'A');
450 assertHasResult( 496 assertHasResult(CompletionSuggestionKind.INVOCATION, 'a',
451 CompletionSuggestionKind.INVOCATION, 'a', DART_RELEVANCE_LOCAL_FIELD); 497 relevance: DART_RELEVANCE_LOCAL_FIELD);
452 assertHasResult(CompletionSuggestionKind.INVOCATION, 'b', 498 assertHasResult(CompletionSuggestionKind.INVOCATION, 'b',
453 DART_RELEVANCE_LOCAL_VARIABLE); 499 relevance: DART_RELEVANCE_LOCAL_VARIABLE);
454 assertHasResult(CompletionSuggestionKind.INVOCATION, 'x', 500 assertHasResult(CompletionSuggestionKind.INVOCATION, 'x',
455 DART_RELEVANCE_LOCAL_METHOD); 501 relevance: DART_RELEVANCE_LOCAL_METHOD);
456 assertHasResult(CompletionSuggestionKind.INVOCATION, 'DateTime'); 502 assertHasResult(CompletionSuggestionKind.INVOCATION, 'DateTime');
457 }); 503 });
458 } 504 }
459 505
460 test_offset_past_eof() { 506 test_offset_past_eof() {
461 addTestFile('main() { }', offset: 300); 507 addTestFile('main() { }', offset: 300);
462 return getSuggestions().then((_) { 508 return getSuggestions().then((_) {
463 expect(replacementOffset, equals(300)); 509 expect(replacementOffset, equals(300));
464 expect(replacementLength, equals(0)); 510 expect(replacementLength, equals(0));
465 expect(suggestionsDone, true); 511 expect(suggestionsDone, true);
466 expect(suggestions.length, 0); 512 expect(suggestions.length, 0);
467 }); 513 });
468 } 514 }
469 515
470 test_overrides() { 516 test_overrides() {
471 addFile('/libA.dart', 'class A {m() {}}'); 517 addFile('/libA.dart', 'class A {m() {}}');
472 addTestFile(''' 518 addTestFile('''
473 import '/libA.dart'; 519 import '/libA.dart';
474 class B extends A {m() {^}} 520 class B extends A {m() {^}}
475 '''); 521 ''');
476 return getSuggestions().then((_) { 522 return getSuggestions().then((_) {
477 expect(replacementOffset, equals(completionOffset)); 523 expect(replacementOffset, equals(completionOffset));
478 expect(replacementLength, equals(0)); 524 expect(replacementLength, equals(0));
479 assertHasResult(CompletionSuggestionKind.INVOCATION, 'm', 525 assertHasResult(CompletionSuggestionKind.INVOCATION, 'm',
480 DART_RELEVANCE_LOCAL_METHOD); 526 relevance: DART_RELEVANCE_LOCAL_METHOD);
481 }); 527 });
482 } 528 }
483 529
484 test_partFile() { 530 test_partFile() {
485 addFile( 531 addFile('/project/bin/testA.dart', '''
486 '/project/bin/testA.dart',
487 '''
488 library libA; 532 library libA;
489 part "$testFile"; 533 part "$testFile";
490 import 'dart:html'; 534 import 'dart:html';
491 class A { } 535 class A { }
492 '''); 536 ''');
493 addTestFile(''' 537 addTestFile('''
494 part of libA; 538 part of libA;
495 main() {^}'''); 539 main() {^}''');
496 return getSuggestions().then((_) { 540 return getSuggestions().then((_) {
497 expect(replacementOffset, equals(completionOffset)); 541 expect(replacementOffset, equals(completionOffset));
498 expect(replacementLength, equals(0)); 542 expect(replacementLength, equals(0));
499 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); 543 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object');
500 assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement'); 544 assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement');
501 assertHasResult(CompletionSuggestionKind.INVOCATION, 'A'); 545 assertHasResult(CompletionSuggestionKind.INVOCATION, 'A');
502 assertNoResult('test'); 546 assertNoResult('test');
503 }); 547 });
504 } 548 }
505 549
506 test_partFile2() { 550 test_partFile2() {
507 addFile( 551 addFile('/testA.dart', '''
508 '/testA.dart',
509 '''
510 part of libA; 552 part of libA;
511 class A { }'''); 553 class A { }''');
512 addTestFile(''' 554 addTestFile('''
513 library libA; 555 library libA;
514 part "/testA.dart"; 556 part "/testA.dart";
515 import 'dart:html'; 557 import 'dart:html';
516 main() {^} 558 main() {^}
517 '''); 559 ''');
518 return getSuggestions().then((_) { 560 return getSuggestions().then((_) {
519 expect(replacementOffset, equals(completionOffset)); 561 expect(replacementOffset, equals(completionOffset));
(...skipping 25 matching lines...) Expand all
545 typedef foo(); 587 typedef foo();
546 var test = ''; 588 var test = '';
547 main() {tes^t} 589 main() {tes^t}
548 '''); 590 ''');
549 return getSuggestions().then((_) { 591 return getSuggestions().then((_) {
550 expect(replacementOffset, equals(completionOffset - 3)); 592 expect(replacementOffset, equals(completionOffset - 3));
551 expect(replacementLength, equals(4)); 593 expect(replacementLength, equals(4));
552 // Suggestions based upon imported elements are partially filtered 594 // Suggestions based upon imported elements are partially filtered
553 //assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); 595 //assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object');
554 assertHasResult(CompletionSuggestionKind.INVOCATION, 'test', 596 assertHasResult(CompletionSuggestionKind.INVOCATION, 'test',
555 DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE); 597 relevance: DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE);
556 assertNoResult('HtmlElement'); 598 assertNoResult('HtmlElement');
557 }); 599 });
558 } 600 }
559 } 601 }
560 602
561 class MockCache extends CompletionCache { 603 class MockCache extends CompletionCache {
562 MockCache(AnalysisContext context, Source source) : super(context, source); 604 MockCache(AnalysisContext context, Source source) : super(context, source);
563 } 605 }
564 606
565 class MockCompletionManager implements CompletionManager { 607 class MockCompletionManager implements CompletionManager {
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 ++cancelCount; 701 ++cancelCount;
660 return new Future.value(true); 702 return new Future.value(true);
661 } 703 }
662 704
663 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); 705 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
664 } 706 }
665 707
666 class Test_AnalysisServer extends AnalysisServer { 708 class Test_AnalysisServer extends AnalysisServer {
667 final MockContext mockContext = new MockContext(); 709 final MockContext mockContext = new MockContext();
668 710
669 Test_AnalysisServer( 711 Test_AnalysisServer(ServerCommunicationChannel channel,
670 ServerCommunicationChannel channel,
671 ResourceProvider resourceProvider, 712 ResourceProvider resourceProvider,
672 PubPackageMapProvider packageMapProvider, 713 PubPackageMapProvider packageMapProvider, Index index,
673 Index index, 714 ServerPlugin serverPlugin, AnalysisServerOptions analysisServerOptions,
674 ServerPlugin serverPlugin, 715 DartSdk defaultSdk, InstrumentationService instrumentationService)
675 AnalysisServerOptions analysisServerOptions, 716 : super(channel, resourceProvider, packageMapProvider, index,
676 DartSdk defaultSdk, 717 serverPlugin, analysisServerOptions, defaultSdk,
677 InstrumentationService instrumentationService) 718 instrumentationService);
678 : super(
679 channel,
680 resourceProvider,
681 packageMapProvider,
682 index,
683 serverPlugin,
684 analysisServerOptions,
685 defaultSdk,
686 instrumentationService);
687 719
688 @override 720 @override
689 AnalysisContext getAnalysisContext(String path) { 721 AnalysisContext getAnalysisContext(String path) {
690 return mockContext; 722 return mockContext;
691 } 723 }
692 724
693 @override 725 @override
694 ContextSourcePair getContextSourcePair(String path) { 726 ContextSourcePair getContextSourcePair(String path) {
695 ContextSourcePair pair = super.getContextSourcePair(path); 727 ContextSourcePair pair = super.getContextSourcePair(path);
696 return new ContextSourcePair(mockContext, pair.source); 728 return new ContextSourcePair(mockContext, pair.source);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
741 } 773 }
742 '''); 774 ''');
743 await waitForTasksFinished(); 775 await waitForTasksFinished();
744 Request request = 776 Request request =
745 new CompletionGetSuggestionsParams(testFile, 0).toRequest('0'); 777 new CompletionGetSuggestionsParams(testFile, 0).toRequest('0');
746 Response response = handler.handleRequest(request); 778 Response response = handler.handleRequest(request);
747 expect(response.error, isNotNull); 779 expect(response.error, isNotNull);
748 expect(response.error.code, RequestErrorCode.NO_INDEX_GENERATED); 780 expect(response.error.code, RequestErrorCode.NO_INDEX_GENERATED);
749 } 781 }
750 } 782 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698