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

Unified Diff: pkg/analysis_server/test/services/completion/completion_test_util.dart

Issue 1526303003: convert ImportedReferenceContributor to new API (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: merge Created 5 years 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_server/test/services/completion/completion_test_util.dart
diff --git a/pkg/analysis_server/test/services/completion/completion_test_util.dart b/pkg/analysis_server/test/services/completion/completion_test_util.dart
deleted file mode 100644
index 9ad974dff223b6405bd3d9f2c23e7ee2132fced1..0000000000000000000000000000000000000000
--- a/pkg/analysis_server/test/services/completion/completion_test_util.dart
+++ /dev/null
@@ -1,4675 +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.util;
-
-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/src/provisional/completion/dart/completion_target.dart';
-import 'package:analysis_server/src/services/completion/completion_manager.dart';
-import 'package:analysis_server/src/services/completion/dart/common_usage_sorter.dart';
-import 'package:analysis_server/src/services/completion/dart_completion_cache.dart';
-import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
-import 'package:analysis_server/src/services/completion/imported_reference_contributor.dart';
-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/dart/element/element.dart';
-import 'package:analyzer/src/generated/ast.dart';
-import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/source.dart';
-import 'package:unittest/unittest.dart';
-
-import '../../abstract_context.dart';
-
-int suggestionComparator(CompletionSuggestion s1, CompletionSuggestion s2) {
- String c1 = s1.completion.toLowerCase();
- String c2 = s2.completion.toLowerCase();
- return c1.compareTo(c2);
-}
-
-abstract class AbstractCompletionTest extends AbstractContextTest {
- Index index;
- SearchEngineImpl searchEngine;
- DartCompletionContributor contributor;
- String testFile = '/completionTest.dart';
- Source testSource;
- CompilationUnit testUnit;
- int completionOffset;
- AstNode completionNode;
- bool computeFastResult;
- DartCompletionRequest request;
- DartCompletionCache cache;
- DartCompletionManager _completionManager;
-
- void addResolvedUnit(String file, String code) {
- Source source = addSource(file, code);
- CompilationUnit unit = resolveLibraryUnit(source);
- index.index(context, unit);
- }
-
- 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);
- cache = new DartCompletionCache(context, testSource);
- request = new DartCompletionRequest(
- context, provider, searchEngine, testSource, completionOffset, cache);
- }
-
- void assertHasNoParameterInfo(CompletionSuggestion suggestion) {
- expect(suggestion.parameterNames, isNull);
- expect(suggestion.parameterTypes, isNull);
- expect(suggestion.requiredParameterCount, isNull);
- expect(suggestion.hasNamedParameters, isNull);
- }
-
- 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 assertNoSuggestions({CompletionSuggestionKind kind: null}) {
- if (kind == null) {
- if (request.suggestions.length > 0) {
- failedCompletion('Expected no suggestions', request.suggestions);
- }
- return;
- }
- CompletionSuggestion suggestion = request.suggestions.firstWhere(
- (CompletionSuggestion cs) => cs.kind == kind,
- orElse: () => null);
- if (suggestion != null) {
- failedCompletion('did not expect completion: $completion\n $suggestion');
- }
- }
-
- CompletionSuggestion assertNotSuggested(String completion) {
- CompletionSuggestion suggestion = request.suggestions.firstWhere(
- (CompletionSuggestion cs) => cs.completion == completion,
- orElse: () => null);
- if (suggestion != null) {
- failedCompletion('did not expect completion: $completion\n $suggestion');
- }
- return null;
- }
-
- 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', request.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;
- }
-
- CompletionSuggestion assertSuggestClass(String name,
- {int relevance: DART_RELEVANCE_DEFAULT,
- String importUri,
- CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
- bool isDeprecated: false,
- String elemFile,
- int elemOffset}) {
- CompletionSuggestion cs = assertSuggest(name,
- csKind: kind,
- relevance: relevance,
- importUri: importUri,
- isDeprecated: isDeprecated,
- elemFile: elemFile,
- elemOffset: elemOffset);
- protocol.Element element = cs.element;
- expect(element, isNotNull);
- expect(element.kind, equals(protocol.ElementKind.CLASS));
- expect(element.name, equals(name));
- expect(element.parameters, isNull);
- expect(element.returnType, isNull);
- assertHasNoParameterInfo(cs);
- return cs;
- }
-
- CompletionSuggestion assertSuggestClassTypeAlias(String name,
- [int relevance = DART_RELEVANCE_DEFAULT,
- CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
- CompletionSuggestion cs =
- assertSuggest(name, csKind: kind, relevance: relevance);
- protocol.Element element = cs.element;
- expect(element, isNotNull);
- expect(element.kind, equals(protocol.ElementKind.CLASS_TYPE_ALIAS));
- expect(element.name, equals(name));
- expect(element.parameters, isNull);
- expect(element.returnType, isNull);
- assertHasNoParameterInfo(cs);
- return cs;
- }
-
- CompletionSuggestion assertSuggestConstructor(String name,
- {int relevance: DART_RELEVANCE_DEFAULT,
- String importUri,
- int elemOffset}) {
- CompletionSuggestion cs = assertSuggest(name,
- relevance: relevance, importUri: importUri, elemOffset: elemOffset);
- protocol.Element element = cs.element;
- expect(element, isNotNull);
- expect(element.kind, equals(protocol.ElementKind.CONSTRUCTOR));
- int index = name.indexOf('.');
- expect(element.name, index >= 0 ? name.substring(index + 1) : '');
- return cs;
- }
-
- CompletionSuggestion assertSuggestField(String name, String type,
- {int relevance: DART_RELEVANCE_DEFAULT,
- String importUri,
- CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
- bool isDeprecated: false}) {
- CompletionSuggestion cs = assertSuggest(name,
- csKind: kind,
- relevance: relevance,
- importUri: importUri,
- elemKind: protocol.ElementKind.FIELD,
- isDeprecated: isDeprecated);
- // The returnType represents the type of a field
- expect(cs.returnType, type != null ? type : 'dynamic');
- protocol.Element element = cs.element;
- expect(element, isNotNull);
- expect(element.kind, equals(protocol.ElementKind.FIELD));
- expect(element.name, equals(name));
- expect(element.parameters, isNull);
- // The returnType represents the type of a field
- expect(element.returnType, type != null ? type : 'dynamic');
- assertHasNoParameterInfo(cs);
- return cs;
- }
-
- CompletionSuggestion assertSuggestFunction(String name, String returnType,
- {CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
- bool deprecated: false,
- int relevance: DART_RELEVANCE_DEFAULT,
- String importUri}) {
- CompletionSuggestion cs = assertSuggest(name,
- csKind: kind,
- relevance: relevance,
- importUri: importUri,
- isDeprecated: deprecated);
- expect(cs.returnType, returnType != null ? returnType : 'dynamic');
- protocol.Element element = cs.element;
- expect(element, isNotNull);
- expect(element.kind, equals(protocol.ElementKind.FUNCTION));
- expect(element.name, equals(name));
- expect(element.isDeprecated, equals(deprecated));
- String param = element.parameters;
- expect(param, isNotNull);
- expect(param[0], equals('('));
- expect(param[param.length - 1], equals(')'));
- expect(element.returnType,
- equals(returnType != null ? returnType : 'dynamic'));
- assertHasParameterInfo(cs);
- return cs;
- }
-
- CompletionSuggestion assertSuggestFunctionTypeAlias(
- String name, String returnType, bool isDeprecated,
- [int relevance = DART_RELEVANCE_DEFAULT,
- CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION,
- String importUri]) {
- CompletionSuggestion cs = assertSuggest(name,
- csKind: kind,
- relevance: relevance,
- importUri: importUri,
- isDeprecated: isDeprecated);
- expect(cs.returnType, returnType != null ? returnType : 'dynamic');
- protocol.Element element = cs.element;
- expect(element, isNotNull);
- expect(element.kind, equals(protocol.ElementKind.FUNCTION_TYPE_ALIAS));
- expect(element.name, equals(name));
- expect(element.isDeprecated, equals(isDeprecated));
- // TODO (danrubel) Determine why params are null
-// String param = element.parameters;
-// expect(param, isNotNull);
-// expect(param[0], equals('('));
-// expect(param[param.length - 1], equals(')'));
- expect(element.returnType,
- equals(returnType != null ? returnType : 'dynamic'));
- // TODO (danrubel) Determine why param info is missing
-// assertHasParameterInfo(cs);
- return cs;
- }
-
- CompletionSuggestion assertSuggestGetter(String name, String returnType,
- {int relevance: DART_RELEVANCE_DEFAULT,
- String importUri,
- CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
- bool isDeprecated: false}) {
- CompletionSuggestion cs = assertSuggest(name,
- csKind: kind,
- relevance: relevance,
- importUri: importUri,
- elemKind: protocol.ElementKind.GETTER,
- isDeprecated: isDeprecated);
- expect(cs.returnType, returnType != null ? returnType : 'dynamic');
- protocol.Element element = cs.element;
- expect(element, isNotNull);
- expect(element.kind, equals(protocol.ElementKind.GETTER));
- expect(element.name, equals(name));
- expect(element.parameters, isNull);
- expect(element.returnType,
- equals(returnType != null ? returnType : 'dynamic'));
- assertHasNoParameterInfo(cs);
- return cs;
- }
-
- CompletionSuggestion assertSuggestLibraryPrefix(String prefix,
- [int relevance = DART_RELEVANCE_DEFAULT,
- CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
- // Library prefix should only be suggested by ImportedReferenceContributor
- return assertNotSuggested(prefix);
- }
-
- CompletionSuggestion assertSuggestMethod(
- String name, String declaringType, String returnType,
- {int relevance: DART_RELEVANCE_DEFAULT,
- String importUri,
- CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
- bool isDeprecated: false}) {
- CompletionSuggestion cs = assertSuggest(name,
- csKind: kind,
- relevance: relevance,
- importUri: importUri,
- isDeprecated: isDeprecated);
- expect(cs.declaringType, equals(declaringType));
- expect(cs.returnType, returnType != null ? returnType : 'dynamic');
- protocol.Element element = cs.element;
- expect(element, isNotNull);
- expect(element.kind, equals(protocol.ElementKind.METHOD));
- expect(element.name, equals(name));
- String param = element.parameters;
- expect(param, isNotNull);
- expect(param[0], equals('('));
- expect(param[param.length - 1], equals(')'));
- expect(element.returnType, returnType != null ? returnType : 'dynamic');
- assertHasParameterInfo(cs);
- return cs;
- }
-
- CompletionSuggestion assertSuggestParameter(String name, String returnType,
- {int relevance: DART_RELEVANCE_PARAMETER}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestSetter(String name,
- [int relevance = DART_RELEVANCE_DEFAULT,
- String importUri,
- CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
- CompletionSuggestion cs = assertSuggest(name,
- csKind: kind,
- relevance: relevance,
- importUri: importUri,
- elemKind: protocol.ElementKind.SETTER);
- protocol.Element element = cs.element;
- expect(element, isNotNull);
- expect(element.kind, equals(protocol.ElementKind.SETTER));
- expect(element.name, equals(name));
- // TODO (danrubel) assert setter param
- //expect(element.parameters, isNull);
- // TODO (danrubel) it would be better if this was always null
- if (element.returnType != null) {
- expect(element.returnType, 'dynamic');
- }
- assertHasNoParameterInfo(cs);
- return cs;
- }
-
- CompletionSuggestion assertSuggestTopLevelVar(String name, String returnType,
- [int relevance = DART_RELEVANCE_DEFAULT,
- CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION,
- String importUri]) {
- CompletionSuggestion cs = assertSuggest(name,
- csKind: kind, relevance: relevance, importUri: importUri);
- expect(cs.returnType, returnType != null ? returnType : 'dynamic');
- protocol.Element element = cs.element;
- expect(element, isNotNull);
- expect(element.kind, equals(protocol.ElementKind.TOP_LEVEL_VARIABLE));
- expect(element.name, equals(name));
- expect(element.parameters, isNull);
- expect(element.returnType, returnType != null ? returnType : 'dynamic');
- assertHasNoParameterInfo(cs);
- return cs;
- }
-
- void assertSuggestTopLevelVarGetterSetter(String name, String returnType,
- [int relevance = DART_RELEVANCE_DEFAULT]) {
- if (contributor is ImportedReferenceContributor) {
- assertSuggestGetter(name, returnType);
- assertSuggestSetter(name);
- } else {
- assertNotSuggested(name);
- }
- }
-
- bool computeFast() {
- expect(computeFastResult, isNull);
- _completionManager = new DartCompletionManager(context, searchEngine,
- testSource, cache, [contributor], [], new CommonUsageSorter({}));
- var result =
- _completionManager.computeFast(request, new CompletionPerformance());
- expect(request.replacementOffset, isNotNull);
- expect(request.replacementLength, isNotNull);
- computeFastResult = result.isEmpty;
- return computeFastResult;
- }
-
- Future computeFull(assertFunction(bool result), {bool fullAnalysis: true}) {
- if (computeFastResult == null) {
- computeFast();
- }
- if (computeFastResult) {
- assertFunction(true);
- return new Future.value(true);
- } else {
- resolve(fullAnalysis);
- return contributor.computeFull(request).then(assertFunction);
- }
- }
-
- 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');
- });
- }
- if (completionNode != null) {
- sb.write('\n in');
- AstNode node = completionNode;
- while (node != null) {
- sb.write('\n ${node.runtimeType}');
- node = node.parent;
- }
- }
- fail(sb.toString());
- }
-
- CompletionSuggestion getSuggest(
- {String completion: null,
- CompletionSuggestionKind csKind: null,
- protocol.ElementKind elemKind: null}) {
- CompletionSuggestion cs;
- request.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',
- request.suggestions.where((s) => s.completion == completion));
- }
- });
- return cs;
- }
-
- void resolve(bool fullAnalysis) {
- // Index SDK
- for (Source librarySource in context.librarySources) {
- CompilationUnit unit =
- context.getResolvedCompilationUnit2(librarySource, librarySource);
- if (unit != null) {
- index.index(context, unit);
- }
- }
-
- var result = context.performAnalysisTask();
- bool resolved = false;
- while (result.hasMoreWork) {
- // Update the index
- result.changeNotices.forEach((ChangeNotice notice) {
- CompilationUnit unit = notice.resolvedDartUnit;
- if (unit != null) {
- index.index(context, unit);
- }
- });
-
- // If the unit has been resolved, then finish the completion
- List<Source> libSourceList = context.getLibrariesContaining(testSource);
- if (libSourceList.length > 0) {
- LibraryElement library = context.getLibraryElement(libSourceList[0]);
- if (library != null) {
- CompilationUnit unit =
- context.getResolvedCompilationUnit(testSource, library);
- if (unit != null) {
- request.unit = unit;
- request.target =
- new CompletionTarget.forOffset(unit, completionOffset);
- resolved = true;
- if (!fullAnalysis) {
- break;
- }
- }
- }
- }
-
- result = context.performAnalysisTask();
- }
- if (!resolved) {
- fail('expected unit to be resolved');
- }
- }
-
- @override
- void setUp() {
- super.setUp();
- index = createLocalMemoryIndex();
- searchEngine = new SearchEngineImpl(index);
- setUpContributor();
- }
-
- void setUpContributor();
-}
-
-/**
- * Common tests for `ImportedTypeContributorTest`, `InvocationContributorTest`,
- * and `LocalContributorTest`.
- */
-abstract class AbstractSelectorSuggestionTest extends AbstractCompletionTest {
- /**
- * Assert that the ImportedReferenceContributor uses cached results
- * to produce identical suggestions to the original set of suggestions.
- */
- void assertCachedCompute(_) {
- // Subclasses override
- }
-
- CompletionSuggestion assertSuggestEnum(String completion,
- {bool isDeprecated: false}) {
- CompletionSuggestion suggestion =
- assertSuggest(completion, isDeprecated: isDeprecated);
- expect(suggestion.isDeprecated, isDeprecated);
- expect(suggestion.element.kind, protocol.ElementKind.ENUM);
- return suggestion;
- }
-
- CompletionSuggestion assertSuggestEnumConst(String completion,
- {bool isDeprecated: false}) {
- CompletionSuggestion suggestion =
- assertSuggest(completion, isDeprecated: isDeprecated);
- expect(suggestion.isDeprecated, isDeprecated);
- expect(suggestion.element.kind, protocol.ElementKind.ENUM_CONSTANT);
- return suggestion;
- }
-
- CompletionSuggestion assertSuggestImportedClass(String name,
- {CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
- int relevance: DART_RELEVANCE_DEFAULT,
- String importUri,
- String elemFile}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestImportedConstructor(String name,
- {int relevance: DART_RELEVANCE_DEFAULT, String importUri}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestImportedField(String name, String type,
- {int relevance: DART_RELEVANCE_INHERITED_FIELD}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestImportedFunction(
- String name, String returnType,
- {CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
- bool deprecated: false,
- int relevance: DART_RELEVANCE_DEFAULT,
- String importUri}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestImportedFunctionTypeAlias(
- String name, String returnType,
- [bool isDeprecated = false,
- int relevance = DART_RELEVANCE_DEFAULT,
- CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestImportedGetter(
- String name, String returnType,
- {int relevance: DART_RELEVANCE_INHERITED_ACCESSOR}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestImportedMethod(
- String name, String declaringType, String returnType,
- {int relevance: DART_RELEVANCE_INHERITED_METHOD}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestImportedSetter(String name,
- {int relevance: DART_RELEVANCE_INHERITED_ACCESSOR}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestImportedTopLevelVar(
- String name, String returnType,
- [int relevance = DART_RELEVANCE_DEFAULT,
- CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION,
- String importUri]) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestInvocationClass(String name,
- [int relevance = DART_RELEVANCE_DEFAULT]) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestInvocationField(String name, String type,
- {int relevance: DART_RELEVANCE_DEFAULT, bool isDeprecated: false}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestInvocationGetter(
- String name, String returnType,
- {int relevance: DART_RELEVANCE_DEFAULT, bool isDeprecated: false}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestInvocationMethod(
- String name, String declaringType, String returnType,
- {int relevance: DART_RELEVANCE_DEFAULT}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestInvocationSetter(String name,
- [int relevance = DART_RELEVANCE_DEFAULT]) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestInvocationTopLevelVar(
- String name, String returnType,
- [int relevance = DART_RELEVANCE_DEFAULT]) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestLocalClass(String name,
- {CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
- int relevance: DART_RELEVANCE_DEFAULT,
- bool isDeprecated: false,
- String elemFile,
- int elemOffset}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestLocalClassTypeAlias(String name,
- {int relevance: DART_RELEVANCE_DEFAULT}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestLocalField(String name, String type,
- {int relevance: DART_RELEVANCE_LOCAL_FIELD, bool deprecated: false}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestLocalFunction(
- String name, String returnType,
- {bool deprecated: false,
- int relevance: DART_RELEVANCE_LOCAL_FUNCTION,
- CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestLocalFunctionTypeAlias(
- String name, String returnType,
- {bool deprecated: false, int relevance: DART_RELEVANCE_DEFAULT}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestLocalGetter(String name, String returnType,
- {int relevance: DART_RELEVANCE_LOCAL_ACCESSOR, bool deprecated: false}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestLocalMethod(
- String name, String declaringType, String returnType,
- {int relevance: DART_RELEVANCE_LOCAL_METHOD, bool deprecated: false}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestLocalSetter(String name,
- {int relevance: DART_RELEVANCE_LOCAL_ACCESSOR}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestLocalTopLevelVar(
- String name, String returnType,
- {int relevance: DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestLocalVariable(
- String name, String returnType,
- {int relevance: DART_RELEVANCE_LOCAL_VARIABLE}) {
- return assertNotSuggested(name);
- }
-
- CompletionSuggestion assertSuggestNonLocalClass(String name,
- [int relevance = DART_RELEVANCE_DEFAULT,
- CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
- return assertSuggestImportedClass(name, relevance: relevance, kind: kind);
- }
-
- Future computeFull(assertFunction(bool result), {bool fullAnalysis: true}) {
- return super
- .computeFull(assertFunction, fullAnalysis: fullAnalysis)
- .then(assertCachedCompute);
- }
-
- test_ArgumentList() {
- // ArgumentList MethodInvocation ExpressionStatement Block
- addSource(
- '/libA.dart',
- '''
- library A;
- bool hasLength(int expected) { }
- void baz() { }''');
- addTestSource('''
- import '/libA.dart';
- class B { }
- String bar() => true;
- void main() {expect(^)}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertNoSuggestions(kind: CompletionSuggestionKind.ARGUMENT_LIST);
- assertSuggestLocalFunction('bar', 'String');
- assertSuggestImportedFunction('hasLength', 'bool');
- assertSuggestImportedFunction('identical', 'bool');
- assertSuggestLocalClass('B');
- assertSuggestImportedClass('Object');
- assertNotSuggested('main');
- assertNotSuggested('baz');
- assertNotSuggested('print');
- });
- }
-
- test_ArgumentList_imported_function() {
- // ArgumentList MethodInvocation ExpressionStatement Block
- addSource(
- '/libA.dart',
- '''
- library A;
- bool hasLength(int expected) { }
- expect(arg) { }
- void baz() { }''');
- addTestSource('''
- import '/libA.dart'
- class B { }
- String bar() => true;
- void main() {expect(^)}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertNoSuggestions(kind: CompletionSuggestionKind.ARGUMENT_LIST);
- assertSuggestLocalFunction('bar', 'String');
- assertSuggestImportedFunction('hasLength', 'bool');
- assertSuggestImportedFunction('identical', 'bool');
- assertSuggestLocalClass('B');
- assertSuggestImportedClass('Object');
- assertNotSuggested('main');
- assertNotSuggested('baz');
- assertNotSuggested('print');
- });
- }
-
- test_ArgumentList_InstanceCreationExpression_functionalArg() {
- // ArgumentList InstanceCreationExpression ExpressionStatement Block
- addSource(
- '/libA.dart',
- '''
- library A;
- class A { A(f()) { } }
- bool hasLength(int expected) { }
- void baz() { }''');
- addTestSource('''
- import 'dart:async';
- import '/libA.dart';
- class B { }
- String bar() => true;
- void main() {new A(^)}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertNoSuggestions(kind: CompletionSuggestionKind.ARGUMENT_LIST);
- assertSuggestLocalFunction('bar', 'String',
- kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestImportedFunction('hasLength', 'bool',
- kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestImportedFunction('identical', 'bool',
- kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestLocalClass('B', kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestImportedClass('A',
- kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestImportedClass('Object',
- kind: CompletionSuggestionKind.IDENTIFIER);
- assertNotSuggested('main');
- assertNotSuggested('baz');
- assertNotSuggested('print');
- });
- }
-
- test_ArgumentList_InstanceCreationExpression_typedefArg() {
- // ArgumentList InstanceCreationExpression ExpressionStatement Block
- addSource(
- '/libA.dart',
- '''
- library A;
- typedef Funct();
- class A { A(Funct f) { } }
- bool hasLength(int expected) { }
- void baz() { }''');
- addTestSource('''
- import 'dart:async';
- import '/libA.dart';
- class B { }
- String bar() => true;
- void main() {new A(^)}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertNoSuggestions(kind: CompletionSuggestionKind.ARGUMENT_LIST);
- assertSuggestLocalFunction('bar', 'String',
- kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestImportedFunction('hasLength', 'bool',
- kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestImportedFunction('identical', 'bool',
- kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestLocalClass('B', kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestImportedClass('A',
- kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestImportedClass('Object',
- kind: CompletionSuggestionKind.IDENTIFIER);
- assertNotSuggested('main');
- assertNotSuggested('baz');
- assertNotSuggested('print');
- });
- }
-
- test_ArgumentList_local_function() {
- // ArgumentList MethodInvocation ExpressionStatement Block
- addSource(
- '/libA.dart',
- '''
- library A;
- bool hasLength(int expected) { }
- void baz() { }''');
- addTestSource('''
- import '/libA.dart'
- expect(arg) { }
- class B { }
- String bar() => true;
- void main() {expect(^)}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertNoSuggestions(kind: CompletionSuggestionKind.ARGUMENT_LIST);
- assertSuggestLocalFunction('bar', 'String');
- assertSuggestImportedFunction('hasLength', 'bool');
- assertSuggestImportedFunction('identical', 'bool');
- assertSuggestLocalClass('B');
- assertSuggestImportedClass('Object');
- assertNotSuggested('main');
- assertNotSuggested('baz');
- assertNotSuggested('print');
- });
- }
-
- test_ArgumentList_local_method() {
- // ArgumentList MethodInvocation ExpressionStatement Block
- addSource(
- '/libA.dart',
- '''
- library A;
- bool hasLength(int expected) { }
- void baz() { }''');
- addTestSource('''
- import '/libA.dart'
- class B {
- expect(arg) { }
- void foo() {expect(^)}}
- String bar() => true;''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertNoSuggestions(kind: CompletionSuggestionKind.ARGUMENT_LIST);
- assertSuggestLocalFunction('bar', 'String');
- assertSuggestImportedFunction('hasLength', 'bool');
- assertSuggestImportedFunction('identical', 'bool');
- assertSuggestLocalClass('B');
- assertSuggestImportedClass('Object');
- assertNotSuggested('main');
- assertNotSuggested('baz');
- assertNotSuggested('print');
- });
- }
-
- test_ArgumentList_MethodInvocation_functionalArg() {
- // ArgumentList MethodInvocation ExpressionStatement Block
- addSource(
- '/libA.dart',
- '''
- library A;
- class A { A(f()) { } }
- bool hasLength(int expected) { }
- void baz() { }''');
- addTestSource('''
- import 'dart:async';
- import '/libA.dart';
- class B { }
- String bar(f()) => true;
- void main() {bar(^);}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertNoSuggestions(kind: CompletionSuggestionKind.ARGUMENT_LIST);
- assertSuggestLocalFunction('bar', 'String',
- kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestImportedFunction('hasLength', 'bool',
- kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestImportedFunction('identical', 'bool',
- kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestLocalClass('B', kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestImportedClass('A',
- kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestImportedClass('Object',
- kind: CompletionSuggestionKind.IDENTIFIER);
- assertNotSuggested('main');
- assertNotSuggested('baz');
- assertNotSuggested('print');
- });
- }
-
- test_ArgumentList_MethodInvocation_methodArg() {
- // ArgumentList MethodInvocation ExpressionStatement Block
- addSource(
- '/libA.dart',
- '''
- library A;
- class A { A(f()) { } }
- bool hasLength(int expected) { }
- void baz() { }''');
- addTestSource('''
- import 'dart:async';
- import '/libA.dart';
- class B { String bar(f()) => true; }
- void main() {new B().bar(^);}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertNoSuggestions(kind: CompletionSuggestionKind.ARGUMENT_LIST);
- assertSuggestImportedFunction('hasLength', 'bool',
- kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestImportedFunction('identical', 'bool',
- kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestLocalClass('B', kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestImportedClass('A',
- kind: CompletionSuggestionKind.IDENTIFIER);
- assertSuggestImportedClass('Object',
- kind: CompletionSuggestionKind.IDENTIFIER);
- assertNotSuggested('main');
- assertNotSuggested('baz');
- assertNotSuggested('print');
- });
- }
-
- test_ArgumentList_namedParam() {
- // SimpleIdentifier NamedExpression ArgumentList MethodInvocation
- // ExpressionStatement
- addSource(
- '/libA.dart',
- '''
- library A;
- bool hasLength(int expected) { }''');
- addTestSource('''
- import '/libA.dart'
- String bar() => true;
- void main() {expect(foo: ^)}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalFunction('bar', 'String');
- assertSuggestImportedFunction('hasLength', 'bool');
- assertNotSuggested('main');
- });
- }
-
- test_AsExpression() {
- // SimpleIdentifier TypeName AsExpression
- addTestSource('''
- class A {var b; X _c; foo() {var a; (a as ^).foo();}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertNotSuggested('b');
- assertNotSuggested('_c');
- assertSuggestImportedClass('Object');
- assertSuggestLocalClass('A');
- assertNotSuggested('==');
- });
- }
-
- test_AssignmentExpression_name() {
- // SimpleIdentifier VariableDeclaration VariableDeclarationList
- // VariableDeclarationStatement Block
- addTestSource('class A {} main() {int a; int ^b = 1;}');
- computeFast();
- return computeFull((bool result) {
- assertNoSuggestions();
- });
- }
-
- test_AssignmentExpression_RHS() {
- // SimpleIdentifier VariableDeclaration VariableDeclarationList
- // VariableDeclarationStatement Block
- addTestSource('class A {} main() {int a; int b = ^}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalVariable('a', 'int');
- assertSuggestLocalFunction('main', null);
- assertSuggestLocalClass('A');
- assertSuggestImportedClass('Object');
- });
- }
-
- test_AssignmentExpression_type() {
- // SimpleIdentifier TypeName VariableDeclarationList
- // VariableDeclarationStatement Block
- addTestSource('''
- class A {} main() {
- int a;
- ^ b = 1;}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalClass('A');
- assertSuggestImportedClass('int');
- // TODO (danrubel) When entering 1st of 2 identifiers on assignment LHS
- // the user may be either (1) entering a type for the assignment
- // or (2) starting a new statement.
- // Consider suggesting only types
- // if only spaces separates the 1st and 2nd identifiers.
- //assertNotSuggested('a');
- //assertNotSuggested('main');
- //assertNotSuggested('identical');
- });
- }
-
- test_AssignmentExpression_type_newline() {
- // SimpleIdentifier TypeName VariableDeclarationList
- // VariableDeclarationStatement Block
- addTestSource('''
- class A {} main() {
- int a;
- ^
- b = 1;}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalClass('A');
- assertSuggestImportedClass('int');
- // Allow non-types preceding an identifier on LHS of assignment
- // if newline follows first identifier
- // because user is probably starting a new statement
- assertSuggestLocalVariable('a', 'int');
- assertSuggestLocalFunction('main', null);
- assertSuggestImportedFunction('identical', 'bool');
- });
- }
-
- test_AssignmentExpression_type_partial() {
- // SimpleIdentifier TypeName VariableDeclarationList
- // VariableDeclarationStatement Block
- addTestSource('''
- class A {} main() {
- int a;
- int^ b = 1;}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 3);
- expect(request.replacementLength, 3);
- assertSuggestLocalClass('A');
- assertSuggestImportedClass('int');
- // TODO (danrubel) When entering 1st of 2 identifiers on assignment LHS
- // the user may be either (1) entering a type for the assignment
- // or (2) starting a new statement.
- // Consider suggesting only types
- // if only spaces separates the 1st and 2nd identifiers.
- //assertNotSuggested('a');
- //assertNotSuggested('main');
- //assertNotSuggested('identical');
- });
- }
-
- test_AssignmentExpression_type_partial_newline() {
- // SimpleIdentifier TypeName VariableDeclarationList
- // VariableDeclarationStatement Block
- addTestSource('''
- class A {} main() {
- int a;
- i^
- b = 1;}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 1);
- expect(request.replacementLength, 1);
- assertSuggestLocalClass('A');
- assertSuggestImportedClass('int');
- // Allow non-types preceding an identifier on LHS of assignment
- // if newline follows first identifier
- // because user is probably starting a new statement
- assertSuggestLocalVariable('a', 'int');
- assertSuggestLocalFunction('main', null);
- assertSuggestImportedFunction('identical', 'bool');
- });
- }
-
- test_AwaitExpression() {
- // SimpleIdentifier AwaitExpression ExpressionStatement
- addTestSource('''
- class A {int x; int y() => 0;}
- main() async {A a; await ^}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalVariable('a', 'A');
- assertSuggestLocalFunction('main', null);
- assertSuggestLocalClass('A');
- assertSuggestImportedClass('Object');
- });
- }
-
- test_BinaryExpression_LHS() {
- // SimpleIdentifier BinaryExpression VariableDeclaration
- // VariableDeclarationList VariableDeclarationStatement
- addTestSource('main() {int a = 1, b = ^ + 2;}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalVariable('a', 'int');
- assertSuggestImportedClass('Object');
- assertNotSuggested('b');
- });
- }
-
- test_BinaryExpression_RHS() {
- // SimpleIdentifier BinaryExpression VariableDeclaration
- // VariableDeclarationList VariableDeclarationStatement
- addTestSource('main() {int a = 1, b = 2 + ^;}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalVariable('a', 'int');
- assertSuggestImportedClass('Object');
- assertNotSuggested('b');
- assertNotSuggested('==');
- });
- }
-
- test_Block() {
- // Block BlockFunctionBody MethodDeclaration
- addSource(
- '/testAB.dart',
- '''
- export "dart:math" hide max;
- class A {int x;}
- @deprecated D1() {int x;}
- class _B {boo() { partBoo() {}} }''');
- addSource(
- '/testCD.dart',
- '''
- String T1;
- var _T2;
- class C { }
- class D { }''');
- addSource(
- '/testEEF.dart',
- '''
- class EE { }
- class F { }''');
- addSource('/testG.dart', 'class G { }');
- addSource(
- '/testH.dart',
- '''
- class H { }
- int T3;
- var _T4;'''); // not imported
- addTestSource('''
- import "/testAB.dart";
- import "/testCD.dart" hide D;
- import "/testEEF.dart" show EE;
- import "/testG.dart" as g;
- int T5;
- var _T6;
- String get T7 => 'hello';
- set T8(int value) { partT8() {} }
- Z D2() {int x;}
- class X {
- int get clog => 8;
- set blog(value) { }
- a() {
- var f;
- localF(int arg1) { }
- {var x;}
- ^ var r;
- }
- void b() { }}
- class Z { }''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
-
- assertSuggestLocalClass('X', elemFile: testFile);
- assertSuggestLocalClass('Z');
- assertSuggestLocalMethod('a', 'X', null);
- assertSuggestLocalMethod('b', 'X', 'void');
- assertSuggestLocalFunction('localF', null);
- assertSuggestLocalVariable('f', null);
- // Don't suggest locals out of scope
- assertNotSuggested('r');
- assertNotSuggested('x');
- assertNotSuggested('partT8');
-
- assertSuggestImportedClass('A', elemFile: '/testAB.dart');
- assertNotSuggested('_B');
- assertSuggestImportedClass('C');
- assertNotSuggested('partBoo');
- // hidden element suggested as low relevance
- // but imported results are partially filtered
- //assertSuggestImportedClass('D', COMPLETION_RELEVANCE_LOW);
- //assertSuggestImportedFunction(
- // 'D1', null, true, COMPLETION_RELEVANCE_LOW);
- assertSuggestLocalFunction('D2', 'Z');
- assertSuggestImportedClass('EE');
- // hidden element suggested as low relevance
- //assertSuggestImportedClass('F', COMPLETION_RELEVANCE_LOW);
- // Suggested by LibraryPrefixContributor
- assertNotSuggested('g');
- assertNotSuggested('G');
- //assertSuggestImportedClass('H', COMPLETION_RELEVANCE_LOW);
- assertSuggestImportedClass('Object');
- assertSuggestImportedFunction('min', 'num');
- //assertSuggestImportedFunction(
- // 'max',
- // 'num',
- // false,
- // COMPLETION_RELEVANCE_LOW);
- if (contributor is ImportedReferenceContributor) {
- // TODO(danrubel) should be top level var suggestion
- assertSuggestGetter('T1', 'String');
- }
- assertNotSuggested('_T2');
- //assertSuggestImportedTopLevelVar('T3', 'int', COMPLETION_RELEVANCE_LOW);
- assertNotSuggested('_T4');
- assertSuggestLocalTopLevelVar('T5', 'int');
- assertSuggestLocalTopLevelVar('_T6', null,
- relevance: DART_RELEVANCE_DEFAULT);
- assertNotSuggested('==');
- assertSuggestLocalGetter('T7', 'String');
- assertSuggestLocalSetter('T8');
- assertSuggestLocalGetter('clog', 'int');
- assertSuggestLocalSetter('blog');
- // TODO (danrubel) suggest HtmlElement as low relevance
- assertNotSuggested('HtmlElement');
- assertSuggestImportedClass('Uri');
- assertNotSuggested('parseIPv6Address');
- assertNotSuggested('parseHex');
- });
- }
-
- test_Block_final() {
- // Block BlockFunctionBody MethodDeclaration
- addSource(
- '/testAB.dart',
- '''
- export "dart:math" hide max;
- class A {int x;}
- @deprecated D1() {int x;}
- class _B {boo() { partBoo() {}} }''');
- addSource(
- '/testCD.dart',
- '''
- String T1;
- var _T2;
- class C { }
- class D { }''');
- addSource(
- '/testEEF.dart',
- '''
- class EE { }
- class F { }''');
- addSource('/testG.dart', 'class G { }');
- addSource(
- '/testH.dart',
- '''
- class H { }
- int T3;
- var _T4;'''); // not imported
- addTestSource('''
- import "/testAB.dart";
- import "/testCD.dart" hide D;
- import "/testEEF.dart" show EE;
- import "/testG.dart" as g;
- int T5;
- var _T6;
- String get T7 => 'hello';
- set T8(int value) { partT8() {} }
- Z D2() {int x;}
- class X {
- int get clog => 8;
- set blog(value) { }
- a() {
- var f;
- localF(int arg1) { }
- {var x;}
- final ^
- }
- void b() { }}
- class Z { }''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
-
- assertSuggestLocalClass('X');
- assertSuggestLocalClass('Z');
- assertNotSuggested('a');
- assertNotSuggested('b');
- assertNotSuggested('localF');
- assertNotSuggested('f');
- // Don't suggest locals out of scope
- assertNotSuggested('r');
- assertNotSuggested('x');
- assertNotSuggested('partT8');
-
- assertSuggestImportedClass('A');
- assertNotSuggested('_B');
- assertSuggestImportedClass('C');
- assertNotSuggested('partBoo');
- // hidden element suggested as low relevance
- // but imported results are partially filtered
- //assertSuggestImportedClass('D', COMPLETION_RELEVANCE_LOW);
- //assertSuggestImportedFunction(
- // 'D1', null, true, COMPLETION_RELEVANCE_LOW);
- assertNotSuggested('D2');
- assertSuggestImportedClass('EE');
- // hidden element suggested as low relevance
- //assertSuggestImportedClass('F', COMPLETION_RELEVANCE_LOW);
- // Suggested by LibraryPrefixContributor
- assertNotSuggested('g');
- assertNotSuggested('G');
- //assertSuggestImportedClass('H', COMPLETION_RELEVANCE_LOW);
- assertSuggestImportedClass('Object');
- assertNotSuggested('min');
- //assertSuggestImportedFunction(
- // 'max',
- // 'num',
- // false,
- // COMPLETION_RELEVANCE_LOW);
- assertNotSuggested('T1');
- assertNotSuggested('_T2');
- //assertSuggestImportedTopLevelVar('T3', 'int', COMPLETION_RELEVANCE_LOW);
- assertNotSuggested('_T4');
- assertNotSuggested('T5');
- assertNotSuggested('_T6');
- assertNotSuggested('==');
- assertNotSuggested('T7');
- assertNotSuggested('T8');
- assertNotSuggested('clog');
- assertNotSuggested('blog');
- // TODO (danrubel) suggest HtmlElement as low relevance
- assertNotSuggested('HtmlElement');
- assertSuggestImportedClass('Uri');
- assertNotSuggested('parseIPv6Address');
- assertNotSuggested('parseHex');
- });
- }
-
- test_Block_final2() {
- addTestSource('main() {final S^ v;}');
- computeFast();
- return computeFull((bool result) {
- assertSuggestImportedClass('String');
- });
- }
-
- test_Block_final3() {
- addTestSource('main() {final ^ v;}');
- computeFast();
- return computeFull((bool result) {
- assertSuggestImportedClass('String');
- });
- }
-
- test_Block_final_final() {
- // Block BlockFunctionBody MethodDeclaration
- addSource(
- '/testAB.dart',
- '''
- export "dart:math" hide max;
- class A {int x;}
- @deprecated D1() {int x;}
- class _B {boo() { partBoo() {}} }''');
- addSource(
- '/testCD.dart',
- '''
- String T1;
- var _T2;
- class C { }
- class D { }''');
- addSource(
- '/testEEF.dart',
- '''
- class EE { }
- class F { }''');
- addSource('/testG.dart', 'class G { }');
- addSource(
- '/testH.dart',
- '''
- class H { }
- int T3;
- var _T4;'''); // not imported
- addTestSource('''
- import "/testAB.dart";
- import "/testCD.dart" hide D;
- import "/testEEF.dart" show EE;
- import "/testG.dart" as g;
- int T5;
- var _T6;
- String get T7 => 'hello';
- set T8(int value) { partT8() {} }
- Z D2() {int x;}
- class X {
- int get clog => 8;
- set blog(value) { }
- a() {
- final ^
- final var f;
- localF(int arg1) { }
- {var x;}
- }
- void b() { }}
- class Z { }''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
-
- assertSuggestLocalClass('X');
- assertSuggestLocalClass('Z');
- assertNotSuggested('a');
- assertNotSuggested('b');
- assertNotSuggested('localF');
- assertNotSuggested('f');
- // Don't suggest locals out of scope
- assertNotSuggested('r');
- assertNotSuggested('x');
- assertNotSuggested('partT8');
-
- assertSuggestImportedClass('A');
- assertNotSuggested('_B');
- assertSuggestImportedClass('C');
- assertNotSuggested('partBoo');
- // hidden element suggested as low relevance
- // but imported results are partially filtered
- //assertSuggestImportedClass('D', COMPLETION_RELEVANCE_LOW);
- //assertSuggestImportedFunction(
- // 'D1', null, true, COMPLETION_RELEVANCE_LOW);
- assertNotSuggested('D2');
- assertSuggestImportedClass('EE');
- // hidden element suggested as low relevance
- //assertSuggestImportedClass('F', COMPLETION_RELEVANCE_LOW);
- // Suggested by LibraryPrefixContributor
- assertNotSuggested('g');
- assertNotSuggested('G');
- //assertSuggestImportedClass('H', COMPLETION_RELEVANCE_LOW);
- assertSuggestImportedClass('Object');
- assertNotSuggested('min');
- //assertSuggestImportedFunction(
- // 'max',
- // 'num',
- // false,
- // COMPLETION_RELEVANCE_LOW);
- assertNotSuggested('T1');
- assertNotSuggested('_T2');
- //assertSuggestImportedTopLevelVar('T3', 'int', COMPLETION_RELEVANCE_LOW);
- assertNotSuggested('_T4');
- assertNotSuggested('T5');
- assertNotSuggested('_T6');
- assertNotSuggested('==');
- assertNotSuggested('T7');
- assertNotSuggested('T8');
- assertNotSuggested('clog');
- assertNotSuggested('blog');
- // TODO (danrubel) suggest HtmlElement as low relevance
- assertNotSuggested('HtmlElement');
- assertSuggestImportedClass('Uri');
- assertNotSuggested('parseIPv6Address');
- assertNotSuggested('parseHex');
- });
- }
-
- test_Block_final_var() {
- // Block BlockFunctionBody MethodDeclaration
- addSource(
- '/testAB.dart',
- '''
- export "dart:math" hide max;
- class A {int x;}
- @deprecated D1() {int x;}
- class _B {boo() { partBoo() {}} }''');
- addSource(
- '/testCD.dart',
- '''
- String T1;
- var _T2;
- class C { }
- class D { }''');
- addSource(
- '/testEEF.dart',
- '''
- class EE { }
- class F { }''');
- addSource('/testG.dart', 'class G { }');
- addSource(
- '/testH.dart',
- '''
- class H { }
- int T3;
- var _T4;'''); // not imported
- addTestSource('''
- import "/testAB.dart";
- import "/testCD.dart" hide D;
- import "/testEEF.dart" show EE;
- import "/testG.dart" as g;
- int T5;
- var _T6;
- String get T7 => 'hello';
- set T8(int value) { partT8() {} }
- Z D2() {int x;}
- class X {
- int get clog => 8;
- set blog(value) { }
- a() {
- final ^
- var f;
- localF(int arg1) { }
- {var x;}
- }
- void b() { }}
- class Z { }''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
-
- assertSuggestLocalClass('X');
- assertSuggestLocalClass('Z');
- assertNotSuggested('a');
- assertNotSuggested('b');
- assertNotSuggested('localF');
- assertNotSuggested('f');
- // Don't suggest locals out of scope
- assertNotSuggested('r');
- assertNotSuggested('x');
- assertNotSuggested('partT8');
-
- assertSuggestImportedClass('A');
- assertNotSuggested('_B');
- assertSuggestImportedClass('C');
- assertNotSuggested('partBoo');
- // hidden element suggested as low relevance
- // but imported results are partially filtered
- //assertSuggestImportedClass('D', COMPLETION_RELEVANCE_LOW);
- //assertSuggestImportedFunction(
- // 'D1', null, true, COMPLETION_RELEVANCE_LOW);
- assertNotSuggested('D2');
- assertSuggestImportedClass('EE');
- // hidden element suggested as low relevance
- //assertSuggestImportedClass('F', COMPLETION_RELEVANCE_LOW);
- // Suggested by LibraryPrefixContributor
- assertNotSuggested('g');
- assertNotSuggested('G');
- //assertSuggestImportedClass('H', COMPLETION_RELEVANCE_LOW);
- assertSuggestImportedClass('Object');
- assertNotSuggested('min');
- //assertSuggestImportedFunction(
- // 'max',
- // 'num',
- // false,
- // COMPLETION_RELEVANCE_LOW);
- assertNotSuggested('T1');
- assertNotSuggested('_T2');
- //assertSuggestImportedTopLevelVar('T3', 'int', COMPLETION_RELEVANCE_LOW);
- assertNotSuggested('_T4');
- assertNotSuggested('T5');
- assertNotSuggested('_T6');
- assertNotSuggested('==');
- assertNotSuggested('T7');
- assertNotSuggested('T8');
- assertNotSuggested('clog');
- assertNotSuggested('blog');
- // TODO (danrubel) suggest HtmlElement as low relevance
- assertNotSuggested('HtmlElement');
- assertSuggestImportedClass('Uri');
- assertNotSuggested('parseIPv6Address');
- assertNotSuggested('parseHex');
- });
- }
-
- test_Block_identifier_partial() {
- addSource(
- '/testAB.dart',
- '''
- export "dart:math" hide max;
- class A {int x;}
- @deprecated D1() {int x;}
- class _B { }''');
- addSource(
- '/testCD.dart',
- '''
- String T1;
- var _T2;
- class C { }
- class D { }''');
- addSource(
- '/testEEF.dart',
- '''
- class EE { }
- class F { }''');
- addSource('/testG.dart', 'class G { }');
- addSource(
- '/testH.dart',
- '''
- class H { }
- class D3 { }
- int T3;
- var _T4;'''); // not imported
- addTestSource('''
- import "/testAB.dart";
- import "/testCD.dart" hide D;
- import "/testEEF.dart" show EE;
- import "/testG.dart" as g;
- int T5;
- var _T6;
- Z D2() {int x;}
- class X {a() {var f; {var x;} D^ var r;} void b() { }}
- class Z { }''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 1);
- expect(request.replacementLength, 1);
-
- assertSuggestLocalClass('X');
- assertSuggestLocalClass('Z');
- assertSuggestLocalMethod('a', 'X', null);
- assertSuggestLocalMethod('b', 'X', 'void');
- assertSuggestLocalVariable('f', null);
- // Don't suggest locals out of scope
- assertNotSuggested('r');
- assertNotSuggested('x');
-
- // imported elements are portially filtered
- //assertSuggestImportedClass('A');
- assertNotSuggested('_B');
- //assertSuggestImportedClass('C');
- // hidden element suggested as low relevance
- assertSuggestImportedClass('D',
- relevance: DART_RELEVANCE_LOW, importUri: 'testCD.dart');
- assertSuggestImportedFunction('D1', null,
- deprecated: true, relevance: DART_RELEVANCE_LOW);
- assertSuggestLocalFunction('D2', 'Z');
- // unimported elements suggested with low relevance
- assertSuggestImportedClass('D3',
- relevance: DART_RELEVANCE_LOW, importUri: 'testH.dart');
- //assertSuggestImportedClass('EE');
- // hidden element suggested as low relevance
- //assertSuggestImportedClass('F', COMPLETION_RELEVANCE_LOW);
- //assertSuggestLibraryPrefix('g');
- assertNotSuggested('G');
- //assertSuggestImportedClass('H', COMPLETION_RELEVANCE_LOW);
- //assertSuggestImportedClass('Object');
- //assertSuggestImportedFunction('min', 'num', false);
- //assertSuggestImportedFunction(
- // 'max',
- // 'num',
- // false,
- // COMPLETION_RELEVANCE_LOW);
- //assertSuggestTopLevelVarGetterSetter('T1', 'String');
- assertNotSuggested('_T2');
- //assertSuggestImportedTopLevelVar('T3', 'int', COMPLETION_RELEVANCE_LOW);
- assertNotSuggested('_T4');
- //assertSuggestLocalTopLevelVar('T5', 'int');
- //assertSuggestLocalTopLevelVar('_T6', null);
- assertNotSuggested('==');
- // TODO (danrubel) suggest HtmlElement as low relevance
- assertNotSuggested('HtmlElement');
- });
- }
-
- test_Block_inherited_imported() {
- // Block BlockFunctionBody MethodDeclaration ClassDeclaration
- addSource(
- '/testB.dart',
- '''
- lib B;
- class F { var f1; f2() { } get f3 => 0; set f4(fx) { } var _pf; }
- class E extends F { var e1; e2() { } }
- class I { int i1; i2() { } }
- class M { var m1; int m2() { } }''');
- addTestSource('''
- import "/testB.dart";
- class A extends E implements I with M {a() {^}}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertNotSuggested('e1');
- assertNotSuggested('f1');
- assertNotSuggested('i1');
- assertNotSuggested('m1');
- assertNotSuggested('f3');
- assertNotSuggested('f4');
- assertNotSuggested('e2');
- assertNotSuggested('f2');
- assertNotSuggested('i2');
- assertNotSuggested('m2');
- assertNotSuggested('==');
- });
- }
-
- test_Block_inherited_local() {
- // Block BlockFunctionBody MethodDeclaration ClassDeclaration
- addTestSource('''
- class F { var f1; f2() { } get f3 => 0; set f4(fx) { } }
- class E extends F { var e1; e2() { } }
- class I { int i1; i2() { } }
- class M { var m1; int m2() { } }
- class A extends E implements I with M {a() {^}}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalField('e1', null);
- assertSuggestLocalField('f1', null);
- assertSuggestLocalField('i1', 'int');
- assertSuggestLocalField('m1', null);
- assertSuggestLocalGetter('f3', null);
- assertSuggestLocalSetter('f4');
- assertSuggestLocalMethod('e2', 'E', null);
- assertSuggestLocalMethod('f2', 'F', null);
- assertSuggestLocalMethod('i2', 'I', null);
- assertSuggestLocalMethod('m2', 'M', 'int');
- });
- }
-
- test_Block_local_function() {
- addSource(
- '/testAB.dart',
- '''
- export "dart:math" hide max;
- class A {int x;}
- @deprecated D1() {int x;}
- class _B {boo() { partBoo() {}} }''');
- addSource(
- '/testCD.dart',
- '''
- String T1;
- var _T2;
- class C { }
- class D { }''');
- addSource(
- '/testEEF.dart',
- '''
- class EE { }
- class F { }''');
- addSource('/testG.dart', 'class G { }');
- addSource(
- '/testH.dart',
- '''
- class H { }
- int T3;
- var _T4;'''); // not imported
- addTestSource('''
- import "/testAB.dart";
- import "/testCD.dart" hide D;
- import "/testEEF.dart" show EE;
- import "/testG.dart" as g;
- int T5;
- var _T6;
- String get T7 => 'hello';
- set T8(int value) { partT8() {} }
- Z D2() {int x;}
- class X {
- int get clog => 8;
- set blog(value) { }
- a() {
- var f;
- localF(int arg1) { }
- {var x;}
- p^ var r;
- }
- void b() { }}
- class Z { }''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 1);
- expect(request.replacementLength, 1);
-
- assertNotSuggested('partT8');
- assertNotSuggested('partBoo');
- assertNotSuggested('parseIPv6Address');
- assertNotSuggested('parseHex');
- });
- }
-
- test_Block_unimported() {
- addPackageSource('myBar', 'bar.dart', 'class Foo2 { Foo2() { } }');
- addSource(
- '/proj/testAB.dart', 'import "package:myBar/bar.dart"; class Foo { }');
- testFile = '/proj/completionTest.dart';
- addTestSource('class C {foo(){F^}}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 1);
- expect(request.replacementLength, 1);
- assertSuggestImportedClass('Foo',
- relevance: DART_RELEVANCE_LOW, importUri: 'testAB.dart');
- // TODO(danrubel) implement
- assertSuggestImportedClass('Foo2',
- relevance: DART_RELEVANCE_LOW, importUri: 'package:myBar/bar.dart');
- assertSuggestImportedClass('Future',
- relevance: DART_RELEVANCE_LOW, importUri: 'dart:async');
- });
- }
-
- test_CascadeExpression_selector1() {
- // PropertyAccess CascadeExpression ExpressionStatement Block
- addSource(
- '/testB.dart',
- '''
- class B { }''');
- addTestSource('''
- import "/testB.dart";
- class A {var b; X _c;}
- class X{}
- // looks like a cascade to the parser
- // but the user is trying to get completions for a non-cascade
- main() {A a; a.^.z}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestInvocationField('b', null);
- assertSuggestInvocationField('_c', 'X');
- assertNotSuggested('Object');
- assertNotSuggested('A');
- assertNotSuggested('B');
- assertNotSuggested('X');
- assertNotSuggested('z');
- assertNotSuggested('==');
- });
- }
-
- test_CascadeExpression_selector2() {
- // SimpleIdentifier PropertyAccess CascadeExpression ExpressionStatement
- addSource(
- '/testB.dart',
- '''
- class B { }''');
- addTestSource('''
- import "/testB.dart";
- class A {var b; X _c;}
- class X{}
- main() {A a; a..^z}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 1);
- assertSuggestInvocationField('b', null);
- assertSuggestInvocationField('_c', 'X');
- assertNotSuggested('Object');
- assertNotSuggested('A');
- assertNotSuggested('B');
- assertNotSuggested('X');
- assertNotSuggested('z');
- assertNotSuggested('==');
- });
- }
-
- test_CascadeExpression_selector2_withTrailingReturn() {
- // PropertyAccess CascadeExpression ExpressionStatement Block
- addSource(
- '/testB.dart',
- '''
- class B { }''');
- addTestSource('''
- import "/testB.dart";
- class A {var b; X _c;}
- class X{}
- main() {A a; a..^ return}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestInvocationField('b', null);
- assertSuggestInvocationField('_c', 'X');
- assertNotSuggested('Object');
- assertNotSuggested('A');
- assertNotSuggested('B');
- assertNotSuggested('X');
- assertNotSuggested('z');
- assertNotSuggested('==');
- });
- }
-
- test_CascadeExpression_target() {
- // SimpleIdentifier CascadeExpression ExpressionStatement
- addTestSource('''
- class A {var b; X _c;}
- class X{}
- main() {A a; a^..b}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 1);
- expect(request.replacementLength, 1);
- assertNotSuggested('b');
- assertNotSuggested('_c');
- assertSuggestLocalVariable('a', 'A');
- assertSuggestLocalClass('A');
- assertSuggestLocalClass('X');
- // top level results are partially filtered
- //assertSuggestImportedClass('Object');
- assertNotSuggested('==');
- });
- }
-
- test_CatchClause_onType() {
- // TypeName CatchClause TryStatement
- addTestSource('class A {a() {try{var x;} on ^ {}}}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalClass('A');
- assertSuggestImportedClass('Object');
- assertNotSuggested('a');
- assertNotSuggested('x');
- });
- }
-
- test_CatchClause_onType_noBrackets() {
- // TypeName CatchClause TryStatement
- addTestSource('class A {a() {try{var x;} on ^}}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalClass('A', elemOffset: 6);
- assertSuggestImportedClass('Object');
- assertNotSuggested('x');
- });
- }
-
- test_CatchClause_typed() {
- // Block CatchClause TryStatement
- addTestSource('class A {a() {try{var x;} on E catch (e) {^}}}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestParameter('e', 'E');
- assertSuggestLocalMethod('a', 'A', null);
- assertSuggestImportedClass('Object');
- assertNotSuggested('x');
- });
- }
-
- test_CatchClause_untyped() {
- // Block CatchClause TryStatement
- addTestSource('class A {a() {try{var x;} catch (e, s) {^}}}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestParameter('e', null);
- assertSuggestParameter('s', 'StackTrace');
- assertSuggestLocalMethod('a', 'A', null);
- assertSuggestImportedClass('Object');
- assertNotSuggested('x');
- });
- }
-
- test_ClassDeclaration_body() {
- // ClassDeclaration CompilationUnit
- addSource(
- '/testB.dart',
- '''
- class B { }''');
- addTestSource('''
- import "testB.dart" as x;
- @deprecated class A {^}
- class _B {}
- A T;''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- CompletionSuggestion suggestionA = assertSuggestLocalClass('A',
- relevance: DART_RELEVANCE_LOW, isDeprecated: true);
- if (suggestionA != null) {
- expect(suggestionA.element.isDeprecated, isTrue);
- expect(suggestionA.element.isPrivate, isFalse);
- }
- CompletionSuggestion suggestionB = assertSuggestLocalClass('_B');
- if (suggestionB != null) {
- expect(suggestionB.element.isDeprecated, isFalse);
- expect(suggestionB.element.isPrivate, isTrue);
- }
- CompletionSuggestion suggestionO = assertSuggestImportedClass('Object');
- if (suggestionO != null) {
- expect(suggestionO.element.isDeprecated, isFalse);
- expect(suggestionO.element.isPrivate, isFalse);
- }
- assertNotSuggested('T');
- // Suggested by LibraryPrefixContributor
- assertNotSuggested('x');
- });
- }
-
- test_ClassDeclaration_body_final() {
- // ClassDeclaration CompilationUnit
- addSource(
- '/testB.dart',
- '''
- class B { }''');
- addTestSource('''
- import "testB.dart" as x;
- class A {final ^}
- class _B {}
- A T;''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalClass('A');
- assertSuggestLocalClass('_B');
- assertSuggestImportedClass('Object');
- assertNotSuggested('T');
- // Suggested by LibraryPrefixContributor
- assertNotSuggested('x');
- });
- }
-
- test_ClassDeclaration_body_final_field() {
- // ClassDeclaration CompilationUnit
- addSource(
- '/testB.dart',
- '''
- class B { }''');
- addTestSource('''
- import "testB.dart" as x;
- class A {final ^ A(){}}
- class _B {}
- A T;''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalClass('A');
- assertSuggestLocalClass('_B');
- assertSuggestImportedClass('String');
- assertNotSuggested('T');
- // Suggested by LibraryPrefixContributor
- assertNotSuggested('x');
- });
- }
-
- test_ClassDeclaration_body_final_field2() {
- // ClassDeclaration CompilationUnit
- addSource(
- '/testB.dart',
- '''
- class B { }''');
- addTestSource('''
- import "testB.dart" as Soo;
- class A {final S^ A();}
- class _B {}
- A Sew;''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 1);
- expect(request.replacementLength, 1);
- assertSuggestLocalClass('A');
- assertSuggestLocalClass('_B');
- assertSuggestImportedClass('String');
- assertNotSuggested('Sew');
- // Suggested by LibraryPrefixContributor
- assertNotSuggested('Soo');
- });
- }
-
- test_ClassDeclaration_body_final_final() {
- // ClassDeclaration CompilationUnit
- addSource(
- '/testB.dart',
- '''
- class B { }''');
- addTestSource('''
- import "testB.dart" as x;
- class A {final ^ final foo;}
- class _B {}
- A T;''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalClass('A');
- assertSuggestLocalClass('_B');
- assertSuggestImportedClass('Object');
- assertNotSuggested('T');
- // Suggested by LibraryPrefixContributor
- assertNotSuggested('x');
- });
- }
-
- test_ClassDeclaration_body_final_var() {
- // ClassDeclaration CompilationUnit
- addSource(
- '/testB.dart',
- '''
- class B { }''');
- addTestSource('''
- import "testB.dart" as x;
- class A {final ^ var foo;}
- class _B {}
- A T;''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalClass('A');
- assertSuggestLocalClass('_B');
- assertSuggestImportedClass('Object');
- assertNotSuggested('T');
- // Suggested by LibraryPrefixContributor
- assertNotSuggested('x');
- });
- }
-
- test_Combinator_hide() {
- // SimpleIdentifier HideCombinator ImportDirective
- addSource(
- '/testAB.dart',
- '''
- library libAB;
- part '/partAB.dart';
- class A { }
- class B { }''');
- addSource(
- '/partAB.dart',
- '''
- part of libAB;
- var T1;
- PB F1() => new PB();
- class PB { }''');
- addSource(
- '/testCD.dart',
- '''
- class C { }
- class D { }''');
- addTestSource('''
- import "/testAB.dart" hide ^;
- import "/testCD.dart";
- class X {}''');
- computeFast();
- return computeFull((bool result) {
- assertNoSuggestions();
- });
- }
-
- test_Combinator_show() {
- // SimpleIdentifier HideCombinator ImportDirective
- addSource(
- '/testAB.dart',
- '''
- library libAB;
- part '/partAB.dart';
- class A { }
- class B { }''');
- addSource(
- '/partAB.dart',
- '''
- part of libAB;
- var T1;
- PB F1() => new PB();
- typedef PB2 F2(int blat);
- class Clz = Object with Object;
- class PB { }''');
- addSource(
- '/testCD.dart',
- '''
- class C { }
- class D { }''');
- addTestSource('''
- import "/testAB.dart" show ^;
- import "/testCD.dart";
- class X {}''');
- computeFast();
- return computeFull((bool result) {
- assertNoSuggestions();
- });
- }
-
- test_ConditionalExpression_elseExpression() {
- // SimpleIdentifier ConditionalExpression ReturnStatement
- addSource(
- '/testA.dart',
- '''
- int T1;
- F1() { }
- class A {int x;}''');
- addTestSource('''
- import "/testA.dart";
- int T2;
- F2() { }
- class B {int x;}
- class C {foo(){var f; {var x;} return a ? T1 : T^}}''');
- computeFast();
- return computeFull((bool result) {
- // top level results are partially filtered based on first char
- assertSuggestLocalTopLevelVar('T2', 'int');
- // TODO (danrubel) getter is being suggested instead of top level var
- //assertSuggestImportedTopLevelVar('T1', 'int');
- });
- }
-
- test_ConditionalExpression_elseExpression_empty() {
- // SimpleIdentifier ConditionalExpression ReturnStatement
- addSource(
- '/testA.dart',
- '''
- int T1;
- F1() { }
- class A {int x;}''');
- addTestSource('''
- import "/testA.dart";
- int T2;
- F2() { }
- class B {int x;}
- class C {foo(){var f; {var x;} return a ? T1 : ^}}''');
- computeFast();
- return computeFull((bool result) {
- assertNotSuggested('x');
- assertSuggestLocalVariable('f', null);
- assertSuggestLocalMethod('foo', 'C', null);
- assertSuggestLocalClass('C');
- assertSuggestLocalFunction('F2', null);
- assertSuggestLocalTopLevelVar('T2', 'int');
- assertSuggestImportedClass('A');
- assertSuggestImportedFunction('F1', null);
- // TODO (danrubel) getter is being suggested instead of top level var
- //assertSuggestImportedTopLevelVar('T1', 'int');
- });
- }
-
- test_ConditionalExpression_partial_thenExpression() {
- // SimpleIdentifier ConditionalExpression ReturnStatement
- addSource(
- '/testA.dart',
- '''
- int T1;
- F1() { }
- class A {int x;}''');
- addTestSource('''
- import "/testA.dart";
- int T2;
- F2() { }
- class B {int x;}
- class C {foo(){var f; {var x;} return a ? T^}}''');
- computeFast();
- return computeFull((bool result) {
- // top level results are partially filtered based on first char
- assertSuggestLocalTopLevelVar('T2', 'int');
- // TODO (danrubel) getter is being suggested instead of top level var
- //assertSuggestImportedTopLevelVar('T1', 'int');
- });
- }
-
- test_ConditionalExpression_partial_thenExpression_empty() {
- // SimpleIdentifier ConditionalExpression ReturnStatement
- addSource(
- '/testA.dart',
- '''
- int T1;
- F1() { }
- class A {int x;}''');
- addTestSource('''
- import "/testA.dart";
- int T2;
- F2() { }
- class B {int x;}
- class C {foo(){var f; {var x;} return a ? ^}}''');
- computeFast();
- return computeFull((bool result) {
- assertNotSuggested('x');
- assertSuggestLocalVariable('f', null);
- assertSuggestLocalMethod('foo', 'C', null);
- assertSuggestLocalClass('C');
- assertSuggestLocalFunction('F2', null);
- assertSuggestLocalTopLevelVar('T2', 'int');
- assertSuggestImportedClass('A');
- assertSuggestImportedFunction('F1', null);
- // TODO (danrubel) getter is being suggested instead of top level var
- //assertSuggestImportedTopLevelVar('T1', 'int');
- });
- }
-
- test_ConditionalExpression_thenExpression() {
- // SimpleIdentifier ConditionalExpression ReturnStatement
- addSource(
- '/testA.dart',
- '''
- int T1;
- F1() { }
- class A {int x;}''');
- addTestSource('''
- import "/testA.dart";
- int T2;
- F2() { }
- class B {int x;}
- class C {foo(){var f; {var x;} return a ? T^ : c}}''');
- computeFast();
- return computeFull((bool result) {
- // top level results are partially filtered based on first char
- assertSuggestLocalTopLevelVar('T2', 'int');
- // TODO (danrubel) getter is being suggested instead of top level var
- //assertSuggestImportedTopLevelVar('T1', 'int');
- });
- }
-
- test_ConstructorName_importedClass() {
- // SimpleIdentifier PrefixedIdentifier TypeName ConstructorName
- // InstanceCreationExpression
- addSource(
- '/testB.dart',
- '''
- lib B;
- int T1;
- F1() { }
- class X {X.c(); X._d(); z() {}}''');
- addTestSource('''
- import "/testB.dart";
- var m;
- main() {new X.^}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- // Suggested by NamedConstructorContributor
- assertNotSuggested('c');
- assertNotSuggested('F1');
- assertNotSuggested('T1');
- assertNotSuggested('_d');
- assertNotSuggested('z');
- assertNotSuggested('m');
- });
- }
-
- test_ConstructorName_importedFactory() {
- // SimpleIdentifier PrefixedIdentifier TypeName ConstructorName
- // InstanceCreationExpression
- addSource(
- '/testB.dart',
- '''
- lib B;
- int T1;
- F1() { }
- class X {factory X.c(); factory X._d(); z() {}}''');
- addTestSource('''
- import "/testB.dart";
- var m;
- main() {new X.^}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- // Suggested by NamedConstructorContributor
- assertNotSuggested('c');
- assertNotSuggested('F1');
- assertNotSuggested('T1');
- assertNotSuggested('_d');
- assertNotSuggested('z');
- assertNotSuggested('m');
- });
- }
-
- test_ConstructorName_importedFactory2() {
- // SimpleIdentifier PrefixedIdentifier TypeName ConstructorName
- // InstanceCreationExpression
- addTestSource('''
- main() {new String.fr^omCharCodes([]);}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 2);
- expect(request.replacementLength, 13);
- // Suggested by NamedConstructorContributor
- assertNotSuggested('fromCharCodes');
- assertNotSuggested('isEmpty');
- assertNotSuggested('isNotEmpty');
- assertNotSuggested('length');
- assertNotSuggested('Object');
- assertNotSuggested('String');
- });
- }
-
- test_ConstructorName_localClass() {
- // SimpleIdentifier PrefixedIdentifier TypeName ConstructorName
- // InstanceCreationExpression
- addTestSource('''
- int T1;
- F1() { }
- class X {X.c(); X._d(); z() {}}
- main() {new X.^}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- // Suggested by NamedConstructorContributor
- assertNotSuggested('c');
- assertNotSuggested('_d');
- assertNotSuggested('F1');
- assertNotSuggested('T1');
- assertNotSuggested('z');
- assertNotSuggested('m');
- });
- }
-
- test_ConstructorName_localFactory() {
- // SimpleIdentifier PrefixedIdentifier TypeName ConstructorName
- // InstanceCreationExpression
- addTestSource('''
- int T1;
- F1() { }
- class X {factory X.c(); factory X._d(); z() {}}
- main() {new X.^}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- // Suggested by NamedConstructorContributor
- assertNotSuggested('c');
- assertNotSuggested('_d');
- assertNotSuggested('F1');
- assertNotSuggested('T1');
- assertNotSuggested('z');
- assertNotSuggested('m');
- });
- }
-
- test_DefaultFormalParameter_named_expression() {
- // DefaultFormalParameter FormalParameterList MethodDeclaration
- addTestSource('''
- foo() { }
- void bar() { }
- class A {a(blat: ^) { }}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalFunction('foo', null);
- assertSuggestLocalMethod('a', 'A', null);
- assertSuggestLocalClass('A');
- assertSuggestImportedClass('String');
- assertSuggestImportedFunction('identical', 'bool');
- assertNotSuggested('bar');
- });
- }
-
- test_ExpressionStatement_identifier() {
- // SimpleIdentifier ExpressionStatement Block
- addSource(
- '/testA.dart',
- '''
- _B F1() { }
- class A {int x;}
- class _B { }''');
- addTestSource('''
- import "/testA.dart";
- typedef int F2(int blat);
- class Clz = Object with Object;
- class C {foo(){^} void bar() {}}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestImportedClass('A');
- assertSuggestImportedFunction('F1', '_B');
- assertSuggestLocalClass('C');
- assertSuggestLocalMethod('foo', 'C', null);
- assertSuggestLocalMethod('bar', 'C', 'void');
- assertSuggestLocalFunctionTypeAlias('F2', 'int');
- assertSuggestLocalClassTypeAlias('Clz');
- assertSuggestLocalClass('C');
- assertNotSuggested('x');
- assertNotSuggested('_B');
- });
- }
-
- test_ExpressionStatement_name() {
- // ExpressionStatement Block BlockFunctionBody MethodDeclaration
- addSource(
- '/testA.dart',
- '''
- B T1;
- class B{}''');
- addTestSource('''
- import "/testA.dart";
- class C {a() {C ^}}''');
- computeFast();
- return computeFull((bool result) {
- assertNoSuggestions();
- });
- }
-
- test_FieldDeclaration_name_typed() {
- // SimpleIdentifier VariableDeclaration VariableDeclarationList
- // FieldDeclaration
- addSource('/testA.dart', 'class A { }');
- addTestSource('''
- import "/testA.dart";
- class C {A ^}''');
- computeFast();
- return computeFull((bool result) {
- assertNoSuggestions();
- });
- }
-
- test_FieldDeclaration_name_var() {
- // SimpleIdentifier VariableDeclaration VariableDeclarationList
- // FieldDeclaration
- addSource('/testA.dart', 'class A { }');
- addTestSource('''
- import "/testA.dart";
- class C {var ^}''');
- computeFast();
- return computeFull((bool result) {
- assertNoSuggestions();
- });
- }
-
- test_FieldFormalParameter_in_non_constructor() {
- // SimpleIdentifer FieldFormalParameter FormalParameterList
- addTestSource('class A {B(this.^foo) {}}');
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 3);
- assertNoSuggestions();
- });
- }
-
- test_ForEachStatement_body_typed() {
- // Block ForEachStatement
- addTestSource('main(args) {for (int foo in bar) {^}}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestParameter('args', null);
- assertSuggestLocalVariable('foo', 'int');
- assertSuggestImportedClass('Object');
- });
- }
-
- test_ForEachStatement_body_untyped() {
- // Block ForEachStatement
- addTestSource('main(args) {for (foo in bar) {^}}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestParameter('args', null);
- assertSuggestLocalVariable('foo', null);
- assertSuggestImportedClass('Object');
- });
- }
-
- test_ForEachStatement_iterable() {
- // SimpleIdentifier ForEachStatement Block
- addTestSource('main(args) {for (int foo in ^) {}}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestParameter('args', null);
- assertSuggestImportedClass('Object');
- });
- }
-
- test_ForEachStatement_loopVariable() {
- // SimpleIdentifier ForEachStatement Block
- addTestSource('main(args) {for (^ in args) {}}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertNotSuggested('args');
- assertSuggestImportedClass('String');
- });
- }
-
- test_ForEachStatement_loopVariable_type() {
- // SimpleIdentifier ForEachStatement Block
- addTestSource('main(args) {for (^ foo in args) {}}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertNotSuggested('args');
- assertNotSuggested('foo');
- assertSuggestImportedClass('String');
- });
- }
-
- test_ForEachStatement_loopVariable_type2() {
- // DeclaredIdentifier ForEachStatement Block
- addTestSource('main(args) {for (S^ foo in args) {}}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 1);
- expect(request.replacementLength, 1);
- assertNotSuggested('args');
- assertNotSuggested('foo');
- assertSuggestImportedClass('String');
- });
- }
-
- test_FormalParameterList() {
- // FormalParameterList MethodDeclaration
- addTestSource('''
- foo() { }
- void bar() { }
- class A {a(^) { }}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertNotSuggested('foo');
- assertNotSuggested('a');
- assertSuggestLocalClass('A');
- assertSuggestImportedClass('String');
- assertNotSuggested('identical');
- assertNotSuggested('bar');
- });
- }
-
- test_ForStatement_body() {
- // Block ForStatement
- addTestSource('main(args) {for (int i; i < 10; ++i) {^}}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalVariable('i', 'int');
- assertSuggestImportedClass('Object');
- });
- }
-
- test_ForStatement_condition() {
- // SimpleIdentifier ForStatement
- addTestSource('main() {for (int index = 0; i^)}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 1);
- expect(request.replacementLength, 1);
- assertSuggestLocalVariable('index', 'int');
- });
- }
-
- test_ForStatement_initializer() {
- // SimpleIdentifier ForStatement
- addTestSource('main() {List a; for (^)}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalVariable('a', 'List');
- assertSuggestImportedClass('Object');
- assertSuggestImportedClass('int');
- });
- }
-
- test_ForStatement_updaters() {
- // SimpleIdentifier ForStatement
- addTestSource('main() {for (int index = 0; index < 10; i^)}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 1);
- expect(request.replacementLength, 1);
- assertSuggestLocalVariable('index', 'int');
- });
- }
-
- test_ForStatement_updaters_prefix_expression() {
- // SimpleIdentifier PrefixExpression ForStatement
- addTestSource('''
- void bar() { }
- main() {for (int index = 0; index < 10; ++i^)}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 1);
- expect(request.replacementLength, 1);
- assertSuggestLocalVariable('index', 'int');
- assertSuggestLocalFunction('main', null);
- assertNotSuggested('bar');
- });
- }
-
- test_FunctionDeclaration_returnType_afterComment() {
- // ClassDeclaration CompilationUnit
- addSource(
- '/testA.dart',
- '''
- int T1;
- F1() { }
- typedef D1();
- class C1 {C1(this.x) { } int x;}''');
- addTestSource('''
- import "/testA.dart";
- int T2;
- F2() { }
- typedef D2();
- class C2 { }
- /* */ ^ zoo(z) { } String name;''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestImportedClass('Object');
- assertNotSuggested('T1');
- assertNotSuggested('F1');
- assertSuggestImportedFunctionTypeAlias('D1', null);
- assertSuggestImportedClass('C1');
- assertNotSuggested('T2');
- assertNotSuggested('F2');
- assertSuggestLocalFunctionTypeAlias('D2', null);
- assertSuggestLocalClass('C2');
- assertNotSuggested('name');
- });
- }
-
- test_FunctionDeclaration_returnType_afterComment2() {
- // FunctionDeclaration ClassDeclaration CompilationUnit
- addSource(
- '/testA.dart',
- '''
- int T1;
- F1() { }
- typedef D1();
- class C1 {C1(this.x) { } int x;}''');
- addTestSource('''
- import "/testA.dart";
- int T2;
- F2() { }
- typedef D2();
- class C2 { }
- /** */ ^ zoo(z) { } String name;''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestImportedClass('Object');
- assertNotSuggested('T1');
- assertNotSuggested('F1');
- assertSuggestImportedFunctionTypeAlias('D1', null);
- assertSuggestImportedClass('C1');
- assertNotSuggested('T2');
- assertNotSuggested('F2');
- assertSuggestLocalFunctionTypeAlias('D2', null);
- assertSuggestLocalClass('C2');
- assertNotSuggested('name');
- });
- }
-
- test_FunctionDeclaration_returnType_afterComment3() {
- // FunctionDeclaration ClassDeclaration CompilationUnit
- addSource(
- '/testA.dart',
- '''
- int T1;
- F1() { }
- typedef D1();
- class C1 {C1(this.x) { } int x;}''');
- addTestSource('''
- import "/testA.dart";
- int T2;
- F2() { }
- typedef D2();
- /// some dartdoc
- class C2 { }
- ^ zoo(z) { } String name;''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestImportedClass('Object');
- assertNotSuggested('T1');
- assertNotSuggested('F1');
- assertSuggestImportedFunctionTypeAlias('D1', null);
- assertSuggestImportedClass('C1');
- assertNotSuggested('T2');
- assertNotSuggested('F2');
- assertSuggestLocalFunctionTypeAlias('D2', null);
- assertSuggestLocalClass('C2');
- assertNotSuggested('name');
- });
- }
-
- test_FunctionExpression_body_function() {
- // Block BlockFunctionBody FunctionExpression
- addTestSource('''
- void bar() { }
- String foo(List args) {x.then((R b) {^});}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- var f = assertSuggestLocalFunction('foo', 'String', deprecated: false);
- if (f != null) {
- expect(f.element.isPrivate, isFalse);
- }
- assertSuggestLocalFunction('bar', 'void');
- assertSuggestParameter('args', 'List');
- assertSuggestParameter('b', 'R');
- assertSuggestImportedClass('Object');
- });
- }
-
- test_IfStatement() {
- // SimpleIdentifier IfStatement
- addTestSource('''
- class A {var b; X _c; foo() {A a; if (true) ^}}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalField('b', null);
- assertSuggestLocalField('_c', 'X');
- assertSuggestImportedClass('Object');
- assertSuggestLocalClass('A');
- assertNotSuggested('==');
- });
- }
-
- test_IfStatement_condition() {
- // SimpleIdentifier IfStatement Block BlockFunctionBody
- addTestSource('''
- class A {int x; int y() => 0;}
- main(){var a; if (^)}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalVariable('a', null);
- assertSuggestLocalFunction('main', null);
- assertSuggestLocalClass('A');
- assertSuggestImportedClass('Object');
- });
- }
-
- test_IfStatement_empty() {
- // SimpleIdentifier IfStatement
- addTestSource('''
- class A {var b; X _c; foo() {A a; if (^) something}}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalField('b', null);
- assertSuggestLocalField('_c', 'X');
- assertSuggestImportedClass('Object');
- assertSuggestLocalClass('A');
- assertNotSuggested('==');
- });
- }
-
- test_IfStatement_invocation() {
- // SimpleIdentifier PrefixIdentifier IfStatement
- addTestSource('''
- main() {var a; if (a.^) something}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestInvocationMethod('toString', 'Object', 'String');
- assertNotSuggested('Object');
- assertNotSuggested('A');
- assertNotSuggested('==');
- });
- }
-
- test_ImportDirective_dart() {
- // SimpleStringLiteral ImportDirective
- addTestSource('''
- import "dart^";
- main() {}''');
- computeFast();
- return computeFull((bool result) {
- assertNoSuggestions();
- });
- }
-
- test_IndexExpression() {
- // ExpressionStatement Block
- addSource(
- '/testA.dart',
- '''
- int T1;
- F1() { }
- class A {int x;}''');
- addTestSource('''
- import "/testA.dart";
- int T2;
- F2() { }
- class B {int x;}
- class C {foo(){var f; {var x;} f[^]}}''');
- computeFast();
- return computeFull((bool result) {
- assertNotSuggested('x');
- assertSuggestLocalVariable('f', null);
- assertSuggestLocalMethod('foo', 'C', null);
- assertSuggestLocalClass('C');
- assertSuggestLocalFunction('F2', null);
- assertSuggestLocalTopLevelVar('T2', 'int');
- assertSuggestImportedClass('A');
- assertSuggestImportedFunction('F1', null);
- // TODO (danrubel) getter is being suggested instead of top level var
- //assertSuggestImportedTopLevelVar('T1', 'int');
- });
- }
-
- test_IndexExpression2() {
- // SimpleIdentifier IndexExpression ExpressionStatement Block
- addSource(
- '/testA.dart',
- '''
- int T1;
- F1() { }
- class A {int x;}''');
- addTestSource('''
- import "/testA.dart";
- int T2;
- F2() { }
- class B {int x;}
- class C {foo(){var f; {var x;} f[T^]}}''');
- computeFast();
- return computeFull((bool result) {
- // top level results are partially filtered based on first char
- assertSuggestLocalTopLevelVar('T2', 'int');
- // TODO (danrubel) getter is being suggested instead of top level var
- //assertSuggestImportedTopLevelVar('T1', 'int');
- });
- }
-
- test_InstanceCreationExpression_imported() {
- // SimpleIdentifier TypeName ConstructorName InstanceCreationExpression
- addSource(
- '/testA.dart',
- '''
- int T1;
- F1() { }
- class A {A(this.x) { } int x;}''');
- addTestSource('''
- import "/testA.dart";
- import "dart:async";
- int T2;
- F2() { }
- class B {B(this.x, [String boo]) { } int x;}
- class C {foo(){var f; {var x;} new ^}}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestImportedConstructor('Object');
- assertSuggestImportedConstructor('Future');
- assertSuggestImportedConstructor('A');
- // Suggested by ConstructorContributor
- assertNotSuggested('B');
- assertNotSuggested('C');
- assertNotSuggested('f');
- assertNotSuggested('x');
- assertNotSuggested('foo');
- assertNotSuggested('F1');
- assertNotSuggested('F2');
- assertNotSuggested('T1');
- assertNotSuggested('T2');
- });
- }
-
- test_InstanceCreationExpression_unimported() {
- // SimpleIdentifier TypeName ConstructorName InstanceCreationExpression
- addSource('/testAB.dart', 'class Foo { }');
- addTestSource('class C {foo(){new F^}}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 1);
- expect(request.replacementLength, 1);
- assertSuggestImportedConstructor('Future',
- relevance: DART_RELEVANCE_LOW, importUri: 'dart:async');
- assertSuggestImportedConstructor('Foo',
- relevance: DART_RELEVANCE_LOW, importUri: 'testAB.dart');
- });
- }
-
- test_InterpolationExpression() {
- // SimpleIdentifier InterpolationExpression StringInterpolation
- addSource(
- '/testA.dart',
- '''
- int T1;
- F1() { }
- typedef D1();
- class C1 {C1(this.x) { } int x;}''');
- addTestSource('''
- import "/testA.dart";
- int T2;
- F2() { }
- typedef D2();
- class C2 { }
- main() {String name; print("hello \$^");}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertNotSuggested('Object');
- // TODO(danrubel) should return top level var rather than getter
- if (contributor is ImportedReferenceContributor) {
- //assertSuggestImportedTopLevelVar('T1', 'int');
- assertSuggestGetter('T1', 'int');
- }
- assertSuggestImportedFunction('F1', null);
- assertNotSuggested('D1');
- assertNotSuggested('C1');
- assertSuggestLocalTopLevelVar('T2', 'int');
- assertSuggestLocalFunction('F2', null);
- assertNotSuggested('D2');
- assertNotSuggested('C2');
- assertSuggestLocalVariable('name', 'String');
- });
- }
-
- test_InterpolationExpression_block() {
- // SimpleIdentifier InterpolationExpression StringInterpolation
- addSource(
- '/testA.dart',
- '''
- int T1;
- F1() { }
- typedef D1();
- class C1 {C1(this.x) { } int x;}''');
- addTestSource('''
- import "/testA.dart";
- int T2;
- F2() { }
- typedef D2();
- class C2 { }
- main() {String name; print("hello \${^}");}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestImportedClass('Object');
- // TODO(danrubel) should return top level var rather than getter
- if (contributor is ImportedReferenceContributor) {
- //assertSuggestImportedTopLevelVar('T1', 'int');
- assertSuggestGetter('T1', 'int');
- }
- assertSuggestImportedFunction('F1', null);
- assertSuggestImportedFunctionTypeAlias('D1', null);
- assertSuggestImportedClass('C1');
- assertSuggestLocalTopLevelVar('T2', 'int');
- assertSuggestLocalFunction('F2', null);
- assertSuggestLocalFunctionTypeAlias('D2', null);
- assertSuggestLocalClass('C2');
- assertSuggestLocalVariable('name', 'String');
- });
- }
-
- test_InterpolationExpression_block2() {
- // SimpleIdentifier InterpolationExpression StringInterpolation
- addTestSource('main() {String name; print("hello \${n^}");}');
- computeFast();
- return computeFull((bool result) {
- assertSuggestLocalVariable('name', 'String');
- // top level results are partially filtered
- //assertSuggestImportedClass('Object');
- });
- }
-
- test_InterpolationExpression_prefix_selector() {
- // SimpleIdentifier PrefixedIdentifier InterpolationExpression
- addTestSource('main() {String name; print("hello \${name.^}");}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestInvocationGetter('length', 'int');
- assertNotSuggested('name');
- assertNotSuggested('Object');
- assertNotSuggested('==');
- });
- }
-
- test_InterpolationExpression_prefix_selector2() {
- // SimpleIdentifier PrefixedIdentifier InterpolationExpression
- addTestSource('main() {String name; print("hello \$name.^");}');
- computeFast();
- return computeFull((bool result) {
- assertNoSuggestions();
- });
- }
-
- test_InterpolationExpression_prefix_target() {
- // SimpleIdentifier PrefixedIdentifier InterpolationExpression
- addTestSource('main() {String name; print("hello \${nam^e.length}");}');
- computeFast();
- return computeFull((bool result) {
- assertSuggestLocalVariable('name', 'String');
- // top level results are partially filtered
- //assertSuggestImportedClass('Object');
- assertNotSuggested('length');
- });
- }
-
- test_IsExpression() {
- // SimpleIdentifier TypeName IsExpression IfStatement
- addSource(
- '/testB.dart',
- '''
- lib B;
- foo() { }
- class X {X.c(); X._d(); z() {}}''');
- addTestSource('''
- import "/testB.dart";
- class Y {Y.c(); Y._d(); z() {}}
- main() {var x; if (x is ^) { }}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestImportedClass('X');
- assertSuggestLocalClass('Y');
- assertNotSuggested('x');
- assertNotSuggested('main');
- assertNotSuggested('foo');
- });
- }
-
- test_IsExpression_target() {
- // IfStatement Block BlockFunctionBody
- addTestSource('''
- foo() { }
- void bar() { }
- class A {int x; int y() => 0;}
- main(){var a; if (^ is A)}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalVariable('a', null);
- assertSuggestLocalFunction('main', null);
- assertSuggestLocalFunction('foo', null);
- assertNotSuggested('bar');
- assertSuggestLocalClass('A');
- assertSuggestImportedClass('Object');
- });
- }
-
- test_IsExpression_type() {
- // SimpleIdentifier TypeName IsExpression IfStatement
- addTestSource('''
- class A {int x; int y() => 0;}
- main(){var a; if (a is ^)}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertNotSuggested('a');
- assertNotSuggested('main');
- assertSuggestLocalClass('A');
- assertSuggestImportedClass('Object');
- });
- }
-
- test_IsExpression_type_partial() {
- // SimpleIdentifier TypeName IsExpression IfStatement
- addTestSource('''
- class A {int x; int y() => 0;}
- main(){var a; if (a is Obj^)}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 3);
- expect(request.replacementLength, 3);
- assertNotSuggested('a');
- assertNotSuggested('main');
- assertSuggestLocalClass('A');
- assertSuggestImportedClass('Object');
- });
- }
-
- test_keyword() {
- addSource(
- '/testB.dart',
- '''
- lib B;
- int newT1;
- int T1;
- nowIsIt() { }
- class X {factory X.c(); factory X._d(); z() {}}''');
- addTestSource('''
- import "/testB.dart";
- String newer() {}
- var m;
- main() {new^ X.c();}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 3);
- expect(request.replacementLength, 3);
- assertNotSuggested('c');
- assertNotSuggested('_d');
- // Imported suggestion are filtered by 1st character
- assertSuggestImportedFunction('nowIsIt', null);
- assertNotSuggested('T1');
- // TODO (danrubel) this really should be TopLevelVar not getter/setter
- if (contributor is ImportedReferenceContributor) {
- assertSuggestGetter('newT1', 'int');
- }
- assertNotSuggested('z');
- assertSuggestLocalTopLevelVar('m', 'dynamic');
- assertSuggestLocalFunction('newer', 'String');
- });
- }
-
- test_Literal_list() {
- // ']' ListLiteral ArgumentList MethodInvocation
- addTestSource('main() {var Some; print([^]);}');
- computeFast();
- return computeFull((bool result) {
- assertSuggestLocalVariable('Some', null);
- assertSuggestImportedClass('String');
- });
- }
-
- test_Literal_list2() {
- // SimpleIdentifier ListLiteral ArgumentList MethodInvocation
- addTestSource('main() {var Some; print([S^]);}');
- computeFast();
- return computeFull((bool result) {
- assertSuggestLocalVariable('Some', null);
- assertSuggestImportedClass('String');
- });
- }
-
- test_Literal_string() {
- // SimpleStringLiteral ExpressionStatement Block
- addTestSource('class A {a() {"hel^lo"}}');
- computeFast();
- return computeFull((bool result) {
- assertNoSuggestions();
- });
- }
-
- test_localVariableDeclarationName() {
- addTestSource('main() {String m^}');
- return computeFull((bool result) {
- assertNotSuggested('main');
- assertNotSuggested('min');
- });
- }
-
- test_MapLiteralEntry() {
- // MapLiteralEntry MapLiteral VariableDeclaration
- addSource(
- '/testA.dart',
- '''
- int T1;
- F1() { }
- typedef D1();
- class C1 {C1(this.x) { } int x;}''');
- addTestSource('''
- import "/testA.dart";
- int T2;
- F2() { }
- typedef D2();
- class C2 { }
- foo = {^''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestImportedClass('Object');
- // TODO(danrubel) Should be top level variable
- if (contributor is ImportedReferenceContributor) {
- assertSuggestGetter('T1', 'int');
- // assertSuggestImportedTopLevelVar('T1', 'int');
- }
- assertSuggestImportedFunction('F1', null);
- assertSuggestImportedFunctionTypeAlias('D1', null);
- assertSuggestImportedClass('C1');
- assertSuggestLocalTopLevelVar('T2', 'int');
- assertSuggestLocalFunction('F2', null);
- assertSuggestLocalFunctionTypeAlias('D2', null);
- assertSuggestLocalClass('C2');
- });
- }
-
- test_MapLiteralEntry1() {
- // MapLiteralEntry MapLiteral VariableDeclaration
- addSource(
- '/testA.dart',
- '''
- int T1;
- F1() { }
- typedef D1();
- class C1 {C1(this.x) { } int x;}''');
- addTestSource('''
- import "/testA.dart";
- int T2;
- F2() { }
- typedef D2();
- class C2 { }
- foo = {T^''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 1);
- expect(request.replacementLength, 1);
- // TODO(danrubel) Should be top level variable
- if (contributor is ImportedReferenceContributor) {
- assertSuggestGetter('T1', 'int');
- // assertSuggestImportedTopLevelVar('T1', 'int');
- }
- assertSuggestLocalTopLevelVar('T2', 'int');
- });
- }
-
- test_MapLiteralEntry2() {
- // SimpleIdentifier MapLiteralEntry MapLiteral VariableDeclaration
- addSource(
- '/testA.dart',
- '''
- int T1;
- F1() { }
- typedef D1();
- class C1 {C1(this.x) { } int x;}''');
- addTestSource('''
- import "/testA.dart";
- int T2;
- F2() { }
- typedef D2();
- class C2 { }
- foo = {7:T^};''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 1);
- expect(request.replacementLength, 1);
- // TODO(danrubel) Should be top level variable
- if (contributor is ImportedReferenceContributor) {
- assertSuggestGetter('T1', 'int');
- // assertSuggestImportedTopLevelVar('T1', 'int');
- }
- assertSuggestLocalTopLevelVar('T2', 'int');
- });
- }
-
- test_MethodDeclaration_body_getters() {
- // Block BlockFunctionBody MethodDeclaration
- addTestSource('class A {@deprecated X get f => 0; Z a() {^} get _g => 1;}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- CompletionSuggestion methodA = assertSuggestLocalMethod('a', 'A', 'Z');
- if (methodA != null) {
- expect(methodA.element.isDeprecated, isFalse);
- expect(methodA.element.isPrivate, isFalse);
- }
- CompletionSuggestion getterF = assertSuggestLocalGetter('f', 'X',
- relevance: DART_RELEVANCE_LOW, deprecated: true);
- if (getterF != null) {
- expect(getterF.element.isDeprecated, isTrue);
- expect(getterF.element.isPrivate, isFalse);
- }
- CompletionSuggestion getterG = assertSuggestLocalGetter('_g', null,
- relevance: DART_RELEVANCE_DEFAULT);
- if (getterG != null) {
- expect(getterG.element.isDeprecated, isFalse);
- expect(getterG.element.isPrivate, isTrue);
- }
- });
- }
-
- test_MethodDeclaration_body_static() {
- // Block BlockFunctionBody MethodDeclaration
- addSource(
- '/testC.dart',
- '''
- class C {
- c1() {}
- var c2;
- static c3() {}
- static var c4;}''');
- addTestSource('''
- import "/testC.dart";
- class B extends C {
- b1() {}
- var b2;
- static b3() {}
- static var b4;}
- class A extends B {
- a1() {}
- var a2;
- static a3() {}
- static var a4;
- static a() {^}}''');
- computeFast();
- return computeFull((bool result) {
- assertNotSuggested('a1');
- assertNotSuggested('a2');
- assertSuggestLocalMethod('a3', 'A', null);
- assertSuggestLocalField('a4', null);
- assertNotSuggested('b1');
- assertNotSuggested('b2');
- assertNotSuggested('b3');
- assertNotSuggested('b4');
- assertNotSuggested('c1');
- assertNotSuggested('c2');
- assertNotSuggested('c3');
- assertNotSuggested('c4');
- });
- }
-
- test_MethodDeclaration_members() {
- // Block BlockFunctionBody MethodDeclaration
- addTestSource('class A {@deprecated X f; Z _a() {^} var _g;}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- CompletionSuggestion methodA = assertSuggestLocalMethod('_a', 'A', 'Z',
- relevance: DART_RELEVANCE_DEFAULT);
- if (methodA != null) {
- expect(methodA.element.isDeprecated, isFalse);
- expect(methodA.element.isPrivate, isTrue);
- }
- CompletionSuggestion getterF = assertSuggestLocalField('f', 'X',
- relevance: DART_RELEVANCE_LOW, deprecated: true);
- if (getterF != null) {
- expect(getterF.element.isDeprecated, isTrue);
- expect(getterF.element.isPrivate, isFalse);
- expect(getterF.element.parameters, isNull);
- }
- CompletionSuggestion getterG = assertSuggestLocalField('_g', null);
- if (getterG != null) {
- expect(getterG.element.isDeprecated, isFalse);
- expect(getterG.element.isPrivate, isTrue);
- expect(getterF.element.parameters, isNull);
- }
- assertSuggestImportedClass('bool');
- });
- }
-
- test_MethodDeclaration_parameters_named() {
- // Block BlockFunctionBody MethodDeclaration
- addTestSource('class A {@deprecated Z a(X x, _, b, {y: boo}) {^}}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- CompletionSuggestion methodA = assertSuggestLocalMethod('a', 'A', 'Z',
- relevance: DART_RELEVANCE_LOW, deprecated: true);
- if (methodA != null) {
- expect(methodA.element.isDeprecated, isTrue);
- expect(methodA.element.isPrivate, isFalse);
- }
- assertSuggestParameter('x', 'X');
- assertSuggestParameter('y', null);
- assertSuggestParameter('b', null);
- assertSuggestImportedClass('int');
- assertNotSuggested('_');
- });
- }
-
- test_MethodDeclaration_parameters_positional() {
- // Block BlockFunctionBody MethodDeclaration
- addTestSource('''
- foo() { }
- void bar() { }
- class A {Z a(X x, [int y=1]) {^}}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestLocalFunction('foo', null);
- assertSuggestLocalFunction('bar', 'void');
- assertSuggestLocalMethod('a', 'A', 'Z');
- assertSuggestParameter('x', 'X');
- assertSuggestParameter('y', 'int');
- assertSuggestImportedClass('String');
- });
- }
-
- test_MethodDeclaration_returnType() {
- // ClassDeclaration CompilationUnit
- addSource(
- '/testA.dart',
- '''
- int T1;
- F1() { }
- typedef D1();
- class C1 {C1(this.x) { } int x;}''');
- addTestSource('''
- import "/testA.dart";
- int T2;
- F2() { }
- typedef D2();
- class C2 {^ zoo(z) { } String name; }''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestImportedClass('Object');
- assertNotSuggested('T1');
- assertNotSuggested('F1');
- assertSuggestImportedFunctionTypeAlias('D1', null);
- assertSuggestImportedClass('C1');
- assertNotSuggested('T2');
- assertNotSuggested('F2');
- assertSuggestLocalFunctionTypeAlias('D2', null);
- assertSuggestLocalClass('C2');
- assertNotSuggested('name');
- });
- }
-
- test_MethodDeclaration_returnType_afterComment() {
- // ClassDeclaration CompilationUnit
- addSource(
- '/testA.dart',
- '''
- int T1;
- F1() { }
- typedef D1();
- class C1 {C1(this.x) { } int x;}''');
- addTestSource('''
- import "/testA.dart";
- int T2;
- F2() { }
- typedef D2();
- class C2 {/* */ ^ zoo(z) { } String name; }''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestImportedClass('Object');
- assertNotSuggested('T1');
- assertNotSuggested('F1');
- assertSuggestImportedFunctionTypeAlias('D1', null);
- assertSuggestImportedClass('C1');
- assertNotSuggested('T2');
- assertNotSuggested('F2');
- assertSuggestLocalFunctionTypeAlias('D2', null);
- assertSuggestLocalClass('C2');
- assertNotSuggested('name');
- });
- }
-
- test_MethodDeclaration_returnType_afterComment2() {
- // MethodDeclaration ClassDeclaration CompilationUnit
- addSource(
- '/testA.dart',
- '''
- int T1;
- F1() { }
- typedef D1();
- class C1 {C1(this.x) { } int x;}''');
- addTestSource('''
- import "/testA.dart";
- int T2;
- F2() { }
- typedef D2();
- class C2 {/** */ ^ zoo(z) { } String name; }''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestImportedClass('Object');
- assertNotSuggested('T1');
- assertNotSuggested('F1');
- assertSuggestImportedFunctionTypeAlias('D1', null);
- assertSuggestImportedClass('C1');
- assertNotSuggested('T2');
- assertNotSuggested('F2');
- assertSuggestLocalFunctionTypeAlias('D2', null);
- assertSuggestLocalClass('C2');
- assertNotSuggested('name');
- });
- }
-
- test_MethodDeclaration_returnType_afterComment3() {
- // MethodDeclaration ClassDeclaration CompilationUnit
- addSource(
- '/testA.dart',
- '''
- int T1;
- F1() { }
- typedef D1();
- class C1 {C1(this.x) { } int x;}''');
- addTestSource('''
- import "/testA.dart";
- int T2;
- F2() { }
- typedef D2();
- class C2 {
- /// some dartdoc
- ^ zoo(z) { } String name; }''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestImportedClass('Object');
- assertNotSuggested('T1');
- assertNotSuggested('F1');
- assertSuggestImportedFunctionTypeAlias('D1', null);
- assertSuggestImportedClass('C1');
- assertNotSuggested('T2');
- assertNotSuggested('F2');
- assertSuggestLocalFunctionTypeAlias('D2', null);
- assertSuggestLocalClass('C2');
- assertNotSuggested('name');
- });
- }
-
- test_MethodInvocation_no_semicolon() {
- // MethodInvocation ExpressionStatement Block
- addTestSource('''
- main() { }
- class I {X get f => new A();get _g => new A();}
- class A implements I {
- var b; X _c;
- X get d => new A();get _e => new A();
- // no semicolon between completion point and next statement
- set s1(I x) {} set _s2(I x) {x.^ m(null);}
- m(X x) {} I _n(X x) {}}
- class X{}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestInvocationGetter('f', 'X');
- assertSuggestInvocationGetter('_g', null);
- assertNotSuggested('b');
- assertNotSuggested('_c');
- assertNotSuggested('d');
- assertNotSuggested('_e');
- assertNotSuggested('s1');
- assertNotSuggested('_s2');
- assertNotSuggested('m');
- assertNotSuggested('_n');
- assertNotSuggested('a');
- assertNotSuggested('A');
- assertNotSuggested('X');
- assertNotSuggested('Object');
- assertNotSuggested('==');
- });
- }
-
- test_new_instance() {
- addTestSource('import "dart:math"; class A {x() {new Random().^}}');
- computeFast();
- return computeFull((bool result) {
- assertSuggestInvocationMethod('nextBool', 'Random', 'bool');
- assertSuggestInvocationMethod('nextDouble', 'Random', 'double');
- assertSuggestInvocationMethod('nextInt', 'Random', 'int');
- assertNotSuggested('Random');
- assertNotSuggested('Object');
- assertNotSuggested('A');
- });
- }
-
- test_parameterName_excludeTypes() {
- addTestSource('m(int ^) {}');
- return computeFull((bool result) {
- assertNotSuggested('int');
- assertNotSuggested('bool');
- });
- }
-
- test_partFile_TypeName() {
- // SimpleIdentifier TypeName ConstructorName
- addSource(
- '/testB.dart',
- '''
- lib B;
- int T1;
- F1() { }
- class X {X.c(); X._d(); z() {}}''');
- addSource(
- '/testA.dart',
- '''
- library libA;
- import "/testB.dart";
- part "$testFile";
- class A { }
- var m;''');
- addTestSource('''
- part of libA;
- class B { factory B.bar(int x) => null; }
- main() {new ^}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- // Suggested by ConstructorContributor
- assertNotSuggested('B.bar');
- assertSuggestImportedConstructor('Object');
- assertSuggestImportedConstructor('X.c');
- assertNotSuggested('X._d');
- // Suggested by LocalLibraryContributor
- assertNotSuggested('A');
- assertNotSuggested('F1');
- assertNotSuggested('T1');
- assertNotSuggested('_d');
- assertNotSuggested('z');
- assertNotSuggested('m');
- });
- }
-
- test_partFile_TypeName2() {
- // SimpleIdentifier TypeName ConstructorName
- addSource(
- '/testB.dart',
- '''
- lib B;
- int T1;
- F1() { }
- class X {X.c(); X._d(); z() {}}''');
- addSource(
- '/testA.dart',
- '''
- part of libA;
- class B { }''');
- addTestSource('''
- library libA;
- import "/testB.dart";
- part "/testA.dart";
- class A { A({String boo: 'hoo'}) { } }
- main() {new ^}
- var m;''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- // Suggested by ConstructorContributor
- assertNotSuggested('A');
- assertSuggestImportedConstructor('Object');
- assertSuggestImportedConstructor('X.c');
- assertNotSuggested('X._d');
- // Suggested by LocalLibraryContributor
- assertNotSuggested('B');
- assertNotSuggested('F1');
- assertNotSuggested('T1');
- assertNotSuggested('_d');
- assertNotSuggested('z');
- assertNotSuggested('m');
- });
- }
-
- test_PrefixedIdentifier_class_const() {
- // SimpleIdentifier PrefixedIdentifier ExpressionStatement Block
- addSource(
- '/testB.dart',
- '''
- lib B;
- class I {
- static const scI = 'boo';
- X get f => new A();
- get _g => new A();}
- class B implements I {
- static const int scB = 12;
- var b; X _c;
- X get d => new A();get _e => new A();
- set s1(I x) {} set _s2(I x) {}
- m(X x) {} I _n(X x) {}}
- class X{}''');
- addTestSource('''
- import "/testB.dart";
- class A extends B {
- static const String scA = 'foo';
- w() { }}
- main() {A.^}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- // Suggested by StaticMemberContributor
- assertNotSuggested('scA');
- assertNotSuggested('scB');
- assertNotSuggested('scI');
- assertNotSuggested('b');
- assertNotSuggested('_c');
- assertNotSuggested('d');
- assertNotSuggested('_e');
- assertNotSuggested('f');
- assertNotSuggested('_g');
- assertNotSuggested('s1');
- assertNotSuggested('_s2');
- assertNotSuggested('m');
- assertNotSuggested('_n');
- assertNotSuggested('a');
- assertNotSuggested('A');
- assertNotSuggested('X');
- assertNotSuggested('w');
- assertNotSuggested('Object');
- assertNotSuggested('==');
- });
- }
-
- test_PrefixedIdentifier_class_imported() {
- // SimpleIdentifier PrefixedIdentifier ExpressionStatement
- addSource(
- '/testB.dart',
- '''
- lib B;
- class I {X get f => new A();get _g => new A();}
- class A implements I {
- static const int sc = 12;
- @deprecated var b; X _c;
- X get d => new A();get _e => new A();
- set s1(I x) {} set _s2(I x) {}
- m(X x) {} I _n(X x) {}}
- class X{}''');
- addTestSource('''
- import "/testB.dart";
- main() {A a; a.^}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertNotSuggested('sc');
- assertSuggestInvocationField('b', null, isDeprecated: true);
- assertNotSuggested('_c');
- assertSuggestInvocationGetter('d', 'X');
- assertNotSuggested('_e');
- assertSuggestInvocationGetter('f', 'X');
- assertNotSuggested('_g');
- assertSuggestInvocationSetter('s1');
- assertNotSuggested('_s2');
- assertSuggestInvocationMethod('m', 'A', null);
- assertNotSuggested('_n');
- assertNotSuggested('a');
- assertNotSuggested('A');
- assertNotSuggested('X');
- assertNotSuggested('Object');
- assertNotSuggested('==');
- });
- }
-
- test_PrefixedIdentifier_class_local() {
- // SimpleIdentifier PrefixedIdentifier ExpressionStatement
- addTestSource('''
- main() {A a; a.^}
- class I {X get f => new A();get _g => new A();}
- class A implements I {
- static const int sc = 12;
- var b; X _c;
- X get d => new A();get _e => new A();
- set s1(I x) {} set _s2(I x) {}
- m(X x) {} I _n(X x) {}}
- class X{}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertNotSuggested('sc');
- assertSuggestInvocationField('b', null);
- assertSuggestInvocationField('_c', 'X');
- assertSuggestInvocationGetter('d', 'X');
- assertSuggestInvocationGetter('_e', null);
- assertSuggestInvocationGetter('f', 'X');
- assertSuggestInvocationGetter('_g', null);
- assertSuggestInvocationSetter('s1');
- assertSuggestInvocationSetter('_s2');
- assertSuggestInvocationMethod('m', 'A', null);
- assertSuggestInvocationMethod('_n', 'A', 'I');
- assertNotSuggested('a');
- assertNotSuggested('A');
- assertNotSuggested('X');
- assertNotSuggested('Object');
- assertNotSuggested('==');
- });
- }
-
- test_PrefixedIdentifier_getter() {
- // SimpleIdentifier PrefixedIdentifier ExpressionStatement
- addTestSource('String get g => "one"; f() {g.^}');
- computeFast();
- return computeFull((bool result) {
- assertSuggestInvocationGetter('length', 'int');
- });
- }
-
- test_PrefixedIdentifier_library() {
- // SimpleIdentifier PrefixedIdentifier ExpressionStatement
- addSource(
- '/testB.dart',
- '''
- lib B;
- var T1;
- class X { }
- class Y { }''');
- addTestSource('''
- import "/testB.dart" as b;
- var T2;
- class A { }
- main() {b.^}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- // Suggested by LibraryMemberContributor
- assertNotSuggested('X');
- assertNotSuggested('Y');
- assertNotSuggested('T1');
- assertNotSuggested('T2');
- assertNotSuggested('Object');
- assertNotSuggested('b');
- assertNotSuggested('A');
- assertNotSuggested('==');
- });
- }
-
- test_PrefixedIdentifier_library_typesOnly() {
- // SimpleIdentifier PrefixedIdentifier TypeName
- addSource(
- '/testB.dart',
- '''
- lib B;
- var T1;
- class X { }
- class Y { }''');
- addTestSource('''
- import "/testB.dart" as b;
- var T2;
- class A { }
- foo(b.^ f) {}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- // Suggested by LibraryMemberContributor
- assertNotSuggested('X');
- assertNotSuggested('Y');
- assertNotSuggested('T1');
- assertNotSuggested('T2');
- assertNotSuggested('Object');
- assertNotSuggested('b');
- assertNotSuggested('A');
- assertNotSuggested('==');
- });
- }
-
- test_PrefixedIdentifier_library_typesOnly2() {
- // SimpleIdentifier PrefixedIdentifier TypeName
- addSource(
- '/testB.dart',
- '''
- lib B;
- var T1;
- class X { }
- class Y { }''');
- addTestSource('''
- import "/testB.dart" as b;
- var T2;
- class A { }
- foo(b.^) {}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- // Suggested by LibraryMemberContributor
- assertNotSuggested('X');
- assertNotSuggested('Y');
- assertNotSuggested('T1');
- assertNotSuggested('T2');
- assertNotSuggested('Object');
- assertNotSuggested('b');
- assertNotSuggested('A');
- assertNotSuggested('==');
- });
- }
-
- test_PrefixedIdentifier_parameter() {
- // SimpleIdentifier PrefixedIdentifier ExpressionStatement
- addSource(
- '/testB.dart',
- '''
- lib B;
- class _W {M y; var _z;}
- class X extends _W {}
- class M{}''');
- addTestSource('''
- import "/testB.dart";
- foo(X x) {x.^}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestInvocationField('y', 'M');
- assertNotSuggested('_z');
- assertNotSuggested('==');
- });
- }
-
- test_PrefixedIdentifier_prefix() {
- // SimpleIdentifier PrefixedIdentifier ExpressionStatement
- addSource(
- '/testA.dart',
- '''
- class A {static int bar = 10;}
- _B() {}''');
- addTestSource('''
- import "/testA.dart";
- class X {foo(){A^.bar}}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 1);
- expect(request.replacementLength, 1);
- assertSuggestImportedClass('A');
- assertSuggestLocalClass('X');
- assertSuggestLocalMethod('foo', 'X', null);
- assertNotSuggested('bar');
- assertNotSuggested('_B');
- });
- }
-
- test_PrefixedIdentifier_propertyAccess() {
- // PrefixedIdentifier ExpressionStatement Block BlockFunctionBody
- addTestSource('class A {String x; int get foo {x.^}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestInvocationGetter('isEmpty', 'bool');
- assertSuggestInvocationMethod('compareTo', 'Comparable', 'int');
- });
- }
-
- test_PrefixedIdentifier_propertyAccess_newStmt() {
- // PrefixedIdentifier ExpressionStatement Block BlockFunctionBody
- addTestSource('class A {String x; int get foo {x.^ int y = 0;}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestInvocationGetter('isEmpty', 'bool');
- assertSuggestInvocationMethod('compareTo', 'Comparable', 'int');
- });
- }
-
- test_PrefixedIdentifier_trailingStmt_const() {
- // SimpleIdentifier PrefixedIdentifier ExpressionStatement
- addTestSource('const String g = "hello"; f() {g.^ int y = 0;}');
- computeFast();
- return computeFull((bool result) {
- assertSuggestInvocationGetter('length', 'int');
- });
- }
-
- test_PrefixedIdentifier_trailingStmt_field() {
- // SimpleIdentifier PrefixedIdentifier ExpressionStatement
- addTestSource('class A {String g; f() {g.^ int y = 0;}}');
- computeFast();
- return computeFull((bool result) {
- assertSuggestInvocationGetter('length', 'int');
- });
- }
-
- test_PrefixedIdentifier_trailingStmt_function() {
- // SimpleIdentifier PrefixedIdentifier ExpressionStatement
- addTestSource('String g() => "one"; f() {g.^ int y = 0;}');
- computeFast();
- return computeFull((bool result) {
- assertSuggestInvocationGetter('length', 'int');
- });
- }
-
- test_PrefixedIdentifier_trailingStmt_functionTypeAlias() {
- // SimpleIdentifier PrefixedIdentifier ExpressionStatement
- addTestSource('typedef String g(); f() {g.^ int y = 0;}');
- computeFast();
- return computeFull((bool result) {
- assertSuggestInvocationGetter('length', 'int');
- });
- }
-
- test_PrefixedIdentifier_trailingStmt_getter() {
- // SimpleIdentifier PrefixedIdentifier ExpressionStatement
- addTestSource('String get g => "one"; f() {g.^ int y = 0;}');
- computeFast();
- return computeFull((bool result) {
- assertSuggestInvocationGetter('length', 'int');
- });
- }
-
- test_PrefixedIdentifier_trailingStmt_local_typed() {
- // SimpleIdentifier PrefixedIdentifier ExpressionStatement
- addTestSource('f() {String g; g.^ int y = 0;}');
- computeFast();
- return computeFull((bool result) {
- assertSuggestInvocationGetter('length', 'int');
- });
- }
-
- test_PrefixedIdentifier_trailingStmt_local_untyped() {
- // SimpleIdentifier PrefixedIdentifier ExpressionStatement
- addTestSource('f() {var g = "hello"; g.^ int y = 0;}');
- computeFast();
- return computeFull((bool result) {
- assertSuggestInvocationGetter('length', 'int');
- });
- }
-
- test_PrefixedIdentifier_trailingStmt_method() {
- // SimpleIdentifier PrefixedIdentifier ExpressionStatement
- addTestSource('class A {String g() {}; f() {g.^ int y = 0;}}');
- computeFast();
- return computeFull((bool result) {
- assertSuggestInvocationGetter('length', 'int');
- });
- }
-
- test_PrefixedIdentifier_trailingStmt_param() {
- // SimpleIdentifier PrefixedIdentifier ExpressionStatement
- addTestSource('class A {f(String g) {g.^ int y = 0;}}');
- computeFast();
- return computeFull((bool result) {
- assertSuggestInvocationGetter('length', 'int');
- });
- }
-
- test_PrefixedIdentifier_trailingStmt_param2() {
- // SimpleIdentifier PrefixedIdentifier ExpressionStatement
- addTestSource('f(String g) {g.^ int y = 0;}');
- computeFast();
- return computeFull((bool result) {
- assertSuggestInvocationGetter('length', 'int');
- });
- }
-
- test_PrefixedIdentifier_trailingStmt_topLevelVar() {
- // SimpleIdentifier PrefixedIdentifier ExpressionStatement
- addTestSource('String g; f() {g.^ int y = 0;}');
- computeFast();
- return computeFull((bool result) {
- assertSuggestInvocationGetter('length', 'int');
- });
- }
-
- test_PropertyAccess_expression() {
- // SimpleIdentifier MethodInvocation PropertyAccess ExpressionStatement
- addTestSource('class A {a() {"hello".to^String().length}}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 2);
- expect(request.replacementLength, 8);
- assertSuggestInvocationGetter('length', 'int');
- assertNotSuggested('A');
- assertNotSuggested('a');
- assertNotSuggested('Object');
- assertNotSuggested('==');
- });
- }
-
- test_PropertyAccess_noTarget() {
- // SimpleIdentifier PropertyAccess ExpressionStatement
- addSource('/testAB.dart', 'class Foo { }');
- addTestSource('class C {foo(){.^}}');
- computeFast();
- return computeFull((bool result) {
- assertNoSuggestions();
- });
- }
-
- test_PropertyAccess_noTarget2() {
- // SimpleIdentifier PropertyAccess ExpressionStatement
- addSource('/testAB.dart', 'class Foo { }');
- addTestSource('main() {.^}');
- computeFast();
- return computeFull((bool result) {
- assertNoSuggestions();
- });
- }
-
- test_PropertyAccess_selector() {
- // SimpleIdentifier PropertyAccess ExpressionStatement Block
- addTestSource('class A {a() {"hello".length.^}}');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestInvocationGetter('isEven', 'bool');
- assertNotSuggested('A');
- assertNotSuggested('a');
- assertNotSuggested('Object');
- assertNotSuggested('==');
- });
- }
-
- test_SwitchStatement_c() {
- // SwitchStatement Block BlockFunctionBody MethodDeclaration
- addTestSource('class A {String g(int x) {switch(x) {c^}}}');
- computeFast();
- return computeFull((bool result) {
- assertNoSuggestions();
- });
- }
-
- test_SwitchStatement_case() {
- // SwitchStatement Block BlockFunctionBody MethodDeclaration
- addTestSource('class A {String g(int x) {var t; switch(x) {case 0: ^}}}');
- computeFast();
- return computeFull((bool result) {
- assertSuggestLocalClass('A');
- assertSuggestLocalMethod('g', 'A', 'String');
- assertSuggestLocalVariable('t', null);
- assertSuggestImportedClass('String');
- });
- }
-
- test_SwitchStatement_empty() {
- // SwitchStatement Block BlockFunctionBody MethodDeclaration
- addTestSource('class A {String g(int x) {switch(x) {^}}}');
- computeFast();
- return computeFull((bool result) {
- assertNoSuggestions();
- });
- }
-
- test_ThisExpression_block() {
- // MethodInvocation ExpressionStatement Block
- addTestSource('''
- main() { }
- class I {X get f => new A();get _g => new A();}
- class A implements I {
- A() {}
- A.z() {}
- var b; X _c;
- X get d => new A();get _e => new A();
- // no semicolon between completion point and next statement
- set s1(I x) {} set _s2(I x) {this.^ m(null);}
- m(X x) {} I _n(X x) {}}
- class X{}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestInvocationField('b', null);
- assertSuggestInvocationField('_c', 'X');
- assertSuggestInvocationGetter('d', 'X');
- assertSuggestInvocationGetter('_e', null);
- assertSuggestInvocationGetter('f', 'X');
- assertSuggestInvocationGetter('_g', null);
- assertSuggestInvocationMethod('m', 'A', null);
- assertSuggestInvocationMethod('_n', 'A', 'I');
- assertSuggestInvocationSetter('s1');
- assertSuggestInvocationSetter('_s2');
- assertNotSuggested('z');
- assertNotSuggested('I');
- assertNotSuggested('A');
- assertNotSuggested('X');
- assertNotSuggested('Object');
- assertNotSuggested('==');
- });
- }
-
- test_ThisExpression_constructor() {
- // MethodInvocation ExpressionStatement Block
- addTestSource('''
- main() { }
- class I {X get f => new A();get _g => new A();}
- class A implements I {
- A() {this.^}
- A.z() {}
- var b; X _c;
- X get d => new A();get _e => new A();
- // no semicolon between completion point and next statement
- set s1(I x) {} set _s2(I x) {m(null);}
- m(X x) {} I _n(X x) {}}
- class X{}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestInvocationField('b', null);
- assertSuggestInvocationField('_c', 'X');
- assertSuggestInvocationGetter('d', 'X');
- assertSuggestInvocationGetter('_e', null);
- assertSuggestInvocationGetter('f', 'X');
- assertSuggestInvocationGetter('_g', null);
- assertSuggestInvocationMethod('m', 'A', null);
- assertSuggestInvocationMethod('_n', 'A', 'I');
- assertSuggestInvocationSetter('s1');
- assertSuggestInvocationSetter('_s2');
- assertNotSuggested('z');
- assertNotSuggested('I');
- assertNotSuggested('A');
- assertNotSuggested('X');
- assertNotSuggested('Object');
- assertNotSuggested('==');
- });
- }
-
- test_ThisExpression_constructor_param() {
- // SimpleIdentifier FieldFormalParameter FormalParameterList
- addTestSource('''
- main() { }
- class I {X get f => new A();get _g => new A();}
- class A implements I {
- A(this.^) {}
- A.z() {}
- var b; X _c; static sb;
- X get d => new A();get _e => new A();
- // no semicolon between completion point and next statement
- set s1(I x) {} set _s2(I x) {m(null);}
- m(X x) {} I _n(X x) {}}
- class X{}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- // Contributed by FieldFormalConstructorContributor
- assertNotSuggested('b');
- assertNotSuggested('_c');
- assertNotSuggested('sb');
- assertNotSuggested('d');
- assertNotSuggested('_e');
- assertNotSuggested('f');
- assertNotSuggested('_g');
- assertNotSuggested('m');
- assertNotSuggested('_n');
- assertNotSuggested('s1');
- assertNotSuggested('_s2');
- assertNotSuggested('z');
- assertNotSuggested('I');
- assertNotSuggested('A');
- assertNotSuggested('X');
- assertNotSuggested('Object');
- assertNotSuggested('==');
- });
- }
-
- test_ThisExpression_constructor_param2() {
- // SimpleIdentifier FieldFormalParameter FormalParameterList
- addTestSource('''
- main() { }
- class I {X get f => new A();get _g => new A();}
- class A implements I {
- A(this.b^) {}
- A.z() {}
- var b; X _c;
- X get d => new A();get _e => new A();
- // no semicolon between completion point and next statement
- set s1(I x) {} set _s2(I x) {m(null);}
- m(X x) {} I _n(X x) {}}
- class X{}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 1);
- expect(request.replacementLength, 1);
- // Contributed by FieldFormalConstructorContributor
- assertNotSuggested('b');
- assertNotSuggested('_c');
- assertNotSuggested('d');
- assertNotSuggested('_e');
- assertNotSuggested('f');
- assertNotSuggested('_g');
- assertNotSuggested('m');
- assertNotSuggested('_n');
- assertNotSuggested('s1');
- assertNotSuggested('_s2');
- assertNotSuggested('z');
- assertNotSuggested('I');
- assertNotSuggested('A');
- assertNotSuggested('X');
- assertNotSuggested('Object');
- assertNotSuggested('==');
- });
- }
-
- test_ThisExpression_constructor_param3() {
- // SimpleIdentifier FieldFormalParameter FormalParameterList
- addTestSource('''
- main() { }
- class I {X get f => new A();get _g => new A();}
- class A implements I {
- A(this.^b) {}
- A.z() {}
- var b; X _c;
- X get d => new A();get _e => new A();
- // no semicolon between completion point and next statement
- set s1(I x) {} set _s2(I x) {m(null);}
- m(X x) {} I _n(X x) {}}
- class X{}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 1);
- // Contributed by FieldFormalConstructorContributor
- assertNotSuggested('b');
- assertNotSuggested('_c');
- assertNotSuggested('d');
- assertNotSuggested('_e');
- assertNotSuggested('f');
- assertNotSuggested('_g');
- assertNotSuggested('m');
- assertNotSuggested('_n');
- assertNotSuggested('s1');
- assertNotSuggested('_s2');
- assertNotSuggested('z');
- assertNotSuggested('I');
- assertNotSuggested('A');
- assertNotSuggested('X');
- assertNotSuggested('Object');
- assertNotSuggested('==');
- });
- }
-
- test_ThisExpression_constructor_param4() {
- // SimpleIdentifier FieldFormalParameter FormalParameterList
- addTestSource('''
- main() { }
- class I {X get f => new A();get _g => new A();}
- class A implements I {
- A(this.b, this.^) {}
- A.z() {}
- var b; X _c;
- X get d => new A();get _e => new A();
- // no semicolon between completion point and next statement
- set s1(I x) {} set _s2(I x) {m(null);}
- m(X x) {} I _n(X x) {}}
- class X{}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertNotSuggested('b');
- // Contributed by FieldFormalConstructorContributor
- assertNotSuggested('_c');
- assertNotSuggested('d');
- assertNotSuggested('_e');
- assertNotSuggested('f');
- assertNotSuggested('_g');
- assertNotSuggested('m');
- assertNotSuggested('_n');
- assertNotSuggested('s1');
- assertNotSuggested('_s2');
- assertNotSuggested('z');
- assertNotSuggested('I');
- assertNotSuggested('A');
- assertNotSuggested('X');
- assertNotSuggested('Object');
- assertNotSuggested('==');
- });
- }
-
- test_TopLevelVariableDeclaration_typed_name() {
- // SimpleIdentifier VariableDeclaration VariableDeclarationList
- // TopLevelVariableDeclaration
- addTestSource('class A {} B ^');
- computeFast();
- return computeFull((bool result) {
- assertNoSuggestions();
- });
- }
-
- test_TopLevelVariableDeclaration_untyped_name() {
- // SimpleIdentifier VariableDeclaration VariableDeclarationList
- // TopLevelVariableDeclaration
- addTestSource('class A {} var ^');
- computeFast();
- return computeFull((bool result) {
- assertNoSuggestions();
- });
- }
-
- test_TypeArgumentList() {
- // SimpleIdentifier BinaryExpression ExpressionStatement
- addSource(
- '/testA.dart',
- '''
- class C1 {int x;}
- F1() => 0;
- typedef String T1(int blat);''');
- addTestSource('''
- import "/testA.dart";'
- class C2 {int x;}
- F2() => 0;
- typedef int T2(int blat);
- class C<E> {}
- main() { C<^> c; }''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestImportedClass('Object');
- assertSuggestImportedClass('C1');
- assertSuggestImportedFunctionTypeAlias('T1', 'String');
- assertSuggestLocalClass('C2');
- assertSuggestLocalFunctionTypeAlias('T2', 'int');
- assertNotSuggested('F1');
- assertNotSuggested('F2');
- });
- }
-
- test_TypeArgumentList2() {
- // TypeName TypeArgumentList TypeName
- addSource(
- '/testA.dart',
- '''
- class C1 {int x;}
- F1() => 0;
- typedef String T1(int blat);''');
- addTestSource('''
- import "/testA.dart";'
- class C2 {int x;}
- F2() => 0;
- typedef int T2(int blat);
- class C<E> {}
- main() { C<C^> c; }''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset - 1);
- expect(request.replacementLength, 1);
- assertSuggestImportedClass('C1');
- assertSuggestLocalClass('C2');
- });
- }
-
- test_VariableDeclaration_name() {
- // SimpleIdentifier VariableDeclaration VariableDeclarationList
- // VariableDeclarationStatement Block
- addSource(
- '/testB.dart',
- '''
- lib B;
- foo() { }
- class _B { }
- class X {X.c(); X._d(); z() {}}''');
- addTestSource('''
- import "/testB.dart";
- class Y {Y.c(); Y._d(); z() {}}
- main() {var ^}''');
- computeFast();
- return computeFull((bool result) {
- assertNoSuggestions();
- });
- }
-
- test_VariableDeclarationList_final() {
- // VariableDeclarationList VariableDeclarationStatement Block
- addTestSource('main() {final ^} class C { }');
- computeFast();
- return computeFull((bool result) {
- assertSuggestImportedClass('Object');
- assertSuggestLocalClass('C');
- assertNotSuggested('==');
- });
- }
-
- test_VariableDeclarationStatement_RHS() {
- // SimpleIdentifier VariableDeclaration VariableDeclarationList
- // VariableDeclarationStatement
- addSource(
- '/testB.dart',
- '''
- lib B;
- foo() { }
- class _B { }
- class X {X.c(); X._d(); z() {}}''');
- addTestSource('''
- import "/testB.dart";
- class Y {Y.c(); Y._d(); z() {}}
- class C {bar(){var f; {var x;} var e = ^}}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestImportedClass('X');
- assertNotSuggested('_B');
- assertSuggestLocalClass('Y');
- assertSuggestLocalClass('C');
- assertSuggestLocalVariable('f', null);
- assertNotSuggested('x');
- assertNotSuggested('e');
- });
- }
-
- test_VariableDeclarationStatement_RHS_missing_semicolon() {
- // VariableDeclaration VariableDeclarationList
- // VariableDeclarationStatement
- addSource(
- '/testB.dart',
- '''
- lib B;
- foo1() { }
- void bar1() { }
- class _B { }
- class X {X.c(); X._d(); z() {}}''');
- addTestSource('''
- import "/testB.dart";
- foo2() { }
- void bar2() { }
- class Y {Y.c(); Y._d(); z() {}}
- class C {bar(){var f; {var x;} var e = ^ var g}}''');
- computeFast();
- return computeFull((bool result) {
- expect(request.replacementOffset, completionOffset);
- expect(request.replacementLength, 0);
- assertSuggestImportedClass('X');
- assertSuggestImportedFunction('foo1', null);
- assertNotSuggested('bar1');
- assertSuggestLocalFunction('foo2', null);
- assertNotSuggested('bar2');
- assertNotSuggested('_B');
- assertSuggestLocalClass('Y');
- assertSuggestLocalClass('C');
- assertSuggestLocalVariable('f', null);
- assertNotSuggested('x');
- assertNotSuggested('e');
- });
- }
-}

Powered by Google App Engine
This is Rietveld 408576698