/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd.lang.java.symboltable; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.List; import org.junit.Test; import net.sourceforge.pmd.PMD; import net.sourceforge.pmd.lang.java.ast.ASTFormalParameter; import net.sourceforge.pmd.lang.java.ast.ASTTryStatement; import net.sourceforge.pmd.lang.java.ast.ASTVariableDeclaratorId; import net.sourceforge.pmd.lang.symboltable.NameDeclaration; import net.sourceforge.pmd.lang.symboltable.Scope; public class VariableNameDeclarationTest extends STBBaseTst { @Test public void testConstructor() { parseCode(TEST1); List<ASTVariableDeclaratorId> nodes = acu.findDescendantsOfType(ASTVariableDeclaratorId.class); Scope s = nodes.get(0).getScope(); NameDeclaration decl = s.getDeclarations().keySet().iterator().next(); assertEquals("bar", decl.getImage()); assertEquals(3, decl.getNode().getBeginLine()); } @Test public void testExceptionBlkParam() { ASTVariableDeclaratorId id = new ASTVariableDeclaratorId(3); id.testingOnlySetBeginLine(10); id.setImage("foo"); ASTFormalParameter param = new ASTFormalParameter(2); id.jjtSetParent(param); param.jjtSetParent(new ASTTryStatement(1)); VariableNameDeclaration decl = new VariableNameDeclaration(id); assertTrue(decl.isExceptionBlockParameter()); } @Test public void testIsArray() { parseCode(TEST3); VariableNameDeclaration decl = acu.findDescendantsOfType(ASTVariableDeclaratorId.class).get(0).getScope() .getDeclarations(VariableNameDeclaration.class).keySet().iterator().next(); assertTrue(decl.isArray()); } @Test public void testPrimitiveType() { parseCode(TEST1); VariableNameDeclaration decl = acu.findDescendantsOfType(ASTVariableDeclaratorId.class).get(0).getScope() .getDeclarations(VariableNameDeclaration.class).keySet().iterator().next(); assertTrue(decl.isPrimitiveType()); } @Test public void testArrayIsReferenceType() { parseCode(TEST3); VariableNameDeclaration decl = acu.findDescendantsOfType(ASTVariableDeclaratorId.class).get(0).getScope() .getDeclarations(VariableNameDeclaration.class).keySet().iterator().next(); assertTrue(decl.isReferenceType()); } @Test public void testPrimitiveTypeImage() { parseCode(TEST3); NameDeclaration decl = acu.findDescendantsOfType(ASTVariableDeclaratorId.class).get(0).getScope() .getDeclarations().keySet().iterator().next(); assertEquals("int", ((TypedNameDeclaration) decl).getTypeImage()); } @Test public void testRefTypeImage() { parseCode(TEST4); NameDeclaration decl = acu.findDescendantsOfType(ASTVariableDeclaratorId.class).get(0).getScope() .getDeclarations().keySet().iterator().next(); assertEquals("String", ((TypedNameDeclaration) decl).getTypeImage()); } @Test public void testParamTypeImage() { parseCode(TEST5); NameDeclaration decl = acu.findDescendantsOfType(ASTVariableDeclaratorId.class).get(0).getScope() .getDeclarations().keySet().iterator().next(); assertEquals("String", ((TypedNameDeclaration) decl).getTypeImage()); } public static final String TEST1 = "public class Foo {" + PMD.EOL + " void foo() {" + PMD.EOL + " int bar = 42;" + PMD.EOL + " }" + PMD.EOL + "}"; public static final String TEST2 = "public class Foo {" + PMD.EOL + " void foo() {" + PMD.EOL + " try {} catch(Exception e) {}" + PMD.EOL + " }" + PMD.EOL + "}"; public static final String TEST3 = "public class Foo {" + PMD.EOL + " void foo() {" + PMD.EOL + " int[] x;" + PMD.EOL + " }" + PMD.EOL + "}"; public static final String TEST4 = "public class Foo {" + PMD.EOL + " void foo() {" + PMD.EOL + " String x;" + PMD.EOL + " }" + PMD.EOL + "}"; public static final String TEST5 = "public class Foo {" + PMD.EOL + " void foo(String x) {}" + PMD.EOL + "}"; public static junit.framework.Test suite() { return new junit.framework.JUnit4TestAdapter(VariableNameDeclarationTest.class); } }