1   package test.net.sourceforge.pmd.ast;
2   
3   import net.sourceforge.pmd.PMD;
4   import net.sourceforge.pmd.TargetJDK1_4;
5   import net.sourceforge.pmd.TargetJDK1_5;
6   import net.sourceforge.pmd.ast.ASTCompilationUnit;
7   import net.sourceforge.pmd.ast.ASTFieldDeclaration;
8   import net.sourceforge.pmd.ast.ASTType;
9   import net.sourceforge.pmd.ast.ASTVariableDeclarator;
10  import net.sourceforge.pmd.ast.ASTVariableDeclaratorId;
11  import net.sourceforge.pmd.ast.Dimensionable;
12  import net.sourceforge.pmd.ast.JavaParser;
13  import test.net.sourceforge.pmd.testframework.ParserTst;
14  
15  import java.io.StringReader;
16  
17  public class ASTFieldDeclarationTest extends ParserTst {
18  
19      public void testIsArray() {
20          JavaParser parser = (new TargetJDK1_4()).createParser(new StringReader(TEST1));
21          ASTCompilationUnit cu = parser.CompilationUnit();
22          Dimensionable node = (Dimensionable) cu.findChildrenOfType(ASTFieldDeclaration.class).get(0);
23          assertTrue(node.isArray());
24          assertEquals(1, node.getArrayDepth());
25      }
26  
27      public void testMultiDimensionalArray() {
28          JavaParser parser = (new TargetJDK1_4()).createParser(new StringReader(TEST2));
29          ASTCompilationUnit cu = parser.CompilationUnit();
30          Dimensionable node = (Dimensionable) cu.findChildrenOfType(ASTFieldDeclaration.class).get(0);
31          assertEquals(3, node.getArrayDepth());
32      }
33  
34      public void testIsSyntacticallyPublic() {
35          JavaParser parser = (new TargetJDK1_4()).createParser(new StringReader(TEST3));
36          ASTCompilationUnit cu = parser.CompilationUnit();
37          ASTFieldDeclaration node = (ASTFieldDeclaration) cu.findChildrenOfType(ASTFieldDeclaration.class).get(0);
38          assertFalse(node.isSyntacticallyPublic());
39          assertFalse(node.isPackagePrivate());
40          assertFalse(node.isPrivate());
41          assertFalse(node.isProtected());
42          assertTrue(node.isFinal());
43          assertTrue(node.isStatic());
44          assertTrue(node.isPublic());
45      }
46  
47      public void testWithEnum() {
48          JavaParser parser = (new TargetJDK1_5()).createParser(new StringReader(TEST4));
49          ASTCompilationUnit cu = parser.CompilationUnit();
50          ASTFieldDeclaration node = (ASTFieldDeclaration) cu.findChildrenOfType(ASTFieldDeclaration.class).get(0);
51          assertFalse(node.isInterfaceMember());
52      }
53  
54      private static final String TEST1 =
55              "class Foo {" + PMD.EOL +
56              " String[] foo;" + PMD.EOL +
57              "}";
58  
59      private static final String TEST2 =
60              "class Foo {" + PMD.EOL +
61              " String[][][] foo;" + PMD.EOL +
62              "}";
63  
64      private static final String TEST3 =
65              "interface Foo {" + PMD.EOL +
66              " int BAR = 6;" + PMD.EOL +
67              "}";
68  
69      private static final String TEST4 =
70              "public enum Foo {" + PMD.EOL +
71              " FOO(1);" + PMD.EOL +
72              " private int x;" + PMD.EOL +
73              "}";
74  
75      public void testGetVariableName() {
76          int id = 0;
77          ASTFieldDeclaration n = new ASTFieldDeclaration(id++);
78          ASTType t = new ASTType(id++);
79          ASTVariableDeclarator decl = new ASTVariableDeclarator(id++);
80          ASTVariableDeclaratorId declid = new ASTVariableDeclaratorId(id++);
81          n.jjtAddChild(t, 0);
82          t.jjtAddChild(decl, 0);
83          decl.jjtAddChild(declid, 0);
84          declid.setImage("foo");
85  
86          assertEquals("foo", n.getVariableName());
87  
88      }
89  }