1   /***
2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3    */
4   package test.net.sourceforge.pmd.symboltable;
5   
6   import net.sourceforge.pmd.PMD;
7   import net.sourceforge.pmd.ast.ASTFormalParameter;
8   import net.sourceforge.pmd.ast.ASTTryStatement;
9   import net.sourceforge.pmd.ast.ASTVariableDeclaratorId;
10  import net.sourceforge.pmd.symboltable.Scope;
11  import net.sourceforge.pmd.symboltable.VariableNameDeclaration;
12  
13  import java.util.List;
14  
15  public class VariableNameDeclarationTest extends STBBaseTst {
16  
17      public void testConstructor() {
18          parseCode(TEST1);
19          List nodes = acu.findChildrenOfType(ASTVariableDeclaratorId.class);
20          Scope s = ((ASTVariableDeclaratorId) nodes.get(0)).getScope();
21          VariableNameDeclaration decl = (VariableNameDeclaration) s.getVariableDeclarations().keySet().iterator().next();
22          assertEquals("bar", decl.getImage());
23          assertEquals(3, decl.getNode().getBeginLine());
24      }
25  
26      public void testExceptionBlkParam() {
27          ASTVariableDeclaratorId id = new ASTVariableDeclaratorId(3);
28          id.testingOnly__setBeginLine(10);
29          id.setImage("foo");
30          ASTFormalParameter param = new ASTFormalParameter(2);
31          id.jjtSetParent(param);
32          param.jjtSetParent(new ASTTryStatement(1));
33          VariableNameDeclaration decl = new VariableNameDeclaration(id);
34          assertTrue(decl.isExceptionBlockParameter());
35      }
36  
37      public void testIsArray() {
38          parseCode(TEST3);
39          VariableNameDeclaration decl = (VariableNameDeclaration) ((ASTVariableDeclaratorId) acu.findChildrenOfType(ASTVariableDeclaratorId.class).get(0)).getScope().getVariableDeclarations().keySet().iterator().next();
40          assertTrue(decl.isArray());
41      }
42  
43      public void testPrimitiveType() {
44          parseCode(TEST1);
45          VariableNameDeclaration decl = (VariableNameDeclaration) ((ASTVariableDeclaratorId) acu.findChildrenOfType(ASTVariableDeclaratorId.class).get(0)).getScope().getVariableDeclarations().keySet().iterator().next();
46          assertTrue(decl.isPrimitiveType());
47      }
48  
49      public void testArrayIsReferenceType() {
50          parseCode(TEST3);
51          VariableNameDeclaration decl = (VariableNameDeclaration) ((ASTVariableDeclaratorId) acu.findChildrenOfType(ASTVariableDeclaratorId.class).get(0)).getScope().getVariableDeclarations().keySet().iterator().next();
52          assertTrue(decl.isReferenceType());
53      }
54  
55      public void testPrimitiveTypeImage() {
56          parseCode(TEST3);
57          VariableNameDeclaration decl = (VariableNameDeclaration) ((ASTVariableDeclaratorId) acu.findChildrenOfType(ASTVariableDeclaratorId.class).get(0)).getScope().getVariableDeclarations().keySet().iterator().next();
58          assertEquals("int", decl.getTypeImage());
59      }
60  
61      public void testRefTypeImage() {
62          parseCode(TEST4);
63          VariableNameDeclaration decl = (VariableNameDeclaration) ((ASTVariableDeclaratorId) acu.findChildrenOfType(ASTVariableDeclaratorId.class).get(0)).getScope().getVariableDeclarations().keySet().iterator().next();
64          assertEquals("String", decl.getTypeImage());
65      }
66  
67      public void testParamTypeImage() {
68          parseCode(TEST5);
69          VariableNameDeclaration decl = (VariableNameDeclaration) ((ASTVariableDeclaratorId) acu.findChildrenOfType(ASTVariableDeclaratorId.class).get(0)).getScope().getVariableDeclarations().keySet().iterator().next();
70          assertEquals("String", decl.getTypeImage());
71      }
72  
73      public static final String TEST1 =
74              "public class Foo {" + PMD.EOL +
75              " void foo() {" + PMD.EOL +
76              "  int bar = 42;" + PMD.EOL +
77              " }" + PMD.EOL +
78              "}";
79  
80      public static final String TEST2 =
81              "public class Foo {" + PMD.EOL +
82              " void foo() {" + PMD.EOL +
83              "  try {} catch(Exception e) {}" + PMD.EOL +
84              " }" + PMD.EOL +
85              "}";
86  
87      public static final String TEST3 =
88              "public class Foo {" + PMD.EOL +
89              " void foo() {" + PMD.EOL +
90              "  int[] x;" + PMD.EOL +
91              " }" + PMD.EOL +
92              "}";
93  
94      public static final String TEST4 =
95              "public class Foo {" + PMD.EOL +
96              " void foo() {" + PMD.EOL +
97              "  String x;" + PMD.EOL +
98              " }" + PMD.EOL +
99              "}";
100     public static final String TEST5 =
101             "public class Foo {" + PMD.EOL +
102             " void foo(String x) {}" + PMD.EOL +
103             "}";
104 }