Index: modules/test-db/src/test/java/org/jbpm/test/task/TaskAfterJoinTest.java =================================================================== --- modules/test-db/src/test/java/org/jbpm/test/task/TaskAfterJoinTest.java (revision 0) +++ modules/test-db/src/test/java/org/jbpm/test/task/TaskAfterJoinTest.java (revision 0) @@ -0,0 +1,74 @@ + +package org.jbpm.test.task; + +import java.util.HashSet; +import java.util.Set; + +import org.jbpm.api.ProcessInstance; +import org.jbpm.test.JbpmTestCase; + + +public class TaskAfterJoinTest extends JbpmTestCase { + protected static final String PROCESS_XML = "" + + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + ""; + + public void testTask() { + deployJpdlXmlString(PROCESS_XML); + + ProcessInstance processInstance = executionService.startProcessInstanceByKey("TaskAfterJoinTest"); + String pid = processInstance.getId(); + + Set expectedActivityNames = new HashSet(); + expectedActivityNames.add("state1"); + expectedActivityNames.add("state2"); + + assertEquals(expectedActivityNames, processInstance.findActiveActivityNames()); + + assertNotNull(processInstance.findActiveExecutionIn("state1")); + assertNotNull(processInstance.findActiveExecutionIn("state2")); + + String state1Id = processInstance.findActiveExecutionIn("state1").getId(); + processInstance = executionService.signalExecutionById(state1Id); + + expectedActivityNames.remove("state1"); + assertEquals(expectedActivityNames, processInstance.findActiveActivityNames()); + + assertNotNull(processInstance.findActiveExecutionIn("state2")); + + String state2Id = processInstance.findActiveExecutionIn("state2").getId(); + // HERE - it raises NullPointerException + processInstance = executionService.signalExecutionById(state2Id); + + expectedActivityNames.remove("state2"); + expectedActivityNames.add("task1"); + assertEquals(expectedActivityNames, processInstance.findActiveActivityNames()); + + assertNotNull(processInstance.findActiveExecutionIn("task1")); + + String task1Id = processInstance.findActiveExecutionIn("task1").getId(); + processInstance = executionService.signalExecutionById(task1Id); + + assertNull("execution "+pid+" should not exist", executionService.findExecutionById(pid)); + } +}