| Index: pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart
|
| diff --git a/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ad38bd9b9973b8a678d368a707a84480306ec4b1
|
| --- /dev/null
|
| +++ b/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart
|
| @@ -0,0 +1,182 @@
|
| +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +library test.services.completion.contributor.dart.named_constructor;
|
| +
|
| +import 'package:analysis_server/plugin/protocol/protocol.dart';
|
| +import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
|
| +import 'package:analysis_server/src/services/completion/dart/named_constructor_contributor.dart';
|
| +import 'package:test_reflective_loader/test_reflective_loader.dart';
|
| +import 'package:unittest/unittest.dart';
|
| +
|
| +import '../../../utils.dart';
|
| +import 'completion_contributor_util.dart';
|
| +import 'package:analyzer/src/generated/source.dart';
|
| +
|
| +main() {
|
| + initializeTestEnvironment();
|
| + defineReflectiveTests(NamedConstructorContributorTest);
|
| +}
|
| +
|
| +@reflectiveTest
|
| +class NamedConstructorContributorTest extends DartCompletionContributorTest {
|
| + CompletionSuggestion assertSuggestNamedConstructor(
|
| + String name, String returnType,
|
| + [int relevance = DART_RELEVANCE_DEFAULT,
|
| + CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
|
| + CompletionSuggestion cs =
|
| + assertSuggest(name, csKind: kind, relevance: relevance);
|
| + Element element = cs.element;
|
| + expect(element, isNotNull);
|
| + expect(element.kind, equals(ElementKind.CONSTRUCTOR));
|
| + 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, equals(returnType));
|
| + assertHasParameterInfo(cs);
|
| + return cs;
|
| + }
|
| +
|
| + @override
|
| + DartCompletionContributor createContributor() {
|
| + return new NamedConstructorContributor();
|
| + }
|
| +
|
| + test_ConstructorName_importedClass() async {
|
| + // SimpleIdentifier PrefixedIdentifier TypeName ConstructorName
|
| + // InstanceCreationExpression
|
| + Source libSource = addSource(
|
| + '/testB.dart',
|
| + '''
|
| + lib B;
|
| + int T1;
|
| + F1() { }
|
| + class X {X.c(); X._d(); z() {}}''');
|
| + addTestSource('''
|
| + import "/testB.dart";
|
| + var m;
|
| + main() {new X.^}''');
|
| + // Assume that imported libraries are resolved
|
| + await resolveLibraryUnit(libSource);
|
| + await computeSuggestions();
|
| + expect(replacementOffset, completionOffset);
|
| + expect(replacementLength, 0);
|
| + assertSuggestNamedConstructor('c', 'X');
|
| + assertNotSuggested('F1');
|
| + assertNotSuggested('T1');
|
| + assertNotSuggested('_d');
|
| + assertNotSuggested('z');
|
| + assertNotSuggested('m');
|
| + }
|
| +
|
| + test_ConstructorName_importedClass_unresolved() async {
|
| + // 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.^}''');
|
| + // Assume that imported libraries are NOT resolved
|
| + //await resolveLibraryUnit(libSource);
|
| + await computeSuggestions();
|
| + expect(replacementOffset, completionOffset);
|
| + expect(replacementLength, 0);
|
| + assertSuggestNamedConstructor('c', null);
|
| + assertNotSuggested('F1');
|
| + assertNotSuggested('T1');
|
| + assertNotSuggested('_d');
|
| + assertNotSuggested('z');
|
| + assertNotSuggested('m');
|
| + }
|
| +
|
| + test_ConstructorName_importedFactory() async {
|
| + // SimpleIdentifier PrefixedIdentifier TypeName ConstructorName
|
| + // InstanceCreationExpression
|
| + Source libSource = 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.^}''');
|
| + // Assume that imported libraries are resolved
|
| + await resolveLibraryUnit(libSource);
|
| + await computeSuggestions();
|
| + expect(replacementOffset, completionOffset);
|
| + expect(replacementLength, 0);
|
| + assertSuggestNamedConstructor('c', 'X');
|
| + assertNotSuggested('F1');
|
| + assertNotSuggested('T1');
|
| + assertNotSuggested('_d');
|
| + assertNotSuggested('z');
|
| + assertNotSuggested('m');
|
| + }
|
| +
|
| + test_ConstructorName_importedFactory2() async {
|
| + // SimpleIdentifier PrefixedIdentifier TypeName ConstructorName
|
| + // InstanceCreationExpression
|
| + addTestSource('''
|
| + main() {new String.fr^omCharCodes([]);}''');
|
| + await computeSuggestions();
|
| + expect(replacementOffset, completionOffset - 2);
|
| + expect(replacementLength, 13);
|
| + assertSuggestNamedConstructor('fromCharCodes', 'String');
|
| + assertNotSuggested('isEmpty');
|
| + assertNotSuggested('isNotEmpty');
|
| + assertNotSuggested('length');
|
| + assertNotSuggested('Object');
|
| + assertNotSuggested('String');
|
| + }
|
| +
|
| + test_ConstructorName_localClass() async {
|
| + // SimpleIdentifier PrefixedIdentifier TypeName ConstructorName
|
| + // InstanceCreationExpression
|
| + addTestSource('''
|
| + int T1;
|
| + F1() { }
|
| + class X {X.c(); X._d(); z() {}}
|
| + main() {new X.^}''');
|
| + await computeSuggestions();
|
| + expect(replacementOffset, completionOffset);
|
| + expect(replacementLength, 0);
|
| + assertSuggestNamedConstructor('c', 'X');
|
| + assertSuggestNamedConstructor('_d', 'X');
|
| + assertNotSuggested('F1');
|
| + assertNotSuggested('T1');
|
| + assertNotSuggested('z');
|
| + assertNotSuggested('m');
|
| + }
|
| +
|
| + test_ConstructorName_localFactory() async {
|
| + // SimpleIdentifier PrefixedIdentifier TypeName ConstructorName
|
| + // InstanceCreationExpression
|
| + addTestSource('''
|
| + int T1;
|
| + F1() { }
|
| + class X {factory X.c(); factory X._d(); z() {}}
|
| + main() {new X.^}''');
|
| + await computeSuggestions();
|
| + expect(replacementOffset, completionOffset);
|
| + expect(replacementLength, 0);
|
| + assertSuggestNamedConstructor('c', 'X');
|
| + assertSuggestNamedConstructor('_d', 'X');
|
| + assertNotSuggested('F1');
|
| + assertNotSuggested('T1');
|
| + assertNotSuggested('z');
|
| + assertNotSuggested('m');
|
| + }
|
| +}
|
|
|