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.ASTPrimaryExpression;
8 import net.sourceforge.pmd.symboltable.NameFinder;
9 import net.sourceforge.pmd.symboltable.NameOccurrence;
10
11 import java.util.List;
12
13 public class NameOccurrencesTest extends STBBaseTst {
14
15 public void testSuper() {
16 parseCode(TEST1);
17 List nodes = acu.findChildrenOfType(ASTPrimaryExpression.class);
18 NameFinder occs = new NameFinder((ASTPrimaryExpression) nodes.get(0));
19 assertEquals("super", ((NameOccurrence) occs.getNames().get(0)).getImage());
20 }
21
22 public void testThis() {
23 parseCode(TEST2);
24 List nodes = acu.findChildrenOfType(ASTPrimaryExpression.class);
25 NameFinder occs = new NameFinder((ASTPrimaryExpression) nodes.get(0));
26 assertEquals("this", ((NameOccurrence) occs.getNames().get(0)).getImage());
27 assertEquals("x", ((NameOccurrence) occs.getNames().get(1)).getImage());
28 }
29
30 public void testNameLinkage() {
31 parseCode(TEST2);
32 List nodes = acu.findChildrenOfType(ASTPrimaryExpression.class);
33 NameFinder occs = new NameFinder((ASTPrimaryExpression) nodes.get(0));
34 NameOccurrence thisNameOccurrence = (NameOccurrence) occs.getNames().get(0);
35 assertEquals(thisNameOccurrence.getNameForWhichThisIsAQualifier(), occs.getNames().get(1));
36 }
37
38 public void testSimpleVariableOccurrence() {
39 parseCode(TEST3);
40 List nodes = acu.findChildrenOfType(ASTPrimaryExpression.class);
41 NameFinder occs = new NameFinder((ASTPrimaryExpression) nodes.get(0));
42 assertEquals("x", ((NameOccurrence) occs.getNames().get(0)).getImage());
43 assertFalse(((NameOccurrence) occs.getNames().get(0)).isThisOrSuper());
44 assertFalse(((NameOccurrence) occs.getNames().get(0)).isMethodOrConstructorInvocation());
45 assertTrue(((NameOccurrence) occs.getNames().get(0)).isOnLeftHandSide());
46 }
47
48 public void testQualifiedOccurrence() {
49 parseCode(TEST4);
50 List nodes = acu.findChildrenOfType(ASTPrimaryExpression.class);
51 NameFinder occs = new NameFinder((ASTPrimaryExpression) nodes.get(0));
52 assertEquals("b", ((NameOccurrence) occs.getNames().get(0)).getImage());
53 assertEquals("x", ((NameOccurrence) occs.getNames().get(1)).getImage());
54 }
55
56 public static final String TEST1 =
57 "public class Foo {" + PMD.EOL +
58 " void foo() {" + PMD.EOL +
59 " super.x = 2;" + PMD.EOL +
60 " }" + PMD.EOL +
61 "}";
62
63 public static final String TEST2 =
64 "public class Foo {" + PMD.EOL +
65 " void foo() {" + PMD.EOL +
66 " this.x = 2;" + PMD.EOL +
67 " }" + PMD.EOL +
68 "}";
69
70 public static final String TEST3 =
71 "public class Foo {" + PMD.EOL +
72 " void foo() {" + PMD.EOL +
73 " x = 2;" + PMD.EOL +
74 " }" + PMD.EOL +
75 "}";
76
77 public static final String TEST4 =
78 "public class Foo {" + PMD.EOL +
79 " void foo() {" + PMD.EOL +
80 " b.x = 2;" + PMD.EOL +
81 " }" + PMD.EOL +
82 "}";
83 }