1 package test.net.sourceforge.pmd.dfa;
2
3 import junit.framework.TestCase;
4 import net.sourceforge.pmd.dfa.DataFlowNode;
5 import net.sourceforge.pmd.dfa.IDataFlowNode;
6 import net.sourceforge.pmd.dfa.NodeType;
7 import net.sourceforge.pmd.dfa.StartOrEndDataFlowNode;
8
9 import java.util.LinkedList;
10
11 public class DataFlowNodeTest extends TestCase {
12
13 public void testAddPathToChild() {
14 DataFlowNode parent = new StartOrEndDataFlowNode(new LinkedList(), 10, false);
15 IDataFlowNode child = new StartOrEndDataFlowNode(new LinkedList(), 12, false);
16 parent.addPathToChild(child);
17 assertEquals(parent.getChildren().size(), 1);
18 assertTrue(child.getParents().contains(parent));
19 assertTrue(parent.getChildren().contains(child));
20 }
21
22 public void testRemovePathToChild() {
23 DataFlowNode parent = new StartOrEndDataFlowNode(new LinkedList(), 10, false);
24 IDataFlowNode child = new StartOrEndDataFlowNode(new LinkedList(), 12, false);
25 parent.addPathToChild(child);
26
27 assertTrue(parent.removePathToChild(child));
28 assertFalse(child.getParents().contains(parent));
29 assertFalse(parent.getChildren().contains(child));
30 }
31
32 public void testRemovePathWithNonChild() {
33 DataFlowNode parent = new StartOrEndDataFlowNode(new LinkedList(), 10, false);
34 IDataFlowNode child = new StartOrEndDataFlowNode(new LinkedList(), 12, false);
35 assertFalse(parent.removePathToChild(child));
36 }
37
38 public void testReverseParentPathsTo() {
39 DataFlowNode parent1 = new StartOrEndDataFlowNode(new LinkedList(), 10, false);
40 DataFlowNode parent2 = new StartOrEndDataFlowNode(new LinkedList(), 12, false);
41 IDataFlowNode child1 = new StartOrEndDataFlowNode(new LinkedList(), 13, false);
42 IDataFlowNode child2 = new StartOrEndDataFlowNode(new LinkedList(), 13, false);
43 parent1.addPathToChild(child1);
44 parent2.addPathToChild(child1);
45 assertTrue(parent1.getChildren().contains(child1));
46
47 child1.reverseParentPathsTo(child2);
48 assertTrue(parent1.getChildren().contains(child2));
49 assertFalse(parent1.getChildren().contains(child1));
50 assertTrue(parent2.getChildren().contains(child2));
51 assertFalse(parent2.getChildren().contains(child1));
52
53 assertEquals(0, child1.getParents().size());
54 assertEquals(2, child2.getParents().size());
55 }
56
57 public void testSetType() {
58 DataFlowNode node = new StartOrEndDataFlowNode(new LinkedList(), 10, false);
59 node.setType(NodeType.BREAK_STATEMENT);
60 assertTrue(node.isType(NodeType.BREAK_STATEMENT));
61 assertFalse(node.isType(NodeType.CASE_LAST_STATEMENT));
62 }
63 }