blob: de23b90fcfe0b41edbb977b7ef0db16bf841611b [file] [log] [blame]
/*
* Copyright 2000-2010 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.refactoring;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiElementFactory;
import com.intellij.psi.PsiExpression;
import com.intellij.psi.PsiType;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.codeStyle.SuggestedNameInfo;
import com.intellij.psi.codeStyle.VariableKind;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.testFramework.LightCodeInsightTestCase;
/**
* @author Konstantin Bulenkov
*/
public class JavaIntroduceVariableTest extends LightCodeInsightTestCase {
public void testIntroduceBasedOnLiterals() throws Exception {
doTest("getA(\"simple\")", "simple");
doTest("getA(\"SimpleName\")", "simpleName", "name");
doTest("getA(\"simpleName\")", "simpleName", "name");
doTest("getA(\"simpleClass\")", "simpleClass", "aClass");
doTest("getA(\"short\")", "aShort");
doTest("getA(\"boolean\")", "aBoolean");
doTest("getA().getB(1, \"name\")", "name");
doTest("getA(\"NAME\")", "name");
doTest("getA(\"name\")", VariableKind.STATIC_FINAL_FIELD, "NAME");
doTest("getA(\"SimpleName\")", VariableKind.STATIC_FINAL_FIELD, "SIMPLE_NAME");
doTest("get(getB().getA(\"SimpleName\").getC())", "simpleName", "name");
}
protected static void doTest(String expression, VariableKind kind, PsiType type, String...results) throws Exception {
final PsiElementFactory factory = JavaPsiFacade.getElementFactory(getProject());
final PsiExpression expr = factory.createExpressionFromText(expression, null);
final JavaCodeStyleManager codeStyleManager = JavaCodeStyleManager.getInstance(getProject());
final SuggestedNameInfo info = codeStyleManager.suggestVariableName(kind, null, expr, type);
assert info.names.length >= results.length : msg("Can't find some variants", info.names, results);
for (int i = 0; i < results.length; i++) {
if (!results[i].equals(info.names[i])) {
throw new Exception(msg("", info.names, results));
}
}
}
private static String msg(String s, String[] names, String[] results) {
return s + ". Expected at first positions: [" + StringUtil.join(results, ",") + "] Found: [" + StringUtil.join(names, ",") + "]";
}
protected static void doTest(String expression, String...results) throws Exception {
doTest(expression, VariableKind.LOCAL_VARIABLE, results);
}
protected static void doTest(String expression, VariableKind kind, String...results) throws Exception {
doTest(expression, kind, PsiType.getJavaLangString(getPsiManager(), GlobalSearchScope.allScope(getProject())), results);
}
}