Index: pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart |
diff --git a/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..057fd7ff43d5840dce1d43c73171e2cb9d17b296 |
--- /dev/null |
+++ b/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart |
@@ -0,0 +1,177 @@ |
+// Copyright (c) 2015, 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.library_member; |
+ |
+import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart'; |
+import 'package:analysis_server/src/services/completion/dart/library_member_contributor.dart'; |
+import 'package:test_reflective_loader/test_reflective_loader.dart'; |
+import 'package:unittest/unittest.dart'; |
+ |
+import '../../../utils.dart'; |
+import 'completion_contributor_util.dart'; |
+ |
+main() { |
+ initializeTestEnvironment(); |
+ defineReflectiveTests(LibraryMemberContributorTest); |
+} |
+ |
+@reflectiveTest |
+class LibraryMemberContributorTest extends DartCompletionContributorTest { |
+ @override |
+ DartCompletionContributor createContributor() { |
+ return new LibraryMemberContributor(); |
+ } |
+ |
+ test_libraryPrefix() async { |
+ // SimpleIdentifier PrefixedIdentifier ExpressionStatement |
+ addTestSource('import "dart:async" as bar; foo() {bar.^}'); |
+ await computeSuggestions(); |
+ assertSuggestClass('Future'); |
+ assertNotSuggested('loadLibrary'); |
+ } |
+ |
+ test_libraryPrefix2() async { |
+ // SimpleIdentifier MethodInvocation ExpressionStatement |
+ addTestSource('import "dart:async" as bar; foo() {bar.^ print("f")}'); |
+ await computeSuggestions(); |
+ assertSuggestClass('Future'); |
+ } |
+ |
+ test_libraryPrefix3() async { |
+ // SimpleIdentifier MethodInvocation ExpressionStatement |
+ addTestSource('import "dart:async" as bar; foo() {new bar.F^ print("f")}'); |
+ await computeSuggestions(); |
+ assertSuggestConstructor('Future'); |
+ assertSuggestConstructor('Future.delayed'); |
+ } |
+ |
+ test_libraryPrefix_deferred() async { |
+ // SimpleIdentifier PrefixedIdentifier ExpressionStatement |
+ addTestSource('import "dart:async" deferred as bar; foo() {bar.^}'); |
+ await computeSuggestions(); |
+ assertSuggestClass('Future'); |
+ assertSuggestFunction('loadLibrary', 'Future<dynamic>'); |
+ } |
+ |
+ test_libraryPrefix_with_exports() async { |
+ addSource('/libA.dart', 'library libA; class A { }'); |
+ addSource('/libB.dart', 'library libB; export "/libA.dart"; class B { }'); |
+ addTestSource('import "/libB.dart" as foo; main() {foo.^} class C { }'); |
+ await computeSuggestions(); |
+ assertSuggestClass('B'); |
+ assertSuggestClass('A'); |
+ } |
+ |
+ test_PrefixedIdentifier_library() async { |
+ // 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.^}'''); |
+ await computeSuggestions(); |
+ expect(replacementOffset, completionOffset); |
+ expect(replacementLength, 0); |
+ assertSuggestClass('X'); |
+ assertSuggestClass('Y'); |
+ assertSuggestTopLevelVar('T1', null); |
+ assertNotSuggested('T2'); |
+ assertNotSuggested('Object'); |
+ assertNotSuggested('b'); |
+ assertNotSuggested('A'); |
+ assertNotSuggested('=='); |
+ } |
+ |
+ test_PrefixedIdentifier_library_typesOnly() async { |
+ // 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) {}'''); |
+ await computeSuggestions(); |
+ expect(replacementOffset, completionOffset); |
+ expect(replacementLength, 0); |
+ assertSuggestClass('X'); |
+ assertSuggestClass('Y'); |
+ assertNotSuggested('T1'); |
+ assertNotSuggested('T2'); |
+ assertNotSuggested('Object'); |
+ assertNotSuggested('b'); |
+ assertNotSuggested('A'); |
+ assertNotSuggested('=='); |
+ } |
+ |
+ test_PrefixedIdentifier_library_typesOnly2() async { |
+ // 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.^) {}'''); |
+ await computeSuggestions(); |
+ expect(replacementOffset, completionOffset); |
+ expect(replacementLength, 0); |
+ assertSuggestClass('X'); |
+ assertSuggestClass('Y'); |
+ assertNotSuggested('T1'); |
+ assertNotSuggested('T2'); |
+ assertNotSuggested('Object'); |
+ assertNotSuggested('b'); |
+ assertNotSuggested('A'); |
+ assertNotSuggested('=='); |
+ } |
+ |
+ test_PrefixedIdentifier_parameter() async { |
+ // 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.^}'''); |
+ await computeSuggestions(); |
+ assertNoSuggestions(); |
+ } |
+ |
+ test_PrefixedIdentifier_prefix() async { |
+ // SimpleIdentifier PrefixedIdentifier ExpressionStatement |
+ addSource( |
+ '/testA.dart', |
+ ''' |
+ class A {static int bar = 10;} |
+ _B() {}'''); |
+ addTestSource(''' |
+ import "/testA.dart"; |
+ class X {foo(){A^.bar}}'''); |
+ await computeSuggestions(); |
+ assertNoSuggestions(); |
+ } |
+} |