/**
* 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.assertTrue;
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.ASTMethodDeclarator;
/*
* Created on 18.08.2004
*/
public class AcceptanceTest extends ParserTst {
@Test
public void testbook() {
getOrderedNodes(ASTMethodDeclarator.class, FOO);
}
private static final String FOO = "class Foo {" + PMD.EOL + " void bar() {" + PMD.EOL + " int x = 2;" + PMD.EOL
+ " }" + PMD.EOL + "}";
@Test
public void testLabelledBreakLockup() {
getOrderedNodes(ASTMethodDeclarator.class, LABELLED_BREAK_LOCKUP);
}
private static final String LABELLED_BREAK_LOCKUP = "class Foo {" + PMD.EOL + " void bar(int x) {" + PMD.EOL
+ " here: if (x>2) {" + PMD.EOL + " break here;" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + "}";
private boolean check(int[][] array, List<ASTMethodDeclarator> methodNodes) {
for (int i = 0; i < methodNodes.size(); i++) {
ASTMethodDeclarator decl = methodNodes.get(i);
DataFlowNode inode = decl.getDataFlowNode();
for (int j = 0; j < inode.getChildren().size(); j++) {
DataFlowNode child = inode.getChildren().get(j);
if (array[i][j] != child.getIndex() - 1) {
return false;
}
}
}
return true;
}
@Test
public void test1() {
assertTrue(check(TEST1_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST1)));
}
@Test
public void test2() {
assertTrue(check(TEST2_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST2)));
}
@Test
public void test3() {
assertTrue(check(TEST3_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST3)));
}
@Test
public void test4() {
assertTrue(check(TEST4_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST4)));
}
@Test
public void test6() {
assertTrue(check(TEST5_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST6)));
}
@Test
public void test7() {
assertTrue(check(TEST5_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST7)));
}
@Test
public void test8() {
assertTrue(check(TEST8_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST8)));
}
@Test
public void test9() {
assertTrue(check(TEST5_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST9)));
}
@Test
public void test10() {
assertTrue(check(TEST8_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST10)));
}
@Test
public void test11() {
assertTrue(check(TEST8_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST11)));
}
@Test
public void test12() {
assertTrue(check(TEST12_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST12)));
}
@Test
public void test13() {
assertTrue(check(TEST13_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST13)));
}
@Test
public void test14() {
assertTrue(check(TEST14_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST14)));
}
@Test
public void test15() {
assertTrue(check(TEST15_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST15)));
}
@Test
public void test16() {
assertTrue(check(TEST16_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST16)));
}
@Test
public void test17() {
assertTrue(check(TEST17_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST17)));
}
@Test
public void test18() {
assertTrue(check(TEST18_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST18)));
}
@Test
public void test19() {
assertTrue(check(TEST19_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST19)));
}
@Test
public void test20() {
assertTrue(check(TEST20_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST20)));
}
@Test
public void test21() {
assertTrue(check(TEST21_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST21)));
}
@Test
public void test22() {
assertTrue(check(TEST22_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST22)));
}
@Test
public void test23() {
assertTrue(check(TEST23_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST23)));
}
@Test
public void test24() {
assertTrue(check(TEST24_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST24)));
}
@Test
public void test25() {
assertTrue(check(TEST25_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST25)));
}
@Test
public void test26() {
assertTrue(check(TEST26_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST26)));
}
@Test
public void test27() {
assertTrue(check(TEST27_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST27)));
}
@Test
public void test28() {
assertTrue(check(TEST28_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST28)));
}
@Test
public void test29() {
assertTrue(check(TEST29_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST29)));
}
@Test
public void test30() {
assertTrue(check(TEST30_NODES, getOrderedNodes(ASTMethodDeclarator.class, TEST30)));
}
// first dimension: the index of a node
// second dimension: the indices of the children
private static final int[][] TEST1_NODES = { { 1, }, { 2, }, { 3, }, { 4, 6, }, { 5, }, { 6, }, {}, };
private static final String TEST1 = "class Foo {" + PMD.EOL + " void test_1() {" + PMD.EOL + " int x = 0;"
+ PMD.EOL + " if (x == 0) {" + PMD.EOL + " x++;" + PMD.EOL + " x = 0;" + PMD.EOL + " }" + PMD.EOL
+ " }" + PMD.EOL + " }";
private static final int[][] TEST2_NODES = { { 1, }, { 2, }, { 3, }, { 5, 7, }, { 3, }, { 6, }, { 4, }, {}, };
private static final String TEST2 = "class Foo {" + PMD.EOL + " public void test_2() {" + PMD.EOL
+ " for (int i = 0; i < 1; i++) {" + PMD.EOL + " i++;" + PMD.EOL + " i = 8;" + PMD.EOL + " }"
+ PMD.EOL + " }" + PMD.EOL + " }";
private static final int[][] TEST3_NODES = { { 1, }, { 2, }, { 3, }, { 4, 5, }, { 3, }, {}, };
private static final String TEST3 = "public class Foo {" + PMD.EOL + " public void test_3() {" + PMD.EOL
+ " for (int i = 0; i < 1; i++) {" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }";
private static final int[][] TEST4_NODES = { { 1, }, { 2, }, { 3, }, {}, };
private static final String TEST4 = "public class Foo {" + PMD.EOL + " public void test_4() {" + PMD.EOL
+ " for (; ;) {" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }";
private static final int[][] TEST5_NODES = { { 1, }, { 2, }, { 3, }, { 4, }, {}, };
private static final String TEST6 = "public class Foo {" + PMD.EOL + " public void test_6() {" + PMD.EOL
+ " for (int i = 0; ;) {" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }";
private static final String TEST7 = "public class Foo {" + PMD.EOL + " public void test_7() {" + PMD.EOL
+ " for (int i = 0; i < 0;) {" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }";
private static final int[][] TEST8_NODES = { { 1, }, { 2, }, { 3, }, { 4, 5, }, { 3, }, {}, };
public static final String TEST8 = "public class Foo {" + PMD.EOL + " public void test_8() {" + PMD.EOL
+ " for (int i = 0; ; i++) {" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }";
public static final String TEST9 = "public class Foo {" + PMD.EOL + " public void test_9() {" + PMD.EOL
+ " int i = 0;" + PMD.EOL + " for (; i < 0;) {" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }";
public static final String TEST10 = "public class Foo {" + PMD.EOL + " public void test_10() {" + PMD.EOL
+ " int i = 0;" + PMD.EOL + " for (; i < 0; i++) {" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }";
public static final String TEST11 = "public class Foo {" + PMD.EOL + " public void test_11() {" + PMD.EOL
+ " int i = 0;" + PMD.EOL + " for (; ; i++) {" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }";
private static final int[][] TEST12_NODES = { { 1, }, { 2, }, { 3, }, { 4, 5, }, { 3, }, {}, };
public static final String TEST12 = "public class Foo {" + PMD.EOL + " public void test_12() {" + PMD.EOL
+ " for (; ;) {" + PMD.EOL + " int i = 0;" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }";
private static final int[][] TEST13_NODES = { { 1, }, { 2, }, { 3, }, { 5, 9, }, { 3, }, { 6, }, { 7, 8, }, { 8, }, { 4, },
{}, };
public static final String TEST13 = "public class Foo {" + PMD.EOL + " public void test_13() {" + PMD.EOL
+ " for (int i = 0; i < 0; i++) {" + PMD.EOL + " i = 9;" + PMD.EOL + " if (i < 8) {" + PMD.EOL
+ " i = 7;" + PMD.EOL + " }" + PMD.EOL + " i = 6;" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL
+ " }";
private static final int[][] TEST14_NODES = { { 1 }, { 2 }, { 3 }, { 5, 8 }, { 3 }, { 6 }, { 7, 4 }, { 4 }, {} };
public static final String TEST14 = "public class Foo {" + PMD.EOL + " public void test_14() {" + PMD.EOL
+ " for (int i = 0; i < 0; i++) {" + PMD.EOL + " i = 9;" + PMD.EOL + " if (i < 8) {" + PMD.EOL
+ " i = 7;" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }";
private static final int[][] TEST15_NODES = { { 1 }, { 2 }, { 3 }, { 5, 7 }, { 3 }, { 6, 4 }, { 4 }, {} };
public static final String TEST15 = "public class Foo {" + PMD.EOL + " public void test_15() {" + PMD.EOL
+ " for (int i = 0; i < 0; i++) {" + PMD.EOL + " if (i < 8) {" + PMD.EOL + " i = 7;" + PMD.EOL
+ " }" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }";
private static final int[][] TEST16_NODES = { { 1 }, { 2 }, { 3 }, { 5, 8 }, { 3 }, { 6, 7 }, { 4 }, { 4 }, {} };
public static final String TEST16 = "public class Foo {" + PMD.EOL + " public void test_16() {" + PMD.EOL
+ " for (int i = 0; i < 0; i++) {" + PMD.EOL + " if (i < 8) {" + PMD.EOL + " i = 7;" + PMD.EOL
+ " } else {" + PMD.EOL + " i = 6;" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL
+ " }";
private static final int[][] TEST17_NODES = { { 1 }, { 2 }, { 3 }, { 5, 10 }, { 3 }, { 6, 7 }, { 4 }, { 8, 9 },
{ 4 }, { 4 }, {}, };
public static final String TEST17 = "public class Foo {" + PMD.EOL + " public void test_17() {" + PMD.EOL
+ " for (int i = 0; i < 0; i++) {" + PMD.EOL + " if (i < 6) {" + PMD.EOL + " i = 7;" + PMD.EOL
+ " } else if (i > 8) {" + PMD.EOL + " i = 9;" + PMD.EOL + " } else {" + PMD.EOL + " i = 10;"
+ PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }";
private static final int[][] TEST18_NODES = { { 1 }, { 2 }, { 3 }, { 5, 9 }, { 3 }, { 6 }, { 8, 4 }, { 6 }, { 7 },
{}, };
public static final String TEST18 = "public class Foo {" + PMD.EOL + " public void test_18() {" + PMD.EOL
+ " for (int i = 0; i < 0; i++) {" + PMD.EOL + " for (int j = 0; j < 0; j++) {" + PMD.EOL + " j++;"
+ PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }";
private static final int[][] TEST19_NODES = { { 1 }, { 2 }, { 3 }, { 4, 5 }, { 10 }, { 6, 7 }, { 10 }, { 8, 9 },
{ 10 }, { 10 }, {}, };
public static final String TEST19 = "public class Foo {" + PMD.EOL + " public void test_19() {" + PMD.EOL
+ " int i = 0;" + PMD.EOL + " if (i == 1) {" + PMD.EOL + " i = 2;" + PMD.EOL + " } else if (i == 3) {"
+ PMD.EOL + " i = 4;" + PMD.EOL + " } else if (i == 5) {" + PMD.EOL + " i = 6;" + PMD.EOL
+ " } else {" + PMD.EOL + " i = 7;" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }";
private static final int[][] TEST20_NODES = { { 1 }, { 2 }, { 3 }, { 4, 6 }, { 5, 7 }, { 7 }, { 7 }, {} };
public static final String TEST20 = "public class Foo {" + PMD.EOL + " public void test_20() {" + PMD.EOL
+ " int i = 0;" + PMD.EOL + " if (i == 1) {" + PMD.EOL + " if (i == 2) {" + PMD.EOL + " i = 3;"
+ PMD.EOL + " }" + PMD.EOL + " } else {" + PMD.EOL + " i = 7;" + PMD.EOL + " }" + PMD.EOL + " }"
+ PMD.EOL + " }";
private static final int[][] TEST21_NODES = { { 1 }, { 2 }, { 3 }, { 4, 9 }, { 5 }, { 7, 8 }, { 5 }, { 6 }, { 11 },
{ 10, 11 }, { 11 }, {}, };
public static final String TEST21 = "public class Foo {" + PMD.EOL + " public void test_21() {" + PMD.EOL
+ " int i = 0;" + PMD.EOL + " if (i == 1) {" + PMD.EOL + " for (i = 3; i < 4; i++) {" + PMD.EOL
+ " i = 5;" + PMD.EOL + " }" + PMD.EOL + " i++;" + PMD.EOL + " } else if (i < 6) {" + PMD.EOL
+ " i = 7;" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }";
private static final int[][] TEST22_NODES = { { 1 }, { 2 }, { 3 }, { 4, 8 }, { 5 }, { 7, 9 }, { 5 }, { 6 }, { 9 },
{}, };
public static final String TEST22 = "public class Foo {" + PMD.EOL + " public void test_22() {" + PMD.EOL
+ " int i = 0;" + PMD.EOL + " if (i == 1) {" + PMD.EOL + " for (i = 3; i < 4; i++) {" + PMD.EOL
+ " i = 5;" + PMD.EOL + " }" + PMD.EOL + " } else {" + PMD.EOL + " i = 7;" + PMD.EOL + " }"
+ PMD.EOL + " }" + PMD.EOL + " }";
private static final int[][] TEST23_NODES = { { 1 }, { 2 }, { 3 }, { 4, 8 }, { 5 }, { 7, 10 }, { 5 }, { 6 },
{ 9, 10 }, { 10 }, {}, };
public static final String TEST23 = "public class Foo {" + PMD.EOL + " public void test_23() {" + PMD.EOL
+ " int i = 0;" + PMD.EOL + " if (i == 1) {" + PMD.EOL + " for (i = 3; i < 4; i++) {" + PMD.EOL
+ " i = 5;" + PMD.EOL + " }" + PMD.EOL + " } else if (i < 6) {" + PMD.EOL + " i = 7;" + PMD.EOL
+ " }" + PMD.EOL + " }" + PMD.EOL + " }";
private static final int[][] TEST24_NODES = { { 1 }, { 2 }, { 3 }, { 4, 9 }, { 5 }, { 7, 11 }, { 5 }, { 8, 6 },
{ 6 }, { 10, 11 }, { 11 }, {}, };
public static final String TEST24 = "public class Foo {" + PMD.EOL + " public void test_24() {" + PMD.EOL
+ " int x = 0;" + PMD.EOL + " if (x > 2) {" + PMD.EOL + " for (int i = 0; i < 1; i++) {" + PMD.EOL
+ " if (x > 3) {" + PMD.EOL + " x++;" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL
+ " } else if (x > 4) {" + PMD.EOL + " x++;" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }";
private static final int[][] TEST25_NODES = { { 1 }, { 2 }, { 3 }, { 4, 5 }, { 5 }, {} };
public static final String TEST25 = "public class Foo {" + PMD.EOL + " public void test_25() {" + PMD.EOL
+ " int x = 0;" + PMD.EOL + " switch (x) {" + PMD.EOL + " default:" + PMD.EOL + " x = 9;" + PMD.EOL
+ " }" + PMD.EOL + " }" + PMD.EOL + " }";
private static final int[][] TEST26_NODES = { { 1 }, { 2 }, { 3 }, { 4 }, { 5, 6 }, { 6 }, { 7 }, { 8, 3 }, { 9 },
{}, };
public static final String TEST26 = "public class Foo {" + PMD.EOL + " public void test_26() {" + PMD.EOL
+ " int x = 0;" + PMD.EOL + " do {" + PMD.EOL + " if (x > 0) {" + PMD.EOL + " x++;" + PMD.EOL
+ " }" + PMD.EOL + " x++;" + PMD.EOL + " } while (x < 9);" + PMD.EOL + " x++;" + PMD.EOL + " }"
+ PMD.EOL + " }";
private static final int[][] TEST27_NODES = { { 1 }, { 2 }, { 3 }, { 5, 9 }, { 3 }, { 6 }, { 7 }, { 8 }, { 6, 4 }, {}, };
public static final String TEST27 = "public class Foo {" + PMD.EOL + " public void test_27() {" + PMD.EOL
+ " for (int i = 0; i < 36; i++) {" + PMD.EOL + " int x = 0;" + PMD.EOL + " do {" + PMD.EOL
+ " x++;" + PMD.EOL + " } while (x < 9);" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }";
private static final int[][] TEST28_NODES = { { 1 }, { 2 }, { 3 }, { 5, 14 }, { 3 }, { 6 }, { 7 }, { 8, 12 }, { 9 },
{ 10, 12 }, { 11 }, { 12 }, { 13 }, { 6, 4 }, {}, };
public static final String TEST28 = "public class Foo {" + PMD.EOL + " private void test_28() {" + PMD.EOL
+ " for (int i = 0; i < 36; i++) {" + PMD.EOL + " int x = 0;" + PMD.EOL + " do {" + PMD.EOL
+ " if (x > 0) {" + PMD.EOL + " x++;" + PMD.EOL + " switch (i) {" + PMD.EOL + " case 0:"
+ PMD.EOL + " x = 0;" + PMD.EOL + " break;" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL
+ " x++;" + PMD.EOL + " } while (x < 9);" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + " }";
private static final int[][] TEST29_NODES = { { 1 }, { 2 }, { 3, 4, 5 }, { 6 }, { 6 }, { 6 }, {}, };
public static final String TEST29 = "public class Foo {" + PMD.EOL + " private void test_29() {" + PMD.EOL
+ " switch(x) {" + PMD.EOL + " case 1:" + PMD.EOL + " break; " + PMD.EOL + " default: " + PMD.EOL
+ " break;" + PMD.EOL + " case 2:" + PMD.EOL + " break;" + PMD.EOL + " }" + PMD.EOL + " }"
+ PMD.EOL + "}";
private static final int[][] TEST30_NODES = { { 1 }, { 2 }, { 3 }, { 4, 7 }, { 5, 6 }, { 4 }, { 3 }, {} };
public static final String TEST30 = "public class Foo {" + PMD.EOL + " private void test_30() {" + PMD.EOL
+ " int x = 0;" + PMD.EOL + " while (true) {" + PMD.EOL + " while (x>0) {" + PMD.EOL + " x++;"
+ PMD.EOL + " }" + PMD.EOL + " continue;" + PMD.EOL + " }" + PMD.EOL + " }" + PMD.EOL + "}";
}