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