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

Unified Diff: pkg/analysis_services/test/completion/completion_test_util.dart

Issue 467233003: refactor and cleanup code completion (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: merge Created 6 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 side-by-side diff with in-line comments
Download patch
Index: pkg/analysis_services/test/completion/completion_test_util.dart
diff --git a/pkg/analysis_services/test/completion/completion_test_util.dart b/pkg/analysis_services/test/completion/completion_test_util.dart
index 58b49f7b5f2b70fc92e366a9507a3eeb4a51a128..b05d45a508e758c1d946769f885fcb231bf1ae70 100644
--- a/pkg/analysis_services/test/completion/completion_test_util.dart
+++ b/pkg/analysis_services/test/completion/completion_test_util.dart
@@ -6,10 +6,10 @@ library test.services.completion.util;
import 'dart:async';
-import 'package:analysis_services/completion/completion_computer.dart';
import 'package:analysis_services/completion/completion_suggestion.dart';
import 'package:analysis_services/index/index.dart';
import 'package:analysis_services/index/local_memory_index.dart';
+import 'package:analysis_services/src/completion/dart_completion_manager.dart';
import 'package:analysis_services/src/search/search_engine.dart';
import 'package:analysis_testing/abstract_context.dart';
import 'package:analysis_testing/mock_sdk.dart';
@@ -22,12 +22,12 @@ import 'package:unittest/unittest.dart';
class AbstractCompletionTest extends AbstractContextTest {
Index index;
SearchEngineImpl searchEngine;
- CompletionComputer computer;
+ DartCompletionComputer computer;
String testFile = '/completionTest.dart';
Source testSource;
int completionOffset;
- List<CompletionSuggestion> suggestions;
bool _computeFastCalled = false;
+ DartCompletionRequest request;
void addResolvedUnit(String file, String code) {
Source source = addSource(file, code);
@@ -44,10 +44,15 @@ class AbstractCompletionTest extends AbstractContextTest {
content = content.substring(0, completionOffset) +
content.substring(completionOffset + 1);
testSource = addSource(testFile, content);
+ request = new DartCompletionRequest(
+ context,
+ searchEngine,
+ testSource,
+ completionOffset);
}
void assertNotSuggested(String completion) {
- if (suggestions.any((cs) => cs.completion == completion)) {
+ if (request.suggestions.any((cs) => cs.completion == completion)) {
fail('did not expect completion: $completion');
}
}
@@ -55,20 +60,22 @@ class AbstractCompletionTest extends AbstractContextTest {
void assertSuggest(CompletionSuggestionKind kind, String completion,
[CompletionRelevance relevance = CompletionRelevance.DEFAULT, bool isDeprecated
= false, bool isPotential = false]) {
- var cs;
- suggestions.forEach((s) {
+ CompletionSuggestion cs;
+ request.suggestions.forEach((s) {
if (s.completion == completion) {
if (cs == null) {
cs = s;
} else {
- var match =
- suggestions.where((s) => s.completion == completion).toList();
- fail('expected exactly one $completion but found > 1\n $match');
+ List<CompletionSuggestion> matchSuggestions =
+ request.suggestions.where((s) => s.completion == completion).toList();
+ fail(
+ 'expected exactly one $completion but found > 1\n $matchSuggestions');
}
}
});
if (cs == null) {
- var completions = suggestions.map((s) => s.completion).toList();
+ List<CompletionSuggestion> completions =
+ request.suggestions.map((s) => s.completion).toList();
fail('expected "$completion" but found\n $completions');
}
expect(cs.kind, equals(kind));
@@ -107,6 +114,14 @@ class AbstractCompletionTest extends AbstractContextTest {
relevance);
}
+ void assertSuggestLocalVariable(String completion,
+ [CompletionRelevance relevance = CompletionRelevance.DEFAULT]) {
+ assertSuggest(
+ CompletionSuggestionKind.LOCAL_VARIABLE,
+ completion,
+ relevance);
+ }
+
void assertSuggestMethod(String className, [CompletionRelevance relevance =
CompletionRelevance.DEFAULT]) {
assertSuggest(CompletionSuggestionKind.METHOD, className, relevance);
@@ -135,47 +150,52 @@ class AbstractCompletionTest extends AbstractContextTest {
relevance);
}
- void assertSuggestVariable(String completion, [CompletionRelevance relevance =
- CompletionRelevance.DEFAULT]) {
- assertSuggest(
- CompletionSuggestionKind.LOCAL_VARIABLE,
- completion,
- relevance);
- }
-
bool computeFast() {
_computeFastCalled = true;
- computer
- ..context = context
- ..searchEngine = searchEngine
- ..source = testSource
- ..offset = completionOffset;
- suggestions = [];
CompilationUnit unit = context.parseCompilationUnit(testSource);
- AstNode node = new NodeLocator.con1(completionOffset).searchWithin(unit);
- return computer.computeFast(unit, node, suggestions);
+ request.unit = unit;
+ request.node = new NodeLocator.con1(completionOffset).searchWithin(unit);
+ return computer.computeFast(request);
}
- Future<bool> computeFull() {
+ Future<bool> computeFull([bool fullAnalysis = false]) {
if (!_computeFastCalled) {
expect(computeFast(), isFalse);
}
var result = context.performAnalysisTask();
+ bool resolved = false;
while (result.hasMoreWork) {
+
+ // Update the index
result.changeNotices.forEach((ChangeNotice notice) {
CompilationUnit unit = notice.compilationUnit;
if (unit != null) {
index.indexUnit(context, unit);
}
});
+
+ // If the unit has been resolved, then finish the completion
+ LibraryElement library = context.getLibraryElement(testSource);
+ if (library != null) {
+ CompilationUnit unit =
+ context.getResolvedCompilationUnit(testSource, library);
+ if (unit != null) {
+ request.unit = unit;
+ request.node = new NodeLocator.con1(
+ completionOffset).searchWithin(unit);
+ resolved = true;
+ if (!fullAnalysis) {
+ break;
+ }
+ }
+ }
+
result = context.performAnalysisTask();
}
- LibraryElement library = context.getLibraryElement(testSource);
- expect(library, isNotNull);
- var unit = context.getResolvedCompilationUnit(testSource, library);
- expect(unit, isNotNull);
- AstNode node = new NodeLocator.con1(completionOffset).searchWithin(unit);
- return computer.computeFull(unit, node, suggestions);
+ if (!resolved) {
+ fail('expected unit to be resolved');
+ }
+ return computer.computeFull(request);
}
@override

Powered by Google App Engine
This is Rietveld 408576698