blob: 6d30c363b0019e680120058e685878e3b099a580 [file] [log] [blame]
package org.checkerframework.framework.test.junit;
import com.sun.source.tree.ArrayAccessTree;
import com.sun.source.tree.ExpressionTree;
import com.sun.source.tree.IdentifierTree;
import com.sun.source.tree.LiteralTree;
import com.sun.source.tree.MemberSelectTree;
import com.sun.source.tree.MethodInvocationTree;
import com.sun.tools.javac.processing.JavacProcessingEnvironment;
import com.sun.tools.javac.util.Context;
import javax.annotation.processing.ProcessingEnvironment;
import org.checkerframework.javacutil.trees.TreeParser;
import org.junit.Assert;
import org.junit.Test;
public class TreeParserTest {
private final ProcessingEnvironment env;
private final TreeParser parser;
public TreeParserTest() {
env = JavacProcessingEnvironment.instance(new Context());
parser = new TreeParser(env);
}
@Test
public void parsesIdentifiers() {
String value = "id";
ExpressionTree parsed = parser.parseTree(value);
Assert.assertTrue(parsed instanceof IdentifierTree);
}
@Test
public void parsesNumbers() {
String value = "23";
ExpressionTree parsed = parser.parseTree(value);
Assert.assertTrue(parsed instanceof LiteralTree);
}
@Test
public void parsesMethodInvocations() {
String value = "test()";
ExpressionTree parsed = parser.parseTree(value);
Assert.assertTrue(parsed instanceof MethodInvocationTree);
MethodInvocationTree invocation = (MethodInvocationTree) parsed;
Assert.assertTrue(invocation.getMethodSelect() instanceof IdentifierTree);
Assert.assertEquals(
"test", ((IdentifierTree) invocation.getMethodSelect()).getName().toString());
}
@Test
public void parsesMethodInvocationsWithSelect() {
String value = "Class.test()";
ExpressionTree parsed = parser.parseTree(value);
Assert.assertTrue(parsed instanceof MethodInvocationTree);
MethodInvocationTree invocation = (MethodInvocationTree) parsed;
Assert.assertTrue(invocation.getMethodSelect() instanceof MemberSelectTree);
MemberSelectTree select = (MemberSelectTree) invocation.getMethodSelect();
Assert.assertEquals("test", select.getIdentifier().toString());
Assert.assertEquals("Class", select.getExpression().toString());
}
@Test
public void parsesIndex() {
String value = "array[2]";
ExpressionTree parsed = parser.parseTree(value);
Assert.assertTrue(parsed instanceof ArrayAccessTree);
ArrayAccessTree access = (ArrayAccessTree) parsed;
Assert.assertEquals(2, ((LiteralTree) access.getIndex()).getValue());
Assert.assertEquals("array", ((IdentifierTree) access.getExpression()).getName().toString());
}
@Test
public void randomParses() {
ExpressionTree parsed = parser.parseTree("Class.method()[4].field[3]");
Assert.assertTrue(parsed instanceof ArrayAccessTree);
MemberSelectTree array = (MemberSelectTree) ((ArrayAccessTree) parsed).getExpression();
Assert.assertEquals("field", array.getIdentifier().toString());
Assert.assertTrue(array.getExpression() instanceof ArrayAccessTree);
}
@Test
public void parsesMethodArguments() {
parser.parseTree("method()");
parser.parseTree("method(1)");
parser.parseTree("method(1,2)");
}
}