blob: e837edeafea929b37f2a942527b3f71dccd81a65 [file] [log] [blame]
package com.intellij.codeInsight.completion;
import com.intellij.JavaTestUtil;
import com.intellij.codeInsight.lookup.Lookup;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupManager;
import com.intellij.codeInsight.lookup.impl.LookupManagerImpl;
import com.intellij.lang.java.JavaLanguage;
import com.intellij.openapi.roots.LanguageLevelProjectExtension;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
import com.intellij.testFramework.LightCodeInsightTestCase;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.annotations.NotNull;
/**
* Created by IntelliJ IDEA.
* User: ik
* Date: 20.08.2003
* Time: 15:44:18
* To change this template use Options | File Templates.
*/
@TestDataPath("$CONTENT_ROOT/testData")
public class CompletionStyleTest extends LightCodeInsightTestCase{
private static final String BASE_PATH = "/codeInsight/completion/style";
@Override
protected LanguageLevel getLanguageLevel() {
return LanguageLevel.JDK_1_6;
}
@NotNull
@Override
protected String getTestDataPath() {
return JavaTestUtil.getJavaTestDataPath();
}
public void testGenericParametersReplace() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before1.java");
performSmartCompletion();
select(Lookup.REPLACE_SELECT_CHAR, 2);
checkResultByFile(path + "/after1.java");
}
public void testIDEADEV5935() throws Exception {
configureFromFileText("A.java",
"public class A {\n" +
" public static void foo(String param1, String param2) {\n" +
" }\n" +
"\n" +
" public static void main(String[] args) {\n" +
" String param1 = args[0];\n" +
" String param2 = args[1];\n" +
" foo(<caret>);\n" +
" }\n" +
"}"
);
performSmartCompletion();
select(Lookup.NORMAL_SELECT_CHAR, getSelected());
checkResultByText(
"public class A {\n" +
" public static void foo(String param1, String param2) {\n" +
" }\n" +
"\n" +
" public static void main(String[] args) {\n" +
" String param1 = args[0];\n" +
" String param2 = args[1];\n" +
" foo(param1, <caret>);\n" +
" }\n" +
"}"
);
}
public void testIDEADEV2878() throws Exception {
configureFromFileText(
"A.java",
"class Bar<T> {}\n" +
"class Foo {\n" +
"public void createFoo(Bar<?> <caret>)\n" + "}");
performNormalCompletion();
checkResultByText(
"class Bar<T> {}\n" +
"class Foo {\n" +
"public void createFoo(Bar<?> bar<caret>)\n" + "}");
}
public void testMethodsParametersStyle1() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before3.java");
performSmartCompletion();
checkResultByFile(path + "/after3.java");
}
public void testMethodsParametersStyle2() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before4.java");
performSmartCompletion();
checkResultByFile(path + "/after4.java");
}
public void testKeywordsReplace() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before6.java");
performNormalCompletion();
select(Lookup.REPLACE_SELECT_CHAR, 0);
checkResultByFile(path + "/after6.java");
}
public void testLocalVariablePreselect() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before5.java");
performSmartCompletion();
assertEquals("xxxx", getSelected().getLookupString());
}
public void testMethodCompletionInsideInlineTags() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before7.java");
performNormalCompletion();
select(Lookup.REPLACE_SELECT_CHAR, 1);
checkResultByFile(path + "/after7.java");
}
public void testConstantsCompletion1() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before8.java");
performSmartCompletion();
select(Lookup.REPLACE_SELECT_CHAR, 0);
checkResultByFile(path + "/after8.java");
}
public void testConstantsCompletion2() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before9.java");
performSmartCompletion();
select(Lookup.REPLACE_SELECT_CHAR, 0);
checkResultByFile(path + "/after9.java");
}
public void testConstantsCompletion3() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before10.java");
performSmartCompletion();
select(Lookup.REPLACE_SELECT_CHAR, 0);
checkResultByFile(path + "/after10.java");
}
public void testCaretPositionAfterCompletion1() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before11.java");
performNormalCompletion();
select(Lookup.NORMAL_SELECT_CHAR, 0);
checkResultByFile(path + "/after11.java");
}
public void testCaretPositionAfterCompletion2() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before12.java");
performSmartCompletion();
select(Lookup.NORMAL_SELECT_CHAR, 0);
checkResultByFile(path + "/after12.java");
}
public void testParensReuse() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before13.java");
performNormalCompletion();
checkResultByFile(path + "/after13.java");
}
public void testParensInSynchronized() throws Exception{
CommonCodeStyleSettings styleSettings = getCodeStyleSettings();
styleSettings.SPACE_BEFORE_SYNCHRONIZED_PARENTHESES = false;
styleSettings.SPACE_WITHIN_SYNCHRONIZED_PARENTHESES = true;
final String path = BASE_PATH;
configureByFile(path + "/before22.java");
performNormalCompletion();
checkResultByFile(path + "/after22.java");
}
public void testMethodReplacementReuseParens1() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before15.java");
performNormalCompletion();
select(Lookup.REPLACE_SELECT_CHAR, getSelected());
checkResultByFile(path + "/after15.java");
}
public void testMethodReplacementReuseParens2() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before16.java");
performNormalCompletion();
select(Lookup.REPLACE_SELECT_CHAR, getSelected());
checkResultByFile(path + "/after16.java");
}
public void testMethodReplacementReuseParens3() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before17.java");
performNormalCompletion();
select(Lookup.REPLACE_SELECT_CHAR, getSelected());
checkResultByFile(path + "/after17.java");
}
public void testCastAfterNew1() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before21.java");
performSmartCompletion();
checkResultByFile(path + "/after21.java");
}
public void testCastParensStyle1() throws Exception{
final String path = BASE_PATH;
getCodeStyleSettings().SPACE_WITHIN_CAST_PARENTHESES = true;
getCodeStyleSettings().SPACE_AFTER_TYPE_CAST = false;
configureByFile(path + "/before31.java");
performSmartCompletion();
checkResultByFile(path + "/after31.java");
}
public void testMethodParensStyle2() throws Exception{
final String path = BASE_PATH;
CommonCodeStyleSettings styleSettings = getCodeStyleSettings();
final boolean space_before_method_call_parentheses = styleSettings.SPACE_BEFORE_METHOD_CALL_PARENTHESES;
styleSettings.SPACE_BEFORE_METHOD_CALL_PARENTHESES = true;
configureByFile(path + "/before32.java");
performNormalCompletion();
checkResultByFile(path + "/after32.java");
styleSettings.SPACE_BEFORE_METHOD_CALL_PARENTHESES = space_before_method_call_parentheses;
}
private static CommonCodeStyleSettings getCodeStyleSettings() {
return CodeStyleSettingsManager.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE);
}
public void testMethodParensStyle3() throws Exception{
final String path = BASE_PATH;
CommonCodeStyleSettings styleSettings = getCodeStyleSettings();
final boolean space_before_method_call_parentheses = styleSettings.SPACE_BEFORE_METHOD_CALL_PARENTHESES;
final boolean space_within_method_call_parentheses = styleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES;
styleSettings.SPACE_BEFORE_METHOD_CALL_PARENTHESES = true;
styleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES = true;
configureByFile(path + "/before32.java");
performNormalCompletion();
checkResultByFile(path + "/after32-a.java");
styleSettings.SPACE_BEFORE_METHOD_CALL_PARENTHESES = space_before_method_call_parentheses;
styleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES = space_within_method_call_parentheses;
}
/*public void testClassNameCompletion1() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before34.java");
performClassNameCompletion();
select('<', getSelected());
checkResultByFile(path + "/after34.java");
} */
public void testStaticsCompletion1() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before33.java");
performSmartCompletion();
select(Lookup.NORMAL_SELECT_CHAR, getSelected());
checkResultByFile(path + "/after33.java");
}
public void testStaticsCompletion2() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before39.java");
performSmartCompletion();
select(Lookup.NORMAL_SELECT_CHAR, getSelected());
checkResultByFile(path + "/after39.java");
}
public void testJavaDocLinkCompletion1() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before36.java");
performNormalCompletion();
select(Lookup.REPLACE_SELECT_CHAR, getSelected());
checkResultByFile(path + "/after36.java");
}
public void testGetterNameInInterface() throws Exception{
final String path = BASE_PATH;
configureByFile(path + "/before38.java");
performNormalCompletion();
checkResultByFile(path + "/after38.java");
}
private void performSmartCompletion(){
new CodeCompletionHandlerBase(CompletionType.SMART).invokeCompletion(getProject(), getEditor());
}
private void performNormalCompletion(){
new CodeCompletionHandlerBase(CompletionType.BASIC).invokeCompletion(getProject(), getEditor());
}
private void select(char completionChar, int index){
((LookupManagerImpl)LookupManager.getInstance(getProject())).forceSelection(completionChar, index);
}
private void select(char completionChar, LookupElement item){
((LookupManagerImpl)LookupManager.getInstance(getProject())).forceSelection(completionChar, item);
}
private LookupElement getSelected(){
return LookupManager.getInstance(getProject()).getActiveLookup().getCurrentItem();
}
@Override
protected void tearDown() throws Exception {
LookupManager.getInstance(getProject()).hideActiveLookup();
super.tearDown(); //To change body of overriden methods use Options | File Templates.
}
public void testAfterNew15() throws Exception {
final LanguageLevelProjectExtension ll = LanguageLevelProjectExtension.getInstance(getProject());
final LanguageLevel old = ll.getLanguageLevel();
ll.setLanguageLevel(LanguageLevel.JDK_1_5);
try {
final String path = BASE_PATH;
configureByFile(path + "/AfterNew15.java");
performSmartCompletion();
select('\n', getSelected());
checkResultByFile(path + "/AfterNew15-out.java");
}
finally {
ll.setLanguageLevel(old);
}
}
}