package kr.ac.snu.selab.soot.graph.collectors; import static org.junit.Assert.assertEquals; import java.util.ArrayList; import java.util.HashSet; import kr.ac.snu.selab.soot.graph.AbstractGraphTest; import kr.ac.snu.selab.soot.graph.Path; import org.junit.Before; import org.junit.Test; public class AllPathCollectorTest extends AbstractGraphTest { @Before public void setUp() { super.setUp(); } @Test public void test1() { AllPathCollector<StringNode> collector = new AllPathCollector<StringNode>( new StringNode("f"), graph); ArrayList<Path<StringNode>> paths = collector.run(); assertEquals(1, paths.size()); assertEquals("f;g;", pathString(paths.get(0))); } @Test public void test2() { AllPathCollector<StringNode> collector = new AllPathCollector<StringNode>( new StringNode("b"), graph); ArrayList<Path<StringNode>> paths = collector.run(); assertEquals(2, paths.size()); sortPaths(paths); assertEquals("b;c;d;e;c;", pathString(paths.get(0))); assertEquals("b;c;d;f;g;", pathString(paths.get(1))); } @Test public void test3() { AllPathCollector<StringNode> collector = new AllPathCollector<StringNode>( new StringNode("h"), graph); ArrayList<Path<StringNode>> paths = collector.run(); assertEquals(1, paths.size()); sortPaths(paths); assertEquals("h;i;j;i;", pathString(paths.get(0))); } @Override protected void initializeGraph() { StringNode nodeA = new StringNode("a"); StringNode nodeB = new StringNode("b"); StringNode nodeC = new StringNode("c"); StringNode nodeD = new StringNode("d"); StringNode nodeE = new StringNode("e"); StringNode nodeF = new StringNode("f"); StringNode nodeG = new StringNode("g"); StringNode nodeH = new StringNode("h"); StringNode nodeI = new StringNode("i"); StringNode nodeJ = new StringNode("j"); // a <- b <- c <- d <- e <- c (Cycle) // d <- f <- g // a <- h <- i <- j <- i push(nodeA, nodeB, nodeH); push(nodeB, nodeC); push(nodeC, nodeD); push(nodeD, nodeE, nodeF); push(nodeE, nodeC); push(nodeF, nodeG); push(nodeH, nodeI); push(nodeI, nodeJ); push(nodeJ, nodeI); } private void push(StringNode target, StringNode... sources) { HashSet<StringNode> nodes = new HashSet<StringNode>(); for (StringNode source : sources) { nodes.add(source); } graph.getSourceMap().put(target.key(), nodes); } }