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