.endActivity()
.endActivity()
.buildCaseDefinition();
// an active case instance
CmmnCaseInstance caseInstance = caseDefinition.createCaseInstance();
caseInstance.create();
// a case execution associated with Stage X
CmmnActivityExecution stageX = caseInstance.findCaseExecution("X");
// an active stage X
stageX.manualStart();
// a case execution associated with Task A
CmmnActivityExecution taskA = caseInstance.findCaseExecution("A");
// an active task A
taskA.manualStart();
// a case execution associated with Task B
CmmnActivityExecution taskB = caseInstance.findCaseExecution("B");
// an active task B
taskB.manualStart();
// when ////////////////////////////////////////////////////////////////
// complete task A
taskA.complete();
// complete task B
taskB.complete();
// then ////////////////////////////////////////////////////////////////
List<String> expectedStateTransitions = new ArrayList<String>();
// expected state transitions:
// active --complete(A)--> completed
// active --complete(B)--> completed
// active --complete(X)--> completed
// active --complete(Case1)--> completed
expectedStateTransitions.add("active --complete(A)--> completed");
expectedStateTransitions.add("active --complete(B)--> completed");
expectedStateTransitions.add("active --complete(X)--> completed");
expectedStateTransitions.add("active --complete(Case1)--> completed");
assertEquals(expectedStateTransitions, stateTransitionCollector.stateTransitions);
// clear lists
expectedStateTransitions.clear();
stateTransitionCollector.stateTransitions.clear();
// task A is completed
assertTrue(taskA.isCompleted());
// task B is completed
assertTrue(taskB.isCompleted());
// stage X is completed
assertTrue(stageX.isCompleted());
// stage X does not contain task A anymore
assertNull(caseInstance.findCaseExecution("A"));
// stage X does not contain task B anymore
assertNull(caseInstance.findCaseExecution("B"));
// stage X does not contain task X anymore
assertNull(caseInstance.findCaseExecution("X"));
// stage X has only one child
assertEquals(0, ((CaseExecutionImpl) caseInstance).getCaseExecutions().size());
// case instance is completed
assertTrue(caseInstance.isCompleted());
}