2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.jetbrains.plugins.groovy.completion;
20 import com.intellij.codeInsight.CodeInsightSettings
21 import com.intellij.codeInsight.lookup.LookupElement
22 import com.intellij.codeInsight.lookup.LookupElementPresentation
23 import org.jetbrains.plugins.groovy.GroovyFileType
24 import org.jetbrains.plugins.groovy.util.TestUtils
25 import com.intellij.psi.codeStyle.CodeStyleSettingsManager
26 import org.jetbrains.plugins.groovy.formatter.GroovyCodeStyleSettings
27 import com.intellij.codeInsight.completion.CompletionType
30 * @author Maxim.Medvedev
32 public class GroovyCompletionTest extends GroovyCompletionTestBase {
34 protected String getBasePath() {
35 return TestUtils.getTestDataPath() + "groovy/completion/";
39 protected void tearDown() {
40 CodeInsightSettings.instance.COMPLETION_CASE_SENSITIVE = CodeInsightSettings.FIRST_LETTER
44 public void testFinishMethodWithLParen() throws Throwable {
45 myFixture.testCompletionVariants(getTestName(false) + ".groovy", "getBar", "getClass", "getFoo");
47 myFixture.checkResultByFile(getTestName(false) + "_after.groovy");
50 public void testNamedParametersForApplication() throws Throwable {
51 doVariantableTest("abx", "aby");
54 public void testNamedParametersForMethodCall() throws Throwable {
55 doVariantableTest("abx", "aby");
58 public void testNamedParameters1() throws Throwable {
59 doVariantableTest("abx", "aby");
62 public void testNamedParameters2() throws Throwable {
63 doVariantableTest("abx", "aby");
66 public void testNamedParametersInMap1() throws Throwable {
67 doVariantableTest("abx", "aby");
70 public void testNamedParametersInMap2() throws Throwable {
71 doVariantableTest("abx", "aby");
74 public void testNamedParametersInSecondMap1() throws Throwable {
78 public void testNamedParametersInSecondMap2() throws Throwable {
82 public void testNamedParametersExcludeExisted() throws Throwable {
83 doVariantableTest("abx", "aby");
86 public void testNamedParametersExcludeExisted2() throws Throwable {
87 doVariantableTest("abx", "aby", "abz");
90 public void testNamedParametersExcludeExistedMap() throws Throwable {
91 doVariantableTest("abx", "aby");
94 public void testNamedParametersForNotMap() throws Throwable {
98 public void testNamedParametersForConstructorCall() throws Throwable {
99 doVariantableTest("hahaha", "hohoho");
102 public void testUnfinishedMethodTypeParameter() throws Throwable {
103 doVariantableTest("MyParameter", "MySecondParameter");
106 public void testUnfinishedMethodTypeParameter2() throws Throwable {
107 doVariantableTest("MyParameter", "MySecondParameter");
110 public void testInstanceofHelpsDetermineType() throws Throwable {
114 public void testNotInstanceofDoesntHelpDetermineType() throws Throwable {
115 myFixture.testCompletion(getTestName(false) + ".groovy", getTestName(false) + ".groovy");
118 public void testNotInstanceofDoesntHelpDetermineType2() throws Throwable {
119 myFixture.testCompletion(getTestName(false) + ".groovy", getTestName(false) + ".groovy");
122 public void testTypeParameterCompletion() throws Throwable {
123 myFixture.testCompletionVariants(getTestName(false) + ".groovy", "put", "putAll");
126 public void testCatchClauseParameter() throws Throwable {
127 myFixture.testCompletionVariants(getTestName(false) + ".groovy", "getCause", "getClass");
130 public void testFieldSuggestedOnce1() throws Throwable {
131 myFixture.testCompletion(getTestName(false) + ".groovy", getTestName(false) + ".groovy");
132 assertNull(myFixture.getLookupElements());
135 public void testFieldSuggestedOnce2() throws Throwable {
136 myFixture.testCompletion(getTestName(false) + ".groovy", getTestName(false) + ".groovy");
137 assertNull(myFixture.getLookupElements());
140 public void testFieldSuggestedOnce3() throws Throwable {
141 myFixture.testCompletion(getTestName(false) + ".groovy", getTestName(false) + ".groovy");
142 assertNull(myFixture.getLookupElements());
145 public void testFieldSuggestedOnce4() throws Throwable {
146 myFixture.testCompletion(getTestName(false) + ".groovy", getTestName(false) + ".groovy");
147 assertNull(myFixture.getLookupElements());
150 public void testFieldSuggestedOnce5() throws Throwable {
151 myFixture.testCompletion(getTestName(false) + ".groovy", getTestName(false) + ".groovy");
152 assertNull(myFixture.getLookupElements());
155 public void testFieldSuggestedInMethodCall() throws Throwable {
156 myFixture.testCompletion(getTestName(false) + ".groovy", getTestName(false) + "_after.groovy");
159 public void testMethodParameterNoSpace() throws Throwable {
160 myFixture.testCompletion(getTestName(false) + ".groovy", getTestName(false) + "_after.groovy");
163 public void testGroovyDocParameter() throws Throwable {
164 myFixture.testCompletionVariants(getTestName(false) + ".groovy", "xx", "xy");
167 public void testInnerClassExtendsImplementsCompletion() throws Throwable {
168 myFixture.testCompletionVariants(getTestName(false) + ".groovy", "extends", "implements");
171 public void testInnerClassCompletion() throws Throwable {
172 myFixture.testCompletionVariants(getTestName(false) + ".groovy", "Inner1", "Inner2");
175 public void testQualifiedThisCompletion() throws Throwable {
176 myFixture.testCompletionVariants(getTestName(false) + ".groovy", "foo1", "foo2");
179 public void testQualifiedSuperCompletion() throws Throwable {
180 myFixture.testCompletionVariants(getTestName(false) + ".groovy", "foo1", "foo2");
183 public void testThisKeywordCompletionAfterClassName1() throws Throwable {
187 public void testThisKeywordCompletionAfterClassName2() throws Throwable {
191 public void testCompletionInParameterListInClosableBlock() throws Throwable { doBasicTest(); }
192 public void testCompletionInParameterListInClosableBlock3() throws Throwable { doBasicTest(); }
194 public void testCompletionInParameterListInClosableBlock2() throws Throwable {
195 myFixture.testCompletionVariants(getTestName(false) + ".groovy", "aDouble");
198 public void testStaticMemberFromInstanceContext() throws Throwable {
199 myFixture.testCompletionVariants(getTestName(false) + ".groovy", "var1", "var2");
202 public void testInstanceMemberFromStaticContext() throws Throwable {
203 myFixture.testCompletionVariants(getTestName(false) + ".groovy", "var3", "var4");
206 public void testTypeCompletionInVariableDeclaration1() throws Throwable {
210 public void testTypeCompletionInVariableDeclaration2() throws Throwable {
214 public void testTypeCompletionInParameter() throws Throwable {
218 public void testGStringConcatenationCompletion() throws Throwable {
219 myFixture.testCompletionVariants(getTestName(false) + ".groovy", "substring", "substring", "subSequence");
222 public void testPropertyWithSecondUpperLetter() throws Exception {
223 myFixture.testCompletionVariants(getTestName(false) + ".groovy", "geteMail", "getePost");
226 public void testInferredVariableType() throws Exception {
227 myFixture.configureByText "a.groovy", "def foo = 'xxx'; fo<caret>"
228 def presentation = new LookupElementPresentation()
229 myFixture.completeBasic()[0].renderElement(presentation)
230 assert presentation.itemText == 'foo'
231 assert presentation.typeText == 'String'
234 public void testSubstitutedMethodType() throws Exception {
235 myFixture.configureByText "a.groovy", "new HashMap<String, Integer>().put<caret>x"
236 def presentation = new LookupElementPresentation()
237 myFixture.completeBasic()[0].renderElement(presentation)
238 assert presentation.itemText == 'put'
239 assert presentation.tailText == '(String key, Integer value)'
240 assert presentation.typeText == 'Integer'
243 public void testIntCompletionInPlusMethod() {doBasicTest();}
244 public void testIntCompletionInGenericParameter() {doBasicTest();}
246 public void testWhenSiblingIsStaticallyImported_Method() throws Exception {
247 myFixture.addFileToProject "foo/Foo.groovy", """package foo
249 static def abcMethod() {}
250 static def defMethod() {}
254 myFixture.configureByText("a.groovy", """
255 import static foo.Foo.abcMethod
260 myFixture.completeBasic()
261 myFixture.checkResult """
262 import static foo.Foo.abcMethod
263 import static foo.Foo.defMethod
270 public void testWhenSiblingIsStaticallyImported_Field() throws Exception {
271 myFixture.addFileToProject "foo/Foo.groovy", """package foo
273 static def abcField = 4
274 static def defField = 2
278 myFixture.configureByText("a.groovy", """
279 import static foo.Foo.abcField
284 myFixture.completeBasic()
285 myFixture.checkResult """
286 import static foo.Foo.abcField
287 import static foo.Foo.defField
294 public void testCompletionNamedArgumentWithoutSpace() {
295 def settings = CodeStyleSettingsManager.getSettings(getProject()).getCustomSettings(GroovyCodeStyleSettings.class)
296 settings.SPACE_IN_NAMED_ARGUMENT = false
299 myFixture.configureByText(GroovyFileType.GROOVY_FILE_TYPE, """
301 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
305 myFixture.completeBasic()
306 myFixture.checkResult """
308 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
309 { m(arg111:<caret>) }
314 settings.SPACE_IN_NAMED_ARGUMENT = true
318 public void testCompletionNamedArgument1() {
319 myFixture.configureByText(GroovyFileType.GROOVY_FILE_TYPE, """
321 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
322 { m(arg111: 1, arg<caret>: 2, arg333: 3) }
325 myFixture.completeBasic()
327 myFixture.checkResult """
329 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
330 { m(arg111: 1, arg222: <caret>2, arg333: 3) }
335 public void testCompletionNamedArgument2() {
336 myFixture.configureByText(GroovyFileType.GROOVY_FILE_TYPE, """
338 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
339 { m arg111: 1, arg<caret>: 2, arg333: 3 }
342 myFixture.completeBasic()
344 myFixture.checkResult """
346 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
347 { m arg111: 1, arg222: <caret>2, arg333: 3 }
352 public void testCompletionNamedArgument3() {
353 myFixture.configureByText(GroovyFileType.GROOVY_FILE_TYPE, """
355 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
359 myFixture.completeBasic()
361 myFixture.checkResult """
363 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
364 { m arg111: <caret> }
369 public void testCompletionNamedArgument4() {
370 myFixture.configureByText(GroovyFileType.GROOVY_FILE_TYPE, """
372 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
373 { m (arg1<caret> zzz) }
376 myFixture.completeBasic()
378 myFixture.checkResult """
380 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
381 { m (arg111: <caret>, zzz) }
386 public void testCompletionNamedArgument5() {
387 myFixture.configureByText(GroovyFileType.GROOVY_FILE_TYPE, """
389 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
395 myFixture.completeBasic()
397 myFixture.checkResult("""
399 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
400 { m (arg111: <caret>, {
407 public void testCompletionNamedArgument6() {
408 myFixture.configureByText(GroovyFileType.GROOVY_FILE_TYPE, """
410 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
414 myFixture.completeBasic()
416 myFixture.checkResult """
418 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
419 { m([arg111: <caret>])}
424 public void testCompletionNamedArgument7() {
425 myFixture.configureByText(GroovyFileType.GROOVY_FILE_TYPE, """
427 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
431 myFixture.completeBasic()
433 myFixture.checkResult """
435 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
436 { m(arg111: <caret>)}
441 public void testCompletionNamedArgument8() {
442 myFixture.configureByText(GroovyFileType.GROOVY_FILE_TYPE, """
444 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
448 myFixture.completeBasic()
450 myFixture.checkResult """
452 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
453 { m(arg111: <caret>,)}
458 public void testCompletionNamedArgumentWithDD() {
459 myFixture.configureByText(GroovyFileType.GROOVY_FILE_TYPE, """
461 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
465 myFixture.completeBasic()
468 myFixture.checkResult """
470 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
471 { m(arg111: <caret>)}
476 public void testCompletionNamedArgumentReplace() {
477 myFixture.configureByText(GroovyFileType.GROOVY_FILE_TYPE, """
479 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
480 { m(arg<caret>222: 'a')}
483 myFixture.completeBasic()
484 myFixture.type("1\t")
486 myFixture.checkResult """
488 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
494 public void testCompletionNamedArgumentWithSpace() {
495 myFixture.configureByText(GroovyFileType.GROOVY_FILE_TYPE, """
497 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
501 myFixture.completeBasic()
504 myFixture.checkResult """
506 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
507 { m(arg111: <caret>)}
512 public void testCompletionNamedArgumentWithNewLine1() {
513 myFixture.configureByText(GroovyFileType.GROOVY_FILE_TYPE, """
515 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
523 myFixture.completeBasic()
526 myFixture.checkResult """
528 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
538 public void testCompletionNamedArgumentWithNewLine2() {
539 myFixture.configureByText(GroovyFileType.GROOVY_FILE_TYPE, """
541 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
549 myFixture.completeBasic()
552 myFixture.checkResult """
554 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
564 public void testCompletionNamedArgumentWithNewLine4() {
565 myFixture.configureByText(GroovyFileType.GROOVY_FILE_TYPE, """
567 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
576 myFixture.completeBasic()
578 myFixture.checkResult """
580 public int m(arg) { return arg.arg111 + arg.arg222 + arg.arg333; }
591 public void testSpreadOperator() {
592 doVariantableTest("foo1", "foo2")
595 public void testGrvy945() {
596 def file = myFixture.configureByText(GroovyFileType.GROOVY_FILE_TYPE, """class MyCategory {
597 static def plus(MyCategory t, MyCat<caret>) {
600 LookupElement[] lookupElements = myFixture.completeBasic()
601 assertNull(lookupElements)
603 assertEquals """class MyCategory {
604 static def plus(MyCategory t, MyCategory) {
609 void configure(String text) {
610 myFixture.configureByText("a.groovy", text)
613 public void testGenericsAfterNew() {
614 configure "List<String> l = new ArrLi<caret>"
615 myFixture.completeBasic()
617 myFixture.checkResult "List<String> l = new ArrayList<String>(<caret>)"
620 public void testAfterNewWithInner() {
621 myFixture.addClass """class Zzoo {
624 configure "Zzoo l = new Zz<caret>"
625 myFixture.completeBasic()
626 myFixture.checkResult "Zzoo l = new Zzoo()<caret>"
629 public void testNothingAfterIntegerLiteral() {
630 configure "2f<caret>"
631 assertEmpty myFixture.completeBasic()
634 public void testPackagedContainingClassNameAfterStatic() {
635 myFixture.configureFromExistingVirtualFile(myFixture.addFileToProject("foo/cls.groovy", """
641 myFixture.completeBasic()
642 assert myFixture.editor.document.text.contains("static Zzzzzzz")
645 public void testDontCompleteSubpackageOfImplicitlyImported() {
646 myFixture.addFileToProject "A.groovy", """
648 myFixture.testCompletionVariants "A.groovy", "int", "interface" //don't complete 'instrument' from 'java.lang'
652 public void testEatingThisReference() {
653 configure "def x = []; x.<caret> this"
654 myFixture.completeBasic()
655 myFixture.type 'ad\t'
656 myFixture.checkResult "def x = []; x.add(<caret>) this"
659 public void testEatingClosingParenthesis() {
671 public void testDontAddStaticImportSecondTime() {
672 configure """import static java.lang.String.format
675 myFixture.completeBasic()
676 myFixture.checkResult """import static java.lang.String.format
680 public void testImportAsterisk() {
681 myFixture.configureByText "a.groovy", "import java.lang.<caret>"
682 myFixture.completeBasic()
684 myFixture.checkResult "import java.lang.*<caret>"
687 public void testNoDotsInImport() {
688 myFixture.configureByText "a.groovy", "import java.<caret>"
689 myFixture.completeBasic()
690 myFixture.type 'lan\n'
691 myFixture.checkResult "import java.lang<caret>"
694 public void testInvalidScriptClass() {
695 myFixture.addFileToProject("b.groovy", "//comment")
696 myFixture.configureByText "a.groovy", "def b<caret>"
697 myFixture.completeBasic()
698 myFixture.checkResult "def b<caret>"
701 public void testSpacesAroundEq() {
702 myFixture.configureByText "a.groovy", "int xxx, xxy; xx<caret>"
703 myFixture.completeBasic()
705 myFixture.checkResult "int xxx, xxy; xxx = <caret>"
708 public void testOnlyAnnotationsAfterAt() {
709 myFixture.addClass "class AbcdClass {}; @interface AbcdAnno {}"
710 myFixture.configureByText "a.groovy", "@Abcd<caret> class A {}"
711 myFixture.completeBasic()
712 myFixture.checkResult "@AbcdAnno<caret> class A {}"
715 public void testOnlyAnnotationsAfterAtInMethodParameters() {
716 myFixture.addClass "class AbcdClass {}; @interface AbcdAnno {}"
717 myFixture.configureByText "a.groovy", "def foo(@Abcd<caret> ) {}"
718 myFixture.completeBasic()
719 myFixture.checkResult "def foo(@AbcdAnno<caret> ) {}"
722 public void testNoCompletionInClassBodyComments() {
723 myFixture.configureByText "a.groovy", "class Foo { /* protec<caret> */ }"
724 assertEmpty(myFixture.completeBasic())
727 public void testNoCompletionInCodeBlockComments() {
728 myFixture.configureByText "a.groovy", "def Foo() { /* whil<caret> */ }"
729 assertEmpty(myFixture.completeBasic())
732 public void testParenthesesForExpectedClassTypeRegardlessInners() {
733 myFixture.addClass "class Fooooo { interface Bar {} }"
734 myFixture.configureByText "a.groovy", "Fooooo f = new Foo<caret>"
735 myFixture.completeBasic()
736 myFixture.checkResult "Fooooo f = new Fooooo()<caret>"
739 public void testParenthesesForUnexpectedClassTypeRegardingInners() {
740 myFixture.addClass "class Fooooo { interface Bar {} }"
741 myFixture.configureByText "a.groovy", "Fooooo.Bar f = new Foo<caret>"
742 myFixture.completeBasic()
743 myFixture.checkResult "Fooooo.Bar f = new Fooooo<caret>"
746 public void testOnlyExceptionsInCatch() {
747 myFixture.addClass "package foo; public class AbcdClass {}; public class AbcdException extends Throwable {}"
748 myFixture.configureByText "a.groovy", "try {} catch (Abcd<caret>"
749 myFixture.completeBasic()
751 myFixture.checkResult """import foo.AbcdException
753 try {} catch (AbcdException"""
756 public void testOnlyExceptionsInCatch2() {
757 myFixture.addClass "class AbcdClass {}; class AbcdException extends Throwable {}"
758 myFixture.configureByText "a.groovy", "try {} catch (Abcd<caret> e) {}"
759 myFixture.completeBasic()
760 myFixture.checkResult "try {} catch (AbcdException<caret> e) {}"
763 public void testTopLevelClassesFromPackaged() throws Throwable {
764 myFixture.addClass "public class Fooooo {}"
765 final text = "package foo; class Bar { Fooo<caret> }"
766 def file = myFixture.addFileToProject("foo/Bar.groovy", text)
767 myFixture.configureFromExistingVirtualFile file.virtualFile
768 assertEmpty myFixture.completeBasic()
769 myFixture.checkResult text
772 public void testLocalVarOverlaysField() {
773 myFixture.configureByText "a.groovy", """
782 myFixture.completeBasic()
784 myFixture.checkResult """
796 public void testParenthesesInMethodCompletion() {
797 myFixture.configureByText "a.groovy", """
800 myFixture.completeBasic()
801 myFixture.checkResult """
806 public void testFinishClassNameWithSquareBracket() {
807 myFixture.addClass("class AbcdClass {}; class AbcdeClass {}")
808 checkCompletion("Abcd<caret>", '[', "AbcdClass[<caret>]")
811 public void testFinishClassNameWithSquareBracketAfterNew() {
812 myFixture.addClass("class AbcdClass {}; class AbcdeClass {}")
813 checkCompletion("new Abcd<caret>", '[', "new AbcdClass[<caret>]")
816 public void testFinishMethodNameWithSquareBracket() {
817 myFixture.addClass("""class AbcdClass {
818 static int[] foo(int x){}
819 static int[] fobar(){}
821 checkCompletion("AbcdClass.fo<caret>", '[', "AbcdClass.fobar()[<caret>]")
824 public void testFinishVariableNameWithSquareBracket() {
825 checkCompletion("int[] fooo, foobar; foo<caret>", '[', "int[] fooo, foobar; foobar[<caret>]")
828 public void testFinishClassNameWithLt() {
829 myFixture.addClass("class AbcdClass {}; class AbcdeClass {}")
830 checkCompletion("Abcd<caret>", '<', "AbcdClass<<caret>>")
833 public void testFinishClassNameWithLtAfterNew() {
834 myFixture.addClass("class AbcdClass<T> {}; class AbcdeClass {}")
835 checkCompletion("new Abcd<caret>", '<', "new AbcdClass<<caret>>()")
838 public void testMapKeysUsedInFile() throws Exception {
839 CodeInsightSettings.instance.COMPLETION_CASE_SENSITIVE = CodeInsightSettings.NONE
840 doVariantableTest 'foo1', 'foo3', 'foo4', 'Foo5', 'Foo7'
843 public void testNoClassesAsMapKeys() throws Exception {
844 CodeInsightSettings.instance.COMPLETION_CASE_SENSITIVE = CodeInsightSettings.NONE
848 public void testNamedArgsUsedInFile() throws Exception {
849 myFixture.configureByFile(getTestName(false) + ".groovy");
850 doVariantableTest 'false', 'foo2', 'float', 'foo1', 'foo3', 'foo4', 'foo5'
853 public void testSuggestMembersOfExpectedType() {
854 myFixture.addClass("enum Foo { aaaaaaaaaaaaaaaaaaaaaa, bbbbbb }")
855 checkCompletion("Foo f = aaaaaaaa<caret>", '\n', "Foo f = Foo.aaaaaaaaaaaaaaaaaaaaaa<caret>")
858 public void testFieldTypeAfterModifier() {
859 myFixture.addClass("package bar; public class Fooooooooooo { }")
863 }''', '\n', '''import bar.Fooooooooooo
866 private Fooooooooooo<caret>
870 public void testSuperClassProperty() throws Exception {
871 checkSingleItemCompletion """
872 class A { def foooooooooooo }
880 class A { def foooooooooooo }
890 public void testDoubleSpace() {
891 checkCompletion "asse<caret>x", ' ', 'assert <caret>x'
894 public void testDontShowAccessors() {
895 assertNull doContainsTest("getFoo", """
900 def a = new MyClass()
904 public void testPreferInstanceof() {
913 class Instantiation {}
915 myFixture.completeBasic()
916 assert myFixture.lookupElementStrings[0] == 'instanceof'
919 public void testForFinal() {
920 assert doContainsTest('final', '''
929 public void testExcludeStringBuffer() {
930 assert doContainsTest('StringBuffer', 'StringBuff<caret>f')
931 CodeInsightSettings.getInstance().EXCLUDED_PACKAGES = [StringBuffer.name] as String[]
933 assert !doContainsTest('StringBuffer', 'StringBuff<caret>f')
936 CodeInsightSettings.getInstance().EXCLUDED_PACKAGES = new String[0]
940 private doContainsTest(String itemToCheck, String text) {
941 myFixture.configureByText "a.groovy", text
943 final LookupElement[] completion = myFixture.completeBasic()
944 return completion.find {println it.lookupString;itemToCheck == it.lookupString}
947 public void testWordCompletionInLiterals() {
948 checkSingleItemCompletion('def foo = "fo<caret>"', 'def foo = "foo<caret>"')
950 public void testWordCompletionInLiterals2() {
951 checkSingleItemCompletion('''
960 public void testWordCompletionInComments() {
961 checkSingleItemCompletion('''
970 public void testNoModifiersAfterDef() throws Exception {
971 checkSingleItemCompletion 'def priv<caret>', 'def priv<caret>'
974 public void testIfSpace() { checkCompletion 'int iff; if<caret>', ' ', "int iff; if <caret>" }
976 public void testIfParenthesis() { checkCompletion 'int iff; if<caret>', '(', "int iff; if (<caret>)" }
978 public void testEnumPropertyType() {
979 checkSingleItemCompletion 'enum Foo {a,b; static List<StringBui<caret>>', "enum Foo {a,b; static List<StringBuilder<caret>>"
982 public void testEnumPropertyType2() {
983 checkSingleItemCompletion 'enum Foo {a,b; static List<StringBui<caret>', "enum Foo {a,b; static List<StringBuilder<caret>"
986 public void testShowAccessor() {
987 assertNotNull doContainsTest("getFoo", """
992 def a = new MyClass()
997 public void testContinue() {
998 assertNotNull doContainsTest("continue", """
1001 if (tst) cont<caret>
1006 public void testPreferParametersToClasses() {
1009 myFixture.configureByText "a.groovy", "def foo(stryng) { println str<caret> }"
1010 myFixture.completeBasic()
1011 assert myFixture.lookupElementStrings[0] == 'stryng'
1014 private def caseSensitiveNone() {
1015 CodeInsightSettings.instance.COMPLETION_CASE_SENSITIVE = CodeInsightSettings.NONE
1018 public void testFieldVsPackage() {
1019 myFixture.addFileToProject 'aaa/bbb/Foo.groovy', 'package aaa.bbb; class Foo{}'
1020 def file = myFixture.addFileToProject('aaa/bar.groovy', '''
1029 bbb.<caret>toString()
1033 myFixture.configureFromExistingVirtualFile file.virtualFile
1034 myFixture.completeBasic()
1035 assertFalse(myFixture.lookupElementStrings.contains('Foo'))
1038 public void testFieldVsPackage2() {
1039 myFixture.addFileToProject 'aaa/bbb/Foo.groovy', 'package aaa.bbb; class Foo{}'
1040 def file = myFixture.addFileToProject('aaa/bar.groovy', '''
1053 myFixture.configureFromExistingVirtualFile file.virtualFile
1054 myFixture.completeBasic()
1055 assertFalse(myFixture.lookupElementStrings.contains('Foo'))
1058 public void testClassNameBeforeParentheses(){
1062 public void testNewClassGenerics() {
1063 checkSingleItemCompletion 'new ArrayLi<caret>', 'new ArrayList<<caret>>()'
1066 public void testInnerClassStart() {
1067 checkSingleItemCompletion 'class Foo { cl<caret> }', 'class Foo { class <caret> }'
1070 public void testPropertyBeforeAccessor() {
1071 doVariantableTest 'soSe', 'setSoSe'
1074 public void testSortOrder0() {
1075 doVariantableTest 'se', 'setMetaClass', 'setProperty', 'setSe'
1078 public void testPrimitiveCastOverwrite() {
1079 checkCompletion 'byte v1 = (by<caret>te) 0', '\t', 'byte v1 = (byte<caret>) 0'
1082 public void testInitializerMatters() throws Exception {
1083 myFixture.configureByText("a.groovy", "class Foo {{ String f<caret>x = getFoo(); }; String getFoo() {}; }");
1084 myFixture.completeBasic()
1085 assert myFixture.lookupElementStrings == ["foo"]
1088 public void testFieldInitializerMatters() throws Exception {
1089 myFixture.configureByText("a.groovy", "class Foo { String f<caret>x = getFoo(); String getFoo() {}; }");
1090 myFixture.completeBasic()
1091 assert myFixture.lookupElementStrings == ["foo"]
1094 public void testAccessStaticViaInstanceSecond() throws Exception {
1095 myFixture.configureByText("a.groovy", """
1096 public class KeyVO {
1098 static void foo() {}
1101 myFixture.complete(CompletionType.BASIC, 1)
1102 assert !myFixture.lookupElementStrings
1103 myFixture.complete(CompletionType.BASIC, 2)
1104 assert myFixture.lookupElementStrings == ["foo"]
1107 public void testNoRepeatingModifiers() {
1108 myFixture.configureByText 'a.groovy', 'class A { public static <caret> }'
1109 myFixture.completeBasic()
1110 assert !('public' in myFixture.lookupElementStrings)
1111 assert !('static' in myFixture.lookupElementStrings)
1112 assert 'final' in myFixture.lookupElementStrings
1115 public void testSpaceTail() {
1116 checkCompletion 'class A <caret> ArrayList {}', ' ', 'class A extends <caret> ArrayList {}'
1117 checkCompletion 'class A <caret> ArrayList {}', '\n', 'class A extends<caret> ArrayList {}'
1118 checkSingleItemCompletion 'class Foo impl<caret> {}', 'class Foo implements <caret> {}'
1121 public void testPreferInterfacesInImplements() {
1122 myFixture.addClass('interface FooIntf {}')
1123 myFixture.addClass('class FooClass {}')
1124 doVariantableTest('FooIntf', 'FooClass')