    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  }