/// <summary> /// +-------------------------------------------------------+ /// | embedded subprocess | /// | +--------------------------------+ | /// | | nested embedded subprocess | | /// +-----+ | +-----------+ | +-----------+ +---------+ | | +---+ /// |start|-->| |startInside|--> | |startInside|-->|endInside| | |-->|end| /// +-----+ | +-----------+ | +-----------+ +---------+ | | +---+ /// | +--------------------------------+ | /// | | /// +-------------------------------------------------------+ /// </summary> public virtual void testNestedSubProcessNoEnd() { ActivityInstanceVerification verifier = new ActivityInstanceVerification(); PvmProcessDefinition processDefinition = (new ProcessDefinitionBuilder()).createActivity("start").initial().behavior(new Automatic()).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).transition("embeddedsubprocess").endActivity().createActivity("embeddedsubprocess").scope().behavior(new EmbeddedSubProcess()).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).createActivity("startInside").behavior(new Automatic()).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).transition("nestedSubProcess").endActivity().createActivity("nestedSubProcess").scope().behavior(new EmbeddedSubProcess()).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).createActivity("startNestedInside").behavior(new Automatic()).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).transition("endInside").endActivity().createActivity("endInside").behavior(new End()).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).endActivity().endActivity().transition("end").endActivity().createActivity("end").behavior(new End()).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).endActivity().buildProcessDefinition(); PvmProcessInstance processInstance = processDefinition.createProcessInstance(); processInstance.start(); assertTrue(processInstance.Ended); verifier.assertStartInstanceCount(1, "start"); verifier.assertProcessInstanceParent("start", processInstance); verifier.assertStartInstanceCount(1, "embeddedsubprocess"); verifier.assertProcessInstanceParent("embeddedsubprocess", processInstance); verifier.assertStartInstanceCount(1, "startInside"); verifier.assertParent("startInside", "embeddedsubprocess"); verifier.assertStartInstanceCount(1, "nestedSubProcess"); verifier.assertParent("nestedSubProcess", "embeddedsubprocess"); verifier.assertStartInstanceCount(1, "startNestedInside"); verifier.assertParent("startNestedInside", "nestedSubProcess"); verifier.assertStartInstanceCount(1, "endInside"); verifier.assertParent("endInside", "nestedSubProcess"); verifier.assertStartInstanceCount(1, "end"); verifier.assertProcessInstanceParent("end", processInstance); }
/// <summary> /// +-------------------------------------------------+ /// | embeddedsubprocess +----------+ | /// | +---->|endInside1| | /// | | +----------+ | /// | | | /// +-----+ | +-----------+ +----+ +----+ +----------+ | +---+ /// |start|-->| |startInside|-->|fork|-->|wait|-->|endInside2| |-->|end| /// +-----+ | +-----------+ +----+ +----+ +----------+ | +---+ /// | | | /// | | +----------+ | /// | +---->|endInside3| | /// | +----------+ | /// +-------------------------------------------------+ /// </summary> public virtual void testMultipleConcurrentEndsInsideEmbeddedSubProcessWithWaitState() { ActivityInstanceVerification verifier = new ActivityInstanceVerification(); PvmProcessDefinition processDefinition = (new ProcessDefinitionBuilder()).createActivity("start").initial().behavior(new Automatic()).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).transition("embeddedsubprocess").endActivity().createActivity("embeddedsubprocess").scope().behavior(new EmbeddedSubProcess()).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).createActivity("startInside").behavior(new Automatic()).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).transition("fork").endActivity().createActivity("fork").behavior(new ParallelGateway()).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).transition("endInside1").transition("wait").transition("endInside3").endActivity().createActivity("endInside1").behavior(new End()).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).endActivity().createActivity("wait").behavior(new WaitState()).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).transition("endInside2").endActivity().createActivity("endInside2").behavior(new End()).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).endActivity().createActivity("endInside3").behavior(new End()).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).endActivity().transition("end").endActivity().createActivity("end").behavior(new End()).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).endActivity().buildProcessDefinition(); PvmProcessInstance processInstance = processDefinition.createProcessInstance(); processInstance.start(); assertFalse(processInstance.Ended); PvmExecution execution = processInstance.findExecution("wait"); execution.signal(null, null); assertTrue(processInstance.Ended); verifier.assertStartInstanceCount(1, "start"); verifier.assertProcessInstanceParent("start", processInstance); verifier.assertStartInstanceCount(1, "embeddedsubprocess"); verifier.assertProcessInstanceParent("embeddedsubprocess", processInstance); verifier.assertStartInstanceCount(1, "startInside"); verifier.assertParent("startInside", "embeddedsubprocess"); verifier.assertStartInstanceCount(1, "fork"); verifier.assertParent("fork", "embeddedsubprocess"); verifier.assertStartInstanceCount(1, "wait"); verifier.assertParent("wait", "embeddedsubprocess"); verifier.assertStartInstanceCount(1, "endInside1"); verifier.assertParent("endInside1", "embeddedsubprocess"); verifier.assertStartInstanceCount(1, "endInside2"); verifier.assertParent("endInside2", "embeddedsubprocess"); verifier.assertStartInstanceCount(1, "endInside3"); verifier.assertParent("endInside3", "embeddedsubprocess"); verifier.assertStartInstanceCount(1, "end"); verifier.assertProcessInstanceParent("end", processInstance); }