Index: pkg/analysis_server/test/services/completion/dart/dart_completion_contributor_test.dart |
diff --git a/pkg/analysis_server/test/services/completion/dart/dart_completion_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/dart_completion_contributor_test.dart |
deleted file mode 100644 |
index 0c62fe4d68c627be88e68a8ab066ada60e0f119f..0000000000000000000000000000000000000000 |
--- a/pkg/analysis_server/test/services/completion/dart/dart_completion_contributor_test.dart |
+++ /dev/null |
@@ -1,220 +0,0 @@ |
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-library test.services.completion.contributor.dart; |
- |
-import 'dart:async'; |
- |
-import 'package:analysis_server/plugin/protocol/protocol.dart' as protocol |
- show Element, ElementKind; |
-import 'package:analysis_server/plugin/protocol/protocol.dart' |
- hide Element, ElementKind; |
-import 'package:analysis_server/plugin/protocol/protocol.dart'; |
-import 'package:analysis_server/src/provisional/completion/completion_core.dart' |
- show AnalysisRequest, CompletionContributor, CompletionRequest; |
-import 'package:analysis_server/src/provisional/completion/completion_dart.dart'; |
-import 'package:analysis_server/src/services/completion/completion_dart.dart' |
- show DartCompletionRequestImpl; |
-import 'package:analysis_server/src/services/completion/dart_completion_manager.dart' |
- show DART_RELEVANCE_DEFAULT, DART_RELEVANCE_LOW; |
-import 'package:analysis_server/src/services/index/index.dart'; |
-import 'package:analysis_server/src/services/index/local_memory_index.dart'; |
-import 'package:analysis_server/src/services/search/search_engine_internal.dart'; |
-import 'package:analyzer/src/generated/source.dart'; |
-import 'package:unittest/unittest.dart'; |
- |
-import '../../../abstract_context.dart'; |
-import 'package:analysis_server/src/services/completion/completion_core.dart'; |
- |
-int suggestionComparator(CompletionSuggestion s1, CompletionSuggestion s2) { |
- String c1 = s1.completion.toLowerCase(); |
- String c2 = s2.completion.toLowerCase(); |
- return c1.compareTo(c2); |
-} |
- |
-abstract class DartCompletionContributorTest extends AbstractContextTest { |
- Index index; |
- SearchEngineImpl searchEngine; |
- String testFile = '/completionTest.dart'; |
- Source testSource; |
- int completionOffset; |
- DartCompletionContributor contributor; |
- CompletionRequest request; |
- List<CompletionSuggestion> suggestions; |
- |
- void addTestSource(String content) { |
- expect(completionOffset, isNull, reason: 'Call addTestUnit exactly once'); |
- completionOffset = content.indexOf('^'); |
- expect(completionOffset, isNot(equals(-1)), reason: 'missing ^'); |
- int nextOffset = content.indexOf('^', completionOffset + 1); |
- expect(nextOffset, equals(-1), reason: 'too many ^'); |
- content = content.substring(0, completionOffset) + |
- content.substring(completionOffset + 1); |
- testSource = addSource(testFile, content); |
- } |
- |
- void assertHasParameterInfo(CompletionSuggestion suggestion) { |
- expect(suggestion.parameterNames, isNotNull); |
- expect(suggestion.parameterTypes, isNotNull); |
- expect(suggestion.parameterNames.length, suggestion.parameterTypes.length); |
- expect(suggestion.requiredParameterCount, |
- lessThanOrEqualTo(suggestion.parameterNames.length)); |
- expect(suggestion.hasNamedParameters, isNotNull); |
- } |
- |
- void assertNotSuggested(String completion) { |
- CompletionSuggestion suggestion = suggestions.firstWhere( |
- (CompletionSuggestion cs) => cs.completion == completion, |
- orElse: () => null); |
- if (suggestion != null) { |
- failedCompletion('did not expect completion: $completion\n $suggestion'); |
- } |
- } |
- |
- CompletionSuggestion assertSuggest(String completion, |
- {CompletionSuggestionKind csKind: CompletionSuggestionKind.INVOCATION, |
- int relevance: DART_RELEVANCE_DEFAULT, |
- String importUri, |
- protocol.ElementKind elemKind: null, |
- bool isDeprecated: false, |
- bool isPotential: false, |
- String elemFile, |
- int elemOffset}) { |
- CompletionSuggestion cs = |
- getSuggest(completion: completion, csKind: csKind, elemKind: elemKind); |
- if (cs == null) { |
- failedCompletion('expected $completion $csKind $elemKind', suggestions); |
- } |
- expect(cs.kind, equals(csKind)); |
- if (isDeprecated) { |
- expect(cs.relevance, equals(DART_RELEVANCE_LOW)); |
- } else { |
- expect(cs.relevance, equals(relevance)); |
- } |
- expect(cs.importUri, importUri); |
- expect(cs.selectionOffset, equals(completion.length)); |
- expect(cs.selectionLength, equals(0)); |
- expect(cs.isDeprecated, equals(isDeprecated)); |
- expect(cs.isPotential, equals(isPotential)); |
- if (cs.element != null) { |
- expect(cs.element.location, isNotNull); |
- expect(cs.element.location.file, isNotNull); |
- expect(cs.element.location.offset, isNotNull); |
- expect(cs.element.location.length, isNotNull); |
- expect(cs.element.location.startColumn, isNotNull); |
- expect(cs.element.location.startLine, isNotNull); |
- } |
- if (elemFile != null) { |
- expect(cs.element.location.file, elemFile); |
- } |
- if (elemOffset != null) { |
- expect(cs.element.location.offset, elemOffset); |
- } |
- return cs; |
- } |
- |
- /** |
- * Return a [Future] that completes with the containing library information |
- * after it is accessible via [context.getLibrariesContaining]. |
- */ |
- Future computeLibrariesContaining([int times = 200]) { |
- List<Source> libraries = context.getLibrariesContaining(testSource); |
- if (libraries.isNotEmpty) { |
- return new Future.value(libraries); |
- } |
- context.performAnalysisTask(); |
- // We use a delayed future to allow microtask events to finish. The |
- // Future.value or Future() constructors use scheduleMicrotask themselves and |
- // would therefore not wait for microtask callbacks that are scheduled after |
- // invoking this method. |
- return new Future.delayed( |
- Duration.ZERO, () => computeLibrariesContaining(times - 1)); |
- } |
- |
- Future computeSuggestions([int times = 200]) async { |
- CompletionRequestImpl baseRequest = new CompletionRequestImpl( |
- context, provider, testSource, completionOffset); |
- request = new DartCompletionRequestImpl.forRequest(baseRequest); |
- Completer<List<CompletionSuggestion>> completer = |
- new Completer<List<CompletionSuggestion>>(); |
- |
- // Request completions |
- contributor |
- .computeSuggestions(request) |
- .then((List<CompletionSuggestion> computedSuggestions) { |
- completer.complete(computedSuggestions); |
- }); |
- |
- // Perform analysis until the suggestions have been computed |
- // or the max analysis cycles ([times]) has been reached |
- suggestions = await performAnalysis(times, completer); |
- expect(suggestions, isNotNull, reason: 'expected suggestions'); |
- } |
- |
- DartCompletionContributor createContributor(); |
- |
- void failedCompletion(String message, |
- [Iterable<CompletionSuggestion> completions]) { |
- StringBuffer sb = new StringBuffer(message); |
- if (completions != null) { |
- sb.write('\n found'); |
- completions.toList() |
- ..sort(suggestionComparator) |
- ..forEach((CompletionSuggestion suggestion) { |
- sb.write('\n ${suggestion.completion} -> $suggestion'); |
- }); |
- } |
- fail(sb.toString()); |
- } |
- |
- CompletionSuggestion getSuggest( |
- {String completion: null, |
- CompletionSuggestionKind csKind: null, |
- protocol.ElementKind elemKind: null}) { |
- CompletionSuggestion cs; |
- if (suggestions != null) { |
- suggestions.forEach((CompletionSuggestion s) { |
- if (completion != null && completion != s.completion) { |
- return; |
- } |
- if (csKind != null && csKind != s.kind) { |
- return; |
- } |
- if (elemKind != null) { |
- protocol.Element element = s.element; |
- if (element == null || elemKind != element.kind) { |
- return; |
- } |
- } |
- if (cs == null) { |
- cs = s; |
- } else { |
- failedCompletion('expected exactly one $cs', |
- suggestions.where((s) => s.completion == completion)); |
- } |
- }); |
- } |
- return cs; |
- } |
- |
- Future performAnalysis(int times, Completer completer) { |
- if (completer.isCompleted) return completer.future; |
- if (times == 0 || context == null) return new Future.value(); |
- context.performAnalysisTask(); |
- // We use a delayed future to allow microtask events to finish. The |
- // Future.value or Future() constructors use scheduleMicrotask themselves and |
- // would therefore not wait for microtask callbacks that are scheduled after |
- // invoking this method. |
- return new Future.delayed( |
- Duration.ZERO, () => performAnalysis(times - 1, completer)); |
- } |
- |
- @override |
- void setUp() { |
- super.setUp(); |
- index = createLocalMemoryIndex(); |
- searchEngine = new SearchEngineImpl(index); |
- contributor = createContributor(); |
- } |
-} |