| 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.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; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 AnalysisDomainHandler analysisDomain; | 48 AnalysisDomainHandler analysisDomain; |
| 49 Test_CompletionDomainHandler completionDomain; | 49 Test_CompletionDomainHandler completionDomain; |
| 50 Request request; | 50 Request request; |
| 51 int requestCount = 0; | 51 int requestCount = 0; |
| 52 String testFile2 = '/project/bin/test2.dart'; | 52 String testFile2 = '/project/bin/test2.dart'; |
| 53 | 53 |
| 54 AnalysisServer createAnalysisServer(Index index) { | 54 AnalysisServer createAnalysisServer(Index index) { |
| 55 ExtensionManager manager = new ExtensionManager(); | 55 ExtensionManager manager = new ExtensionManager(); |
| 56 ServerPlugin serverPlugin = new ServerPlugin(); | 56 ServerPlugin serverPlugin = new ServerPlugin(); |
| 57 manager.processPlugins([serverPlugin]); | 57 manager.processPlugins([serverPlugin]); |
| 58 return new Test_AnalysisServer( | 58 return new Test_AnalysisServer(super.serverChannel, super.resourceProvider, |
| 59 super.serverChannel, | 59 super.packageMapProvider, index, serverPlugin, |
| 60 super.resourceProvider, | 60 new AnalysisServerOptions(), new MockSdk(), |
| 61 super.packageMapProvider, | |
| 62 index, | |
| 63 serverPlugin, | |
| 64 new AnalysisServerOptions(), | |
| 65 new MockSdk(), | |
| 66 InstrumentationService.NULL_SERVICE); | 61 InstrumentationService.NULL_SERVICE); |
| 67 } | 62 } |
| 68 | 63 |
| 69 @override | 64 @override |
| 70 Index createIndex() { | 65 Index createIndex() { |
| 71 return createLocalMemoryIndex(); | 66 return createLocalMemoryIndex(); |
| 72 } | 67 } |
| 73 | 68 |
| 74 void sendRequest(String path) { | 69 void sendRequest(String path) { |
| 75 String id = (++requestCount).toString(); | 70 String id = (++requestCount).toString(); |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 | 256 |
| 262 @reflectiveTest | 257 @reflectiveTest |
| 263 class CompletionTest extends AbstractAnalysisTest { | 258 class CompletionTest extends AbstractAnalysisTest { |
| 264 String completionId; | 259 String completionId; |
| 265 int completionOffset; | 260 int completionOffset; |
| 266 int replacementOffset; | 261 int replacementOffset; |
| 267 int replacementLength; | 262 int replacementLength; |
| 268 List<CompletionSuggestion> suggestions = []; | 263 List<CompletionSuggestion> suggestions = []; |
| 269 bool suggestionsDone = false; | 264 bool suggestionsDone = false; |
| 270 | 265 |
| 271 String addTestFile(String content, {offset}) { | 266 String addTestFile(String content, {int offset}) { |
| 272 completionOffset = content.indexOf('^'); | 267 completionOffset = content.indexOf('^'); |
| 273 if (offset != null) { | 268 if (offset != null) { |
| 274 expect(completionOffset, -1, reason: 'cannot supply offset and ^'); | 269 expect(completionOffset, -1, reason: 'cannot supply offset and ^'); |
| 275 completionOffset = offset; | 270 completionOffset = offset; |
| 276 return super.addTestFile(content); | 271 return super.addTestFile(content); |
| 277 } | 272 } |
| 278 expect(completionOffset, isNot(equals(-1)), reason: 'missing ^'); | 273 expect(completionOffset, isNot(equals(-1)), reason: 'missing ^'); |
| 279 int nextOffset = content.indexOf('^', completionOffset + 1); | 274 int nextOffset = content.indexOf('^', completionOffset + 1); |
| 280 expect(nextOffset, equals(-1), reason: 'too many ^'); | 275 expect(nextOffset, equals(-1), reason: 'too many ^'); |
| 281 return super.addTestFile(content.substring(0, completionOffset) + | 276 return super.addTestFile(content.substring(0, completionOffset) + |
| 282 content.substring(completionOffset + 1)); | 277 content.substring(completionOffset + 1)); |
| 283 } | 278 } |
| 284 | 279 |
| 285 void assertHasResult(CompletionSuggestionKind kind, String completion, | 280 void assertHasResult(CompletionSuggestionKind kind, String completion, |
| 286 [int relevance = DART_RELEVANCE_DEFAULT, | 281 {int relevance: DART_RELEVANCE_DEFAULT, |
| 287 bool isDeprecated = false, | 282 bool isDeprecated: false, |
| 288 bool isPotential = false]) { | 283 bool isPotential: false, |
| 284 int selectionOffset}) { |
| 289 var cs; | 285 var cs; |
| 290 suggestions.forEach((s) { | 286 suggestions.forEach((s) { |
| 291 if (s.completion == completion) { | 287 if (s.completion == completion) { |
| 292 if (cs == null) { | 288 if (cs == null) { |
| 293 cs = s; | 289 cs = s; |
| 294 } else { | 290 } else { |
| 295 fail('expected exactly one $completion but found > 1'); | 291 fail('expected exactly one $completion but found > 1'); |
| 296 } | 292 } |
| 297 } | 293 } |
| 298 }); | 294 }); |
| 299 if (cs == null) { | 295 if (cs == null) { |
| 300 var completions = suggestions.map((s) => s.completion).toList(); | 296 var completions = suggestions.map((s) => s.completion).toList(); |
| 301 fail('expected "$completion" but found\n $completions'); | 297 fail('expected "$completion" but found\n $completions'); |
| 302 } | 298 } |
| 303 expect(cs.kind, equals(kind)); | 299 expect(cs.kind, equals(kind)); |
| 304 expect(cs.relevance, equals(relevance)); | 300 expect(cs.relevance, equals(relevance)); |
| 305 expect(cs.selectionOffset, equals(completion.length)); | 301 expect(cs.selectionOffset, selectionOffset ?? completion.length); |
| 306 expect(cs.selectionLength, equals(0)); | 302 expect(cs.selectionLength, equals(0)); |
| 307 expect(cs.isDeprecated, equals(isDeprecated)); | 303 expect(cs.isDeprecated, equals(isDeprecated)); |
| 308 expect(cs.isPotential, equals(isPotential)); | 304 expect(cs.isPotential, equals(isPotential)); |
| 309 } | 305 } |
| 310 | 306 |
| 311 void assertNoResult(String completion) { | 307 void assertNoResult(String completion) { |
| 312 if (suggestions.any((cs) => cs.completion == completion)) { | 308 if (suggestions.any((cs) => cs.completion == completion)) { |
| 313 fail('did not expect completion: $completion'); | 309 fail('did not expect completion: $completion'); |
| 314 } | 310 } |
| 315 } | 311 } |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 379 '''); | 375 '''); |
| 380 return getSuggestions().then((_) { | 376 return getSuggestions().then((_) { |
| 381 expect(replacementOffset, equals(completionOffset)); | 377 expect(replacementOffset, equals(completionOffset)); |
| 382 expect(replacementLength, equals(0)); | 378 expect(replacementLength, equals(0)); |
| 383 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); | 379 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); |
| 384 assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement'); | 380 assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement'); |
| 385 assertNoResult('test'); | 381 assertNoResult('test'); |
| 386 }); | 382 }); |
| 387 } | 383 } |
| 388 | 384 |
| 385 test_imports_incremental() async { |
| 386 addTestFile('''library foo; |
| 387 e^ |
| 388 import "dart:async"; |
| 389 import "package:foo/foo.dart"; |
| 390 class foo { }'''); |
| 391 await waitForTasksFinished(); |
| 392 server.updateContent('uc1', {testFile: new AddContentOverlay(testCode)}); |
| 393 server.updateContent('uc2', { |
| 394 testFile: |
| 395 new ChangeContentOverlay([new SourceEdit(completionOffset, 0, 'xp')]) |
| 396 }); |
| 397 completionOffset += 2; |
| 398 await getSuggestions(); |
| 399 expect(replacementOffset, completionOffset - 3); |
| 400 expect(replacementLength, 3); |
| 401 assertHasResult(CompletionSuggestionKind.KEYWORD, 'export', |
| 402 relevance: DART_RELEVANCE_HIGH); |
| 403 assertHasResult(CompletionSuggestionKind.KEYWORD, 'import', |
| 404 relevance: DART_RELEVANCE_HIGH); |
| 405 assertNoResult('extends'); |
| 406 assertNoResult('library'); |
| 407 } |
| 408 |
| 409 test_imports_partial() async { |
| 410 addTestFile('''^ |
| 411 import "package:foo/foo.dart"; |
| 412 import "package:bar/bar.dart"; |
| 413 class Baz { }'''); |
| 414 |
| 415 // Wait for analysis then edit the content |
| 416 await waitForTasksFinished(); |
| 417 String revisedContent = testCode.substring(0, completionOffset) + |
| 418 'i' + |
| 419 testCode.substring(completionOffset); |
| 420 ++completionOffset; |
| 421 server.handleRequest(new AnalysisUpdateContentParams( |
| 422 {testFile: new AddContentOverlay(revisedContent)}).toRequest('add1')); |
| 423 |
| 424 // Request code completion immediately after edit |
| 425 Response response = handleSuccessfulRequest(new CompletionGetSuggestionsPara
ms( |
| 426 testFile, completionOffset).toRequest('0')); |
| 427 completionId = response.id; |
| 428 assertValidId(completionId); |
| 429 await waitForTasksFinished(); |
| 430 expect(replacementOffset, completionOffset - 1); |
| 431 expect(replacementLength, 1); |
| 432 assertHasResult(CompletionSuggestionKind.KEYWORD, 'library', |
| 433 relevance: DART_RELEVANCE_HIGH); |
| 434 assertHasResult(CompletionSuggestionKind.KEYWORD, 'import', |
| 435 relevance: DART_RELEVANCE_HIGH); |
| 436 assertHasResult(CompletionSuggestionKind.KEYWORD, 'export', |
| 437 relevance: DART_RELEVANCE_HIGH); |
| 438 assertHasResult(CompletionSuggestionKind.KEYWORD, 'part', |
| 439 relevance: DART_RELEVANCE_HIGH); |
| 440 assertNoResult('extends'); |
| 441 } |
| 442 |
| 389 test_imports_prefixed() { | 443 test_imports_prefixed() { |
| 390 addTestFile(''' | 444 addTestFile(''' |
| 391 import 'dart:html' as foo; | 445 import 'dart:html' as foo; |
| 392 main() {^} | 446 main() {^} |
| 393 '''); | 447 '''); |
| 394 return getSuggestions().then((_) { | 448 return getSuggestions().then((_) { |
| 395 expect(replacementOffset, equals(completionOffset)); | 449 expect(replacementOffset, equals(completionOffset)); |
| 396 expect(replacementLength, equals(0)); | 450 expect(replacementLength, equals(0)); |
| 397 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); | 451 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); |
| 398 assertHasResult(CompletionSuggestionKind.INVOCATION, 'foo'); | 452 assertHasResult(CompletionSuggestionKind.INVOCATION, 'foo'); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 417 expect(replacementLength, equals(0)); | 471 expect(replacementLength, equals(0)); |
| 418 assertHasResult(CompletionSuggestionKind.INVOCATION, 'b'); | 472 assertHasResult(CompletionSuggestionKind.INVOCATION, 'b'); |
| 419 }); | 473 }); |
| 420 } | 474 } |
| 421 | 475 |
| 422 test_keyword() { | 476 test_keyword() { |
| 423 addTestFile('library A; cl^'); | 477 addTestFile('library A; cl^'); |
| 424 return getSuggestions().then((_) { | 478 return getSuggestions().then((_) { |
| 425 expect(replacementOffset, equals(completionOffset - 2)); | 479 expect(replacementOffset, equals(completionOffset - 2)); |
| 426 expect(replacementLength, equals(2)); | 480 expect(replacementLength, equals(2)); |
| 427 assertHasResult( | 481 assertHasResult(CompletionSuggestionKind.KEYWORD, 'export', |
| 428 CompletionSuggestionKind.KEYWORD, 'export', DART_RELEVANCE_HIGH); | 482 relevance: DART_RELEVANCE_HIGH); |
| 429 assertHasResult( | 483 assertHasResult(CompletionSuggestionKind.KEYWORD, 'class', |
| 430 CompletionSuggestionKind.KEYWORD, 'class', DART_RELEVANCE_HIGH); | 484 relevance: DART_RELEVANCE_HIGH); |
| 431 }); | 485 }); |
| 432 } | 486 } |
| 433 | 487 |
| 434 test_local_named_constructor() { | 488 test_local_named_constructor() { |
| 435 addTestFile('class A {A.c(); x() {new A.^}}'); | 489 addTestFile('class A {A.c(); x() {new A.^}}'); |
| 436 return getSuggestions().then((_) { | 490 return getSuggestions().then((_) { |
| 437 expect(replacementOffset, equals(completionOffset)); | 491 expect(replacementOffset, equals(completionOffset)); |
| 438 expect(replacementLength, equals(0)); | 492 expect(replacementLength, equals(0)); |
| 439 assertHasResult(CompletionSuggestionKind.INVOCATION, 'c'); | 493 assertHasResult(CompletionSuggestionKind.INVOCATION, 'c'); |
| 440 assertNoResult('A'); | 494 assertNoResult('A'); |
| 441 }); | 495 }); |
| 442 } | 496 } |
| 443 | 497 |
| 444 test_locals() { | 498 test_locals() { |
| 445 addTestFile('class A {var a; x() {var b;^}} class DateTime { }'); | 499 addTestFile('class A {var a; x() {var b;^}} class DateTime { }'); |
| 446 return getSuggestions().then((_) { | 500 return getSuggestions().then((_) { |
| 447 expect(replacementOffset, equals(completionOffset)); | 501 expect(replacementOffset, equals(completionOffset)); |
| 448 expect(replacementLength, equals(0)); | 502 expect(replacementLength, equals(0)); |
| 449 assertHasResult(CompletionSuggestionKind.INVOCATION, 'A'); | 503 assertHasResult(CompletionSuggestionKind.INVOCATION, 'A'); |
| 450 assertHasResult( | 504 assertHasResult(CompletionSuggestionKind.INVOCATION, 'a', |
| 451 CompletionSuggestionKind.INVOCATION, 'a', DART_RELEVANCE_LOCAL_FIELD); | 505 relevance: DART_RELEVANCE_LOCAL_FIELD); |
| 452 assertHasResult(CompletionSuggestionKind.INVOCATION, 'b', | 506 assertHasResult(CompletionSuggestionKind.INVOCATION, 'b', |
| 453 DART_RELEVANCE_LOCAL_VARIABLE); | 507 relevance: DART_RELEVANCE_LOCAL_VARIABLE); |
| 454 assertHasResult(CompletionSuggestionKind.INVOCATION, 'x', | 508 assertHasResult(CompletionSuggestionKind.INVOCATION, 'x', |
| 455 DART_RELEVANCE_LOCAL_METHOD); | 509 relevance: DART_RELEVANCE_LOCAL_METHOD); |
| 456 assertHasResult(CompletionSuggestionKind.INVOCATION, 'DateTime'); | 510 assertHasResult(CompletionSuggestionKind.INVOCATION, 'DateTime'); |
| 457 }); | 511 }); |
| 458 } | 512 } |
| 459 | 513 |
| 460 test_offset_past_eof() { | 514 test_offset_past_eof() { |
| 461 addTestFile('main() { }', offset: 300); | 515 addTestFile('main() { }', offset: 300); |
| 462 return getSuggestions().then((_) { | 516 return getSuggestions().then((_) { |
| 463 expect(replacementOffset, equals(300)); | 517 expect(replacementOffset, equals(300)); |
| 464 expect(replacementLength, equals(0)); | 518 expect(replacementLength, equals(0)); |
| 465 expect(suggestionsDone, true); | 519 expect(suggestionsDone, true); |
| 466 expect(suggestions.length, 0); | 520 expect(suggestions.length, 0); |
| 467 }); | 521 }); |
| 468 } | 522 } |
| 469 | 523 |
| 470 test_overrides() { | 524 test_overrides() { |
| 471 addFile('/libA.dart', 'class A {m() {}}'); | 525 addFile('/libA.dart', 'class A {m() {}}'); |
| 472 addTestFile(''' | 526 addTestFile(''' |
| 473 import '/libA.dart'; | 527 import '/libA.dart'; |
| 474 class B extends A {m() {^}} | 528 class B extends A {m() {^}} |
| 475 '''); | 529 '''); |
| 476 return getSuggestions().then((_) { | 530 return getSuggestions().then((_) { |
| 477 expect(replacementOffset, equals(completionOffset)); | 531 expect(replacementOffset, equals(completionOffset)); |
| 478 expect(replacementLength, equals(0)); | 532 expect(replacementLength, equals(0)); |
| 479 assertHasResult(CompletionSuggestionKind.INVOCATION, 'm', | 533 assertHasResult(CompletionSuggestionKind.INVOCATION, 'm', |
| 480 DART_RELEVANCE_LOCAL_METHOD); | 534 relevance: DART_RELEVANCE_LOCAL_METHOD); |
| 481 }); | 535 }); |
| 482 } | 536 } |
| 483 | 537 |
| 484 test_partFile() { | 538 test_partFile() { |
| 485 addFile( | 539 addFile('/project/bin/testA.dart', ''' |
| 486 '/project/bin/testA.dart', | |
| 487 ''' | |
| 488 library libA; | 540 library libA; |
| 489 part "$testFile"; | 541 part "$testFile"; |
| 490 import 'dart:html'; | 542 import 'dart:html'; |
| 491 class A { } | 543 class A { } |
| 492 '''); | 544 '''); |
| 493 addTestFile(''' | 545 addTestFile(''' |
| 494 part of libA; | 546 part of libA; |
| 495 main() {^}'''); | 547 main() {^}'''); |
| 496 return getSuggestions().then((_) { | 548 return getSuggestions().then((_) { |
| 497 expect(replacementOffset, equals(completionOffset)); | 549 expect(replacementOffset, equals(completionOffset)); |
| 498 expect(replacementLength, equals(0)); | 550 expect(replacementLength, equals(0)); |
| 499 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); | 551 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); |
| 500 assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement'); | 552 assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement'); |
| 501 assertHasResult(CompletionSuggestionKind.INVOCATION, 'A'); | 553 assertHasResult(CompletionSuggestionKind.INVOCATION, 'A'); |
| 502 assertNoResult('test'); | 554 assertNoResult('test'); |
| 503 }); | 555 }); |
| 504 } | 556 } |
| 505 | 557 |
| 506 test_partFile2() { | 558 test_partFile2() { |
| 507 addFile( | 559 addFile('/testA.dart', ''' |
| 508 '/testA.dart', | |
| 509 ''' | |
| 510 part of libA; | 560 part of libA; |
| 511 class A { }'''); | 561 class A { }'''); |
| 512 addTestFile(''' | 562 addTestFile(''' |
| 513 library libA; | 563 library libA; |
| 514 part "/testA.dart"; | 564 part "/testA.dart"; |
| 515 import 'dart:html'; | 565 import 'dart:html'; |
| 516 main() {^} | 566 main() {^} |
| 517 '''); | 567 '''); |
| 518 return getSuggestions().then((_) { | 568 return getSuggestions().then((_) { |
| 519 expect(replacementOffset, equals(completionOffset)); | 569 expect(replacementOffset, equals(completionOffset)); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 545 typedef foo(); | 595 typedef foo(); |
| 546 var test = ''; | 596 var test = ''; |
| 547 main() {tes^t} | 597 main() {tes^t} |
| 548 '''); | 598 '''); |
| 549 return getSuggestions().then((_) { | 599 return getSuggestions().then((_) { |
| 550 expect(replacementOffset, equals(completionOffset - 3)); | 600 expect(replacementOffset, equals(completionOffset - 3)); |
| 551 expect(replacementLength, equals(4)); | 601 expect(replacementLength, equals(4)); |
| 552 // Suggestions based upon imported elements are partially filtered | 602 // Suggestions based upon imported elements are partially filtered |
| 553 //assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); | 603 //assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); |
| 554 assertHasResult(CompletionSuggestionKind.INVOCATION, 'test', | 604 assertHasResult(CompletionSuggestionKind.INVOCATION, 'test', |
| 555 DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE); | 605 relevance: DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE); |
| 556 assertNoResult('HtmlElement'); | 606 assertNoResult('HtmlElement'); |
| 557 }); | 607 }); |
| 558 } | 608 } |
| 559 } | 609 } |
| 560 | 610 |
| 561 class MockCache extends CompletionCache { | 611 class MockCache extends CompletionCache { |
| 562 MockCache(AnalysisContext context, Source source) : super(context, source); | 612 MockCache(AnalysisContext context, Source source) : super(context, source); |
| 563 } | 613 } |
| 564 | 614 |
| 565 class MockCompletionManager implements CompletionManager { | 615 class MockCompletionManager implements CompletionManager { |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 659 ++cancelCount; | 709 ++cancelCount; |
| 660 return new Future.value(true); | 710 return new Future.value(true); |
| 661 } | 711 } |
| 662 | 712 |
| 663 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); | 713 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
| 664 } | 714 } |
| 665 | 715 |
| 666 class Test_AnalysisServer extends AnalysisServer { | 716 class Test_AnalysisServer extends AnalysisServer { |
| 667 final MockContext mockContext = new MockContext(); | 717 final MockContext mockContext = new MockContext(); |
| 668 | 718 |
| 669 Test_AnalysisServer( | 719 Test_AnalysisServer(ServerCommunicationChannel channel, |
| 670 ServerCommunicationChannel channel, | |
| 671 ResourceProvider resourceProvider, | 720 ResourceProvider resourceProvider, |
| 672 PubPackageMapProvider packageMapProvider, | 721 PubPackageMapProvider packageMapProvider, Index index, |
| 673 Index index, | 722 ServerPlugin serverPlugin, AnalysisServerOptions analysisServerOptions, |
| 674 ServerPlugin serverPlugin, | 723 DartSdk defaultSdk, InstrumentationService instrumentationService) |
| 675 AnalysisServerOptions analysisServerOptions, | 724 : super(channel, resourceProvider, packageMapProvider, index, |
| 676 DartSdk defaultSdk, | 725 serverPlugin, analysisServerOptions, defaultSdk, |
| 677 InstrumentationService instrumentationService) | 726 instrumentationService); |
| 678 : super( | |
| 679 channel, | |
| 680 resourceProvider, | |
| 681 packageMapProvider, | |
| 682 index, | |
| 683 serverPlugin, | |
| 684 analysisServerOptions, | |
| 685 defaultSdk, | |
| 686 instrumentationService); | |
| 687 | 727 |
| 688 @override | 728 @override |
| 689 AnalysisContext getAnalysisContext(String path) { | 729 AnalysisContext getAnalysisContext(String path) { |
| 690 return mockContext; | 730 return mockContext; |
| 691 } | 731 } |
| 692 | 732 |
| 693 @override | 733 @override |
| 694 ContextSourcePair getContextSourcePair(String path) { | 734 ContextSourcePair getContextSourcePair(String path) { |
| 695 ContextSourcePair pair = super.getContextSourcePair(path); | 735 ContextSourcePair pair = super.getContextSourcePair(path); |
| 696 return new ContextSourcePair(mockContext, pair.source); | 736 return new ContextSourcePair(mockContext, pair.source); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 741 } | 781 } |
| 742 '''); | 782 '''); |
| 743 await waitForTasksFinished(); | 783 await waitForTasksFinished(); |
| 744 Request request = | 784 Request request = |
| 745 new CompletionGetSuggestionsParams(testFile, 0).toRequest('0'); | 785 new CompletionGetSuggestionsParams(testFile, 0).toRequest('0'); |
| 746 Response response = handler.handleRequest(request); | 786 Response response = handler.handleRequest(request); |
| 747 expect(response.error, isNotNull); | 787 expect(response.error, isNotNull); |
| 748 expect(response.error.code, RequestErrorCode.NO_INDEX_GENERATED); | 788 expect(response.error.code, RequestErrorCode.NO_INDEX_GENERATED); |
| 749 } | 789 } |
| 750 } | 790 } |
| OLD | NEW |