package org.js.model.workflow.test.rewrite;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jwt.meta.model.processes.ActivityEdge;
import org.eclipse.jwt.meta.model.processes.ActivityNode;
import org.eclipse.jwt.meta.model.processes.ProcessesFactory;
import org.js.model.workflow.util.WorkflowModelUtil;
import org.junit.Assert;
import org.junit.Test;
public class RewriteUtilTest {
public static ProcessesFactory processFactory = ProcessesFactory.eINSTANCE;
private ActivityNode nodeO,nodeM,nodeF,nodeG,nodeD,nodeB,nodeE,nodeC,nodeH,nodeA;
private ActivityEdge edge8,edge7,edge5,edge3,edge1,edge6,edge4,edge9,edge2;
/**
* A dummy model of a directed path.
* Capital letters represent nodes while numbers represent edges
*
* G--7- H--9-
* \ \
* O--8--F--5--D--3--B--1--M
* / |
* E--6--C--4- A--2-
*
*
*/
private void createDummyModel(){
nodeO = createNode("O");
nodeM = createNode("M");
nodeF = createNode("F");
nodeG = createNode("G");
nodeD = createNode("D");
nodeB = createNode("B");
nodeE = createNode("E");
nodeC = createNode("C");
nodeH = createNode("H");
nodeA = createNode("A");
edge8 = createEdge(nodeO, nodeF);
edge7 = createEdge(nodeG, nodeF);
edge5 = createEdge(nodeF, nodeD);
edge3 = createEdge(nodeD, nodeB);
edge1 = createEdge(nodeB, nodeM);
edge6 = createEdge(nodeE, nodeC);
edge4 = createEdge(nodeC, nodeB);
edge9 = createEdge(nodeH, nodeB);
edge2 = createEdge(nodeA, nodeM);
}
private ActivityNode createNode(String name){
ActivityNode node = processFactory.createActivityNode();
node.setName(name);
return node;
}
private ActivityEdge createEdge(ActivityNode source, ActivityNode target){
ActivityEdge actEdge = processFactory.createActivityEdge();
actEdge.setSource(source);
actEdge.setTarget(target);
return actEdge;
}
@Test
public void testFindPath1(){
createDummyModel();
Set<EObject> path = new HashSet<EObject>();
Set<EObject> result = WorkflowModelUtil.findPath(nodeO, nodeM, path);
Assert.assertTrue(result != null);
Assert.assertTrue(result.size()== 7);
Assert.assertTrue(result.contains(edge8));
Assert.assertTrue(result.contains(edge5));
Assert.assertTrue(result.contains(edge3));
Assert.assertTrue(result.contains(edge1));
Assert.assertTrue(result.contains(nodeF));
Assert.assertTrue(result.contains(nodeD));
Assert.assertTrue(result.contains(nodeB));
}
@Test
public void testFindPath2(){
createDummyModel();
Set<EObject> path = new HashSet<EObject>();
Set<EObject> result = WorkflowModelUtil.findPath(nodeE, nodeB, path);
Assert.assertTrue(result != null);
Assert.assertTrue(result.size()== 3);
Assert.assertTrue(result.contains(edge6));
Assert.assertTrue(result.contains(edge4));
Assert.assertTrue(result.contains(nodeC));
}
@Test
public void testFindPath3(){
createDummyModel();
Set<EObject> path = new HashSet<EObject>();
Set<EObject> result = WorkflowModelUtil.findPath(nodeG, nodeF, path);
Assert.assertTrue(result != null);
Assert.assertTrue(result.size()== 1);
Assert.assertTrue(result.contains(edge7));
}
@Test
public void testFindPath4(){
createDummyModel();
Set<EObject> path = new HashSet<EObject>();
Set<EObject> result = WorkflowModelUtil.findPath(nodeG, nodeO, path);
Assert.assertTrue(result != null);
Assert.assertTrue(result.size()== 0);
}
@Test
public void testFindPath5(){
createDummyModel();
Set<EObject> path = new HashSet<EObject>();
Set<EObject> result = WorkflowModelUtil.findPath(nodeD, nodeC, path);
Assert.assertTrue(result != null);
Assert.assertTrue(result.size()== 0);
}
}