Index: pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart |
diff --git a/pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2de1f23a28e870474c3cc56f285a818b72d1e0ac |
--- /dev/null |
+++ b/pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart |
@@ -0,0 +1,377 @@ |
+// 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_prefix; |
+ |
+import 'package:analysis_server/src/protocol_server.dart'; |
+import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart'; |
+import 'package:analysis_server/src/services/completion/dart/library_prefix_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(LibraryPrefixContributorTest); |
+} |
+ |
+@reflectiveTest |
+class LibraryPrefixContributorTest extends DartCompletionContributorTest { |
+ void assertSuggestLibraryPrefixes(List<String> expectedPrefixes) { |
+ for (String prefix in expectedPrefixes) { |
+ CompletionSuggestion cs = assertSuggest(prefix, |
+ csKind: CompletionSuggestionKind.IDENTIFIER, |
+ relevance: DART_RELEVANCE_DEFAULT); |
+ Element element = cs.element; |
+ expect(element, isNotNull); |
+ expect(element.kind, equals(ElementKind.LIBRARY)); |
+ expect(element.parameters, isNull); |
+ expect(element.returnType, isNull); |
+ assertHasNoParameterInfo(cs); |
+ } |
+ if (suggestions.length != expectedPrefixes.length) { |
+ failedCompletion('expected only ${expectedPrefixes.length} suggestions'); |
+ } |
+ } |
+ |
+ @override |
+ DartCompletionContributor createContributor() { |
+ return new LibraryPrefixContributor(); |
+ } |
+ |
+ test_Block() async { |
+ // 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 { }'''); |
+ await computeSuggestions(); |
+ expect(replacementOffset, completionOffset); |
+ expect(replacementLength, 0); |
+ assertSuggestLibraryPrefixes(['g']); |
+ } |
+ |
+ test_Block_final_final() async { |
+ // 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 { }'''); |
+ await computeSuggestions(); |
+ expect(replacementOffset, completionOffset); |
+ expect(replacementLength, 0); |
+ assertSuggestLibraryPrefixes(['g']); |
+ } |
+ |
+ test_Block_final_var() async { |
+ // 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 { }'''); |
+ await computeSuggestions(); |
+ expect(replacementOffset, completionOffset); |
+ expect(replacementLength, 0); |
+ assertSuggestLibraryPrefixes(['g']); |
+ } |
+ |
+ test_ClassDeclaration_body() async { |
+ // ClassDeclaration CompilationUnit |
+ addSource( |
+ '/testB.dart', |
+ ''' |
+class B { }'''); |
+ addTestSource(''' |
+import "testB.dart" as x; |
+@deprecated class A {^} |
+class _B {} |
+A T;'''); |
+ await computeSuggestions(); |
+ expect(replacementOffset, completionOffset); |
+ expect(replacementLength, 0); |
+ assertSuggestLibraryPrefixes(['x']); |
+ } |
+ |
+ test_ClassDeclaration_body_final() async { |
+ // ClassDeclaration CompilationUnit |
+ addSource( |
+ '/testB.dart', |
+ ''' |
+class B { }'''); |
+ addTestSource(''' |
+import "testB.dart" as x; |
+class A {final ^} |
+class _B {} |
+A T;'''); |
+ await computeSuggestions(); |
+ expect(replacementOffset, completionOffset); |
+ expect(replacementLength, 0); |
+ assertSuggestLibraryPrefixes(['x']); |
+ } |
+ |
+ test_ClassDeclaration_body_final_field() async { |
+ // ClassDeclaration CompilationUnit |
+ addSource( |
+ '/testB.dart', |
+ ''' |
+class B { }'''); |
+ addTestSource(''' |
+import "testB.dart" as x; |
+class A {final ^ A(){}} |
+class _B {} |
+A T;'''); |
+ await computeSuggestions(); |
+ expect(replacementOffset, completionOffset); |
+ expect(replacementLength, 0); |
+ assertSuggestLibraryPrefixes(['x']); |
+ } |
+ |
+ test_ClassDeclaration_body_final_field2() async { |
+ // ClassDeclaration CompilationUnit |
+ addSource( |
+ '/testB.dart', |
+ ''' |
+class B { }'''); |
+ addTestSource(''' |
+import "testB.dart" as Soo; |
+class A {final S^ A();} |
+class _B {} |
+A Sew;'''); |
+ await computeSuggestions(); |
+ expect(replacementOffset, completionOffset - 1); |
+ expect(replacementLength, 1); |
+ assertSuggestLibraryPrefixes(['Soo']); |
+ } |
+ |
+ test_ClassDeclaration_body_final_final() async { |
+ // ClassDeclaration CompilationUnit |
+ addSource( |
+ '/testB.dart', |
+ ''' |
+class B { }'''); |
+ addTestSource(''' |
+import "testB.dart" as x; |
+class A {final ^ final foo;} |
+class _B {} |
+A T;'''); |
+ await computeSuggestions(); |
+ expect(replacementOffset, completionOffset); |
+ expect(replacementLength, 0); |
+ assertSuggestLibraryPrefixes(['x']); |
+ } |
+ |
+ test_ClassDeclaration_body_final_var() async { |
+ // ClassDeclaration CompilationUnit |
+ addSource( |
+ '/testB.dart', |
+ ''' |
+class B { }'''); |
+ addTestSource(''' |
+import "testB.dart" as x; |
+class A {final ^ var foo;} |
+class _B {} |
+A T;'''); |
+ await computeSuggestions(); |
+ expect(replacementOffset, completionOffset); |
+ expect(replacementLength, 0); |
+ assertSuggestLibraryPrefixes(['x']); |
+ } |
+ |
+ test_InstanceCreationExpression() async { |
+ addSource( |
+ '/testA.dart', |
+ ''' |
+class A {foo(){var f; {var x;}}} |
+class B {B(this.x, [String boo]) { } int x;} |
+class C {C.bar({boo: 'hoo', int z: 0}) { } }'''); |
+ addTestSource(''' |
+import "/testA.dart" as t; |
+import "dart:math" as math; |
+main() {new ^ String x = "hello";}'''); |
+ await computeSuggestions(); |
+ assertSuggestLibraryPrefixes(['math', 't']); |
+ } |
+ |
+ test_InstanceCreationExpression2() async { |
+ addTestSource('import "dart:convert" as json;f() {var x=new js^}'); |
+ await computeSuggestions(); |
+ assertSuggestLibraryPrefixes(['json']); |
+ } |
+ |
+ test_InstanceCreationExpression_inPart() async { |
+ addSource( |
+ '/testA.dart', |
+ ''' |
+class A {foo(){var f; {var x;}}} |
+class B {B(this.x, [String boo]) { } int x;} |
+class C {C.bar({boo: 'hoo', int z: 0}) { } }'''); |
+ addSource( |
+ '/testB.dart', |
+ ''' |
+library testB; |
+import "/testA.dart" as t; |
+import "dart:math" as math; |
+part "$testFile" |
+main() {new ^ String x = "hello";}'''); |
+ addTestSource(''' |
+part of testB; |
+main() {new ^ String x = "hello";}'''); |
+ await computeLibrariesContaining(); |
+ await computeSuggestions(); |
+ assertSuggestLibraryPrefixes(['math', 't']); |
+ } |
+ |
+ test_InstanceCreationExpression_inPart_detached() async { |
+ addSource( |
+ '/testA.dart', |
+ ''' |
+class A {foo(){var f; {var x;}}} |
+class B {B(this.x, [String boo]) { } int x;} |
+class C {C.bar({boo: 'hoo', int z: 0}) { } }'''); |
+ addSource( |
+ '/testB.dart', |
+ ''' |
+library testB; |
+import "/testA.dart" as t; |
+import "dart:math" as math; |
+//part "$testFile" |
+main() {new ^ String x = "hello";}'''); |
+ addTestSource(''' |
+//part of testB; |
+main() {new ^ String x = "hello";}'''); |
+ await computeSuggestions(); |
+ assertNoSuggestions(); |
+ } |
+} |