package sushi.application.pages.simulator.model; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.List; import org.junit.Before; import org.junit.Test; import sushi.bpmn.decomposition.ANDComponent; import sushi.bpmn.decomposition.LoopComponent; import sushi.bpmn.decomposition.SequenceComponent; import sushi.bpmn.decomposition.XORComponent; import sushi.bpmn.element.AbstractBPMNElement; import sushi.bpmn.element.BPMNAndGateway; import sushi.bpmn.element.BPMNProcess; import sushi.bpmn.element.BPMNStartEvent; import sushi.bpmn.element.BPMNTask; import sushi.bpmn.element.BPMNXORGateway; import sushi.event.SushiEventType; import sushi.event.collection.SushiTree; import sushi.util.SetUtil; public class SimulationTreeTableToModelConverterTest { private SushiTree<Object> tree; private SushiEventType e1; private SushiEventType e2; @Before public void setup(){ tree = new SushiTree<Object>(); SequenceComponent sequence1 = new SequenceComponent(null, null, null, null); tree.add(sequence1); XORComponent xor1 = new XORComponent(null, null, null, null); tree.addChild(sequence1, xor1); e1 = new SushiEventType("E1"); e2 = new SushiEventType("E2"); tree.addChild(xor1, e1); tree.addChild(xor1, e2); ANDComponent and1 = new ANDComponent(null, null, null, null); tree.addChild(sequence1, and1); LoopComponent loop1 = new LoopComponent(null, null, null, null); tree.addChild(and1, loop1); tree.addChild(loop1, e2); tree.addChild(loop1, e1); SequenceComponent sequence2 = new SequenceComponent(null, null, null, null); tree.addChild(and1, sequence2); tree.addChild(sequence2, e1); tree.addChild(sequence2, e2); } @Test public void testConversion(){ SimulationTreeTableToModelConverter converter = new SimulationTreeTableToModelConverter(); BPMNProcess process = converter.convertTreeToModel(tree); assertTrue("Should be 14, but was " + process.getBPMNElementsWithOutSequenceFlows().size(), process.getBPMNElementsWithOutSequenceFlows().size() == 14); assertNotNull(process.getStartEvent()); BPMNStartEvent startEvent = process.getStartEvent(); assertTrue(startEvent.getSuccessors().size() == 1); assertTrue(startEvent.getSuccessors().iterator().next() instanceof BPMNXORGateway); BPMNXORGateway xor1 = (BPMNXORGateway) startEvent.getSuccessors().iterator().next(); List<AbstractBPMNElement> successors = SetUtil.asList(xor1.getSuccessors()); assertTrue(successors.size() == 2); assertTrue(successors.get(0) instanceof BPMNTask); assertTrue(successors.get(1) instanceof BPMNTask); assertTrue(successors.get(0).getSuccessors().iterator().next() instanceof BPMNXORGateway); BPMNXORGateway xor2 = (BPMNXORGateway) successors.get(0).getSuccessors().iterator().next(); assertTrue(xor2.getSuccessors().size() == 1); assertTrue("Should be BPMNAndGateway, but was " + xor2.getSuccessors().iterator().next(),xor2.getSuccessors().iterator().next() instanceof BPMNAndGateway); BPMNAndGateway and1 = (BPMNAndGateway) xor2.getSuccessors().iterator().next(); assertTrue(and1.getSuccessors().size() == 2); successors = SetUtil.asList(and1.getSuccessors()); for(AbstractBPMNElement successor : successors){ if(successor instanceof BPMNTask){ BPMNTask task = (BPMNTask)successor; if(task.getMonitoringPoints().get(0).getEventType().equals(e1)){ assertTrue(task.getSuccessors().iterator().next() instanceof BPMNTask); } } else { assertTrue(successor instanceof BPMNXORGateway); BPMNXORGateway loopEntry = (BPMNXORGateway) successor; assertTrue(loopEntry.getPredecessors().size() == 2); assertTrue(loopEntry.getSuccessors().size() == 1); assertTrue(loopEntry.getSuccessors().iterator().next() instanceof BPMNTask); BPMNTask loopTask1 = (BPMNTask) loopEntry.getSuccessors().iterator().next(); assertTrue(loopTask1.getSuccessors().size() == 1); assertTrue(loopTask1.getSuccessors().iterator().next() instanceof BPMNTask); BPMNTask loopTask2 = (BPMNTask) loopTask1.getSuccessors().iterator().next(); assertTrue(loopTask2.getSuccessors().size() == 1); assertTrue(loopTask2.getSuccessors().iterator().next() instanceof BPMNXORGateway); BPMNXORGateway loopExit = (BPMNXORGateway) loopTask2.getSuccessors().iterator().next(); assertTrue(loopExit.getSuccessors().size() == 2); for(AbstractBPMNElement loopExitSuccessor : loopExit.getSuccessors()){ if(loopExitSuccessor instanceof BPMNAndGateway){ assertTrue(loopExitSuccessor.getPredecessors().size() == 2); assertTrue(loopExitSuccessor.getSuccessors().size() == 1); assertTrue(loopExitSuccessor.getSuccessors().contains(process.getEndEvent())); } } } } } }