/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd.lang.java.dfa; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.util.List; import org.junit.Test; import net.sourceforge.pmd.PMD; import net.sourceforge.pmd.lang.dfa.DataFlowNode; import net.sourceforge.pmd.lang.java.ParserTst; import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit; import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclarator; public class GeneralFiddlingTest extends ParserTst { /** * Unit test for https://sourceforge.net/p/pmd/bugs/1325/ */ @Test public void innerClassShouldWork() { ASTCompilationUnit acu = buildDFA( "class Foo {" + " void bar() {" + " class X {}" + " int i;" + " }" + "}"); assertNotNull(acu); } @Test public void test1() { ASTCompilationUnit acu = buildDFA(TEST1); ASTMethodDeclarator meth = acu.findDescendantsOfType(ASTMethodDeclarator.class).get(0); DataFlowNode n = meth.getDataFlowNode(); List<DataFlowNode> f = n.getFlow(); assertEquals(6, f.size()); assertEquals("Undefinition(x)", String.valueOf(f.get(0).getVariableAccess().get(0))); assertEquals(0, f.get(1).getVariableAccess().size()); assertEquals("Definition(x)", String.valueOf(f.get(2).getVariableAccess().get(0))); assertEquals("Reference(x)", String.valueOf(f.get(3).getVariableAccess().get(0))); assertEquals("Definition(x)", String.valueOf(f.get(4).getVariableAccess().get(0))); assertEquals("Undefinition(x)", String.valueOf(f.get(5).getVariableAccess().get(0))); // for (DataFlowNode dfan : f) { // System.out.println("Flow starting on line " + dfan.getLine()); // List<VariableAccess> va = dfan.getVariableAccess(); // for (VariableAccess o : va) { // System.out.println(" variable: " + o); // } // } } private static final String TEST1 = "class Foo {" + PMD.EOL + " void bar() {" + PMD.EOL + " int x = 2;" + PMD.EOL + " foo(x);" + PMD.EOL + " x = 3;" + PMD.EOL + " }" + PMD.EOL + "}"; }