package org.jbpm.graph.exe;
import java.util.Iterator;
import org.jbpm.db.AbstractDbTestCase;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.taskmgmt.exe.TaskInstance;
public class SubProcessCancellationTest extends AbstractDbTestCase {
public void testWithSubProcess() {
ProcessDefinition subProcess = ProcessDefinition.parseXmlString("<process-definition name='sub'>"
+ " <start-state>"
+ " <transition to='wait' />"
+ " </start-state>"
+ " <task-node name='wait'>"
+ " <task>"
+ " <timer duedate='2 seconds' class='MyTimerClass' />"
+ " </task>"
+ " <transition to='end' />"
+ " </task-node>"
+ " <end-state name='end' />"
+ "</process-definition>");
deployProcessDefinition(subProcess);
ProcessDefinition superProcess = ProcessDefinition.parseXmlString("<process-definition name='super'>"
+ " <start-state>"
+ " <transition to='subprocess' />"
+ " </start-state>"
+ " <process-state name='subprocess'>"
+ " <sub-process name='sub' />"
+ " <transition to='s'/>"
+ " </process-state>"
+ " <state name='s' />"
+ "</process-definition>");
deployProcessDefinition(superProcess);
ProcessInstance pi = jbpmContext.newProcessInstanceForUpdate("super");
pi.signal();
processJobs();
pi = jbpmContext.loadProcessInstance(pi.getId());
ProcessInstance subPi = pi.getRootToken().getSubProcessInstance();
assertEquals("wait", subPi.getRootToken().getNode().getName());
pi.end();
pi.getTaskMgmtInstance().endAll();
pi = saveAndReload(pi);
assertTrue(pi.hasEnded());
subPi = pi.getRootToken().getSubProcessInstance();
assertTrue(subPi.hasEnded());
for (Iterator i = subPi.getTaskMgmtInstance().getTaskInstances().iterator(); i.hasNext();) {
TaskInstance taskInstance = (TaskInstance) i.next();
assertFalse(taskInstance.isSignalling());
assertFalse(taskInstance.hasEnded());
}
}
}