package de.plushnikov.intellij.plugin.processor;
import com.intellij.psi.*;
import de.plushnikov.intellij.plugin.AbstractLombokLightCodeInsightTestCase;
public class VarTest extends AbstractLombokLightCodeInsightTestCase {
public void testSimpleInt() throws Exception {
configureClass("100");
verifyLocalVariableType("int");
}
public void testSimpleString() throws Exception {
configureClass("\"\"");
verifyLocalVariableType("java.lang.String");
}
public void testNewString() throws Exception {
configureClass("new java.lang.String(\"Hello World\")");
verifyLocalVariableType("java.lang.String");
}
public void testDoubleExpression() throws Exception {
configureClass("10.0 + 20.0");
verifyLocalVariableType("double");
}
public void testIntParameter() throws Exception {
myFixture.configureByText("a.java", "import lombok.experimental.var;\n" +
"abstract class Test {\n" +
" private void test() {\n" +
" int[] myArray = new int[] {1, 2, 3, 4, 5};\n" +
" for(var my<caret>Var: myArray) {" +
" }\n" +
" } \n" +
"}\n");
final PsiElement elementAtCaret = myFixture.getFile().findElementAt(myFixture.getCaretOffset());
assertTrue(elementAtCaret instanceof PsiIdentifier);
final PsiElement localParameter = elementAtCaret.getParent();
assertTrue(localParameter.toString(), localParameter instanceof PsiParameter);
final PsiType type = ((PsiParameter) localParameter).getType();
assertNotNull(localParameter.toString(), type);
assertEquals(type.getCanonicalText(), true, type.equalsToText("int"));
}
public void testBooleanExpression() throws Exception {
configureClass("10 == 10");
verifyLocalVariableType("boolean");
}
public void testGenericCollection() throws Exception {
configureClass("java.util.Arrays.asList(\"a\",\"b\")");
verifyLocalVariableType("java.util.List<java.lang.String>");
}
public void testGenericNewCollection() throws Exception {
configureClass("new java.util.ArrayList<Integer>()");
verifyLocalVariableType("java.util.ArrayList<java.lang.Integer>");
}
public void testGenericMethod168() throws Exception {
configureClass("forClass(Integer.class)",
"public static <T> java.util.List<T> forClass(Class<T> clazz) {\n" +
" return new java.util.ArrayList<T>();\n" +
" }\n");
verifyLocalVariableType("java.util.List<java.lang.Integer>");
}
private void configureClass(String valDefinition) {
configureClass(valDefinition, "");
}
private void configureClass(String valDefinition, String extraDefinition) {
myFixture.configureByText("a.java", "import lombok.experimental.var;\n" +
"abstract class Test {\n" +
" private void test() {\n" +
" var my<caret>Var = " + valDefinition + "; \n" +
//" my<caret>Var = " + valDefinition + "; \n" +
" } \n" +
extraDefinition +
"}\n");
}
private void verifyLocalVariableType(final String expectedType) {
final PsiElement elementAtCaret = myFixture.getFile().findElementAt(myFixture.getCaretOffset());
assertTrue(elementAtCaret instanceof PsiIdentifier);
final PsiElement localVariable = elementAtCaret.getParent();
assertTrue(localVariable.toString(), localVariable instanceof PsiLocalVariable);
final PsiType type = ((PsiLocalVariable) localVariable).getType();
assertNotNull(localVariable.toString(), type);
assertEquals(type.getCanonicalText(), true, type.equalsToText(expectedType));
}
}