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 junit.framework.TestCase;
7 import net.sourceforge.pmd.ast.ASTName;
8 import net.sourceforge.pmd.ast.ASTPrimaryExpression;
9 import net.sourceforge.pmd.ast.ASTPrimaryPrefix;
10 import net.sourceforge.pmd.ast.ASTPrimarySuffix;
11 import net.sourceforge.pmd.symboltable.NameOccurrence;
12 import net.sourceforge.pmd.symboltable.NameOccurrences;
13
14 public class NameOccurrencesTest extends TestCase {
15
16
17 public void testNameLinkage() {
18 ASTPrimaryExpression primary = new ASTPrimaryExpression(1);
19 primary.testingOnly__setBeginLine(10);
20 ASTPrimaryPrefix prefix = new ASTPrimaryPrefix(2);
21 prefix.setUsesThisModifier();
22 prefix.testingOnly__setBeginLine(10);
23 primary.jjtAddChild(prefix, 0);
24 ASTPrimarySuffix suffix = new ASTPrimarySuffix(3);
25 suffix.setImage("x");
26 suffix.testingOnly__setBeginLine(10);
27 primary.jjtAddChild(suffix, 1);
28
29 NameOccurrences occs = new NameOccurrences(primary);
30 NameOccurrence thisOcc = (NameOccurrence) occs.iterator().next();
31 NameOccurrence xOcc = (NameOccurrence) occs.getNames().get(1);
32 assertEquals(thisOcc.getNameForWhichThisIsAQualifier(), xOcc);
33 }
34
35
36 public void testSuper() {
37 ASTPrimaryExpression primary = new ASTPrimaryExpression(1);
38 primary.testingOnly__setBeginLine(10);
39 ASTPrimaryPrefix prefix = new ASTPrimaryPrefix(2);
40 prefix.setUsesSuperModifier();
41 prefix.testingOnly__setBeginLine(10);
42 primary.jjtAddChild(prefix, 0);
43
44 NameOccurrences occs = new NameOccurrences(primary);
45 assertEquals("super", ((NameOccurrence) occs.getNames().get(0)).getImage());
46 }
47
48
49 public void testThis() {
50 ASTPrimaryExpression primary = new ASTPrimaryExpression(1);
51 primary.testingOnly__setBeginLine(10);
52 ASTPrimaryPrefix prefix = new ASTPrimaryPrefix(2);
53 prefix.setUsesThisModifier();
54 prefix.testingOnly__setBeginLine(10);
55 primary.jjtAddChild(prefix, 0);
56
57 NameOccurrences occs = new NameOccurrences(primary);
58 assertEquals("this", ((NameOccurrence) occs.getNames().get(0)).getImage());
59 }
60
61
62 public void testFieldWithThis() {
63 ASTPrimaryExpression primary = new ASTPrimaryExpression(1);
64 primary.testingOnly__setBeginLine(10);
65 ASTPrimaryPrefix prefix = new ASTPrimaryPrefix(2);
66 prefix.setUsesThisModifier();
67 prefix.testingOnly__setBeginLine(10);
68 primary.jjtAddChild(prefix, 0);
69 ASTPrimarySuffix suffix = new ASTPrimarySuffix(3);
70 suffix.setImage("x");
71 suffix.testingOnly__setBeginLine(10);
72 primary.jjtAddChild(suffix, 1);
73
74 NameOccurrences occs = new NameOccurrences(primary);
75 assertEquals("this", ((NameOccurrence) occs.getNames().get(0)).getImage());
76 assertEquals("x", ((NameOccurrence) occs.getNames().get(1)).getImage());
77 }
78
79
80 public void testField() {
81 ASTPrimaryExpression primary = new ASTPrimaryExpression(1);
82 primary.testingOnly__setBeginLine(10);
83 ASTPrimaryPrefix prefix = new ASTPrimaryPrefix(2);
84 prefix.testingOnly__setBeginLine(10);
85 primary.jjtAddChild(prefix, 0);
86 ASTName name = new ASTName(3);
87 name.setImage("x");
88 prefix.jjtAddChild(name, 0);
89
90 NameOccurrences occs = new NameOccurrences(primary);
91 assertEquals("x", ((NameOccurrence) occs.getNames().get(0)).getImage());
92 }
93
94
95 }