| Index: pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
|
| diff --git a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
|
| index f549d83c6a9a87e440fe2a80f24b8507d3818ec9..3b222303755f4aceef6d257cac1fcab689cc133e 100644
|
| --- a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
|
| +++ b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
|
| @@ -21,6 +21,7 @@ import 'package:analysis_server/src/services/index/index.dart';
|
| import 'package:analysis_server/src/services/index/local_memory_index.dart';
|
| import 'package:analysis_server/src/services/search/search_engine_internal.dart';
|
| import 'package:analyzer/src/generated/source.dart';
|
| +import 'package:analyzer/task/dart.dart';
|
| import 'package:unittest/unittest.dart';
|
|
|
| import '../../../abstract_context.dart';
|
| @@ -43,6 +44,15 @@ abstract class DartCompletionContributorTest extends AbstractContextTest {
|
| DartCompletionRequest request;
|
| List<CompletionSuggestion> suggestions;
|
|
|
| + /**
|
| + * If `true` and `null` is specified as the suggestion's expected returnType
|
| + * then the actual suggestion is expected to have a `dynamic` returnType.
|
| + * Newer tests return `false` so that they can distinguish between
|
| + * `dynamic` and `null`.
|
| + * Eventually all tests should be converted and this getter removed.
|
| + */
|
| + bool get isNullExpectedReturnTypeConsideredDynamic => true;
|
| +
|
| void addTestSource(String content) {
|
| expect(completionOffset, isNull, reason: 'Call addTestUnit exactly once');
|
| completionOffset = content.indexOf('^');
|
| @@ -142,6 +152,7 @@ abstract class DartCompletionContributorTest extends AbstractContextTest {
|
| CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
|
| bool isDeprecated: false,
|
| String elemFile,
|
| + String elemName,
|
| int elemOffset}) {
|
| CompletionSuggestion cs = assertSuggest(name,
|
| csKind: kind,
|
| @@ -153,7 +164,7 @@ abstract class DartCompletionContributorTest extends AbstractContextTest {
|
| protocol.Element element = cs.element;
|
| expect(element, isNotNull);
|
| expect(element.kind, equals(protocol.ElementKind.CLASS));
|
| - expect(element.name, equals(name));
|
| + expect(element.name, equals(elemName ?? name));
|
| expect(element.parameters, isNull);
|
| expect(element.returnType, isNull);
|
| assertHasNoParameterInfo(cs);
|
| @@ -241,7 +252,13 @@ abstract class DartCompletionContributorTest extends AbstractContextTest {
|
| relevance: relevance,
|
| importUri: importUri,
|
| isDeprecated: isDeprecated);
|
| - expect(cs.returnType, returnType != null ? returnType : 'dynamic');
|
| + if (returnType != null) {
|
| + expect(cs.returnType, returnType);
|
| + } else if (isNullExpectedReturnTypeConsideredDynamic) {
|
| + expect(cs.returnType, 'dynamic');
|
| + } else {
|
| + expect(cs.returnType, isNull);
|
| + }
|
| protocol.Element element = cs.element;
|
| expect(element, isNotNull);
|
| expect(element.kind, equals(protocol.ElementKind.FUNCTION));
|
| @@ -251,14 +268,20 @@ abstract class DartCompletionContributorTest extends AbstractContextTest {
|
| expect(param, isNotNull);
|
| expect(param[0], equals('('));
|
| expect(param[param.length - 1], equals(')'));
|
| - expect(element.returnType,
|
| - equals(returnType != null ? returnType : 'dynamic'));
|
| + if (returnType != null) {
|
| + expect(element.returnType, returnType);
|
| + } else if (isNullExpectedReturnTypeConsideredDynamic) {
|
| + expect(element.returnType, 'dynamic');
|
| + } else {
|
| + expect(element.returnType, isNull);
|
| + }
|
| assertHasParameterInfo(cs);
|
| return cs;
|
| }
|
|
|
| CompletionSuggestion assertSuggestFunctionTypeAlias(
|
| - String name, String returnType, {bool isDeprecated: false,
|
| + String name, String returnType,
|
| + {bool isDeprecated: false,
|
| int relevance: DART_RELEVANCE_DEFAULT,
|
| CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
|
| String importUri}) {
|
| @@ -267,7 +290,13 @@ abstract class DartCompletionContributorTest extends AbstractContextTest {
|
| relevance: relevance,
|
| importUri: importUri,
|
| isDeprecated: isDeprecated);
|
| - expect(cs.returnType, returnType != null ? returnType : 'dynamic');
|
| + if (returnType != null) {
|
| + expect(cs.returnType, returnType);
|
| + } else if (isNullExpectedReturnTypeConsideredDynamic) {
|
| + expect(cs.returnType, 'dynamic');
|
| + } else {
|
| + expect(cs.returnType, isNull);
|
| + }
|
| protocol.Element element = cs.element;
|
| expect(element, isNotNull);
|
| expect(element.kind, equals(protocol.ElementKind.FUNCTION_TYPE_ALIAS));
|
| @@ -363,13 +392,25 @@ abstract class DartCompletionContributorTest extends AbstractContextTest {
|
| String importUri}) {
|
| CompletionSuggestion cs = assertSuggest(name,
|
| csKind: kind, relevance: relevance, importUri: importUri);
|
| - expect(cs.returnType, returnType != null ? returnType : 'dynamic');
|
| + if (returnType != null) {
|
| + expect(cs.returnType, returnType);
|
| + } else if (isNullExpectedReturnTypeConsideredDynamic) {
|
| + expect(cs.returnType, 'dynamic');
|
| + } else {
|
| + expect(cs.returnType, isNull);
|
| + }
|
| 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');
|
| + if (returnType != null) {
|
| + expect(element.returnType, returnType);
|
| + } else if (isNullExpectedReturnTypeConsideredDynamic) {
|
| + expect(element.returnType, 'dynamic');
|
| + } else {
|
| + expect(element.returnType, isNull);
|
| + }
|
| assertHasNoParameterInfo(cs);
|
| return cs;
|
| }
|
| @@ -486,6 +527,12 @@ abstract class DartCompletionContributorTest extends AbstractContextTest {
|
| Duration.ZERO, () => performAnalysis(times - 1, completer));
|
| }
|
|
|
| + void resolveSource(String path, String content) {
|
| + Source libSource = addSource(path, content);
|
| + var target = new LibrarySpecificUnit(libSource, libSource);
|
| + context.computeResult(target, RESOLVED_UNIT);
|
| + }
|
| +
|
| @override
|
| void setUp() {
|
| super.setUp();
|
|
|