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      // super
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      // this
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      // this.x
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      // x
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  }