/// <summary> /// +----------------------------+ /// v | /// +-------+ +------+ +-----+ +-----+ +-------+ /// | start |-->| loop |-->| one |-->| two |--> | three | /// +-------+ +------+ +-----+ +-----+ +-------+ /// | /// | +-----+ /// +-->| end | /// +-----+ /// </summary> public virtual void testWhileLoop() { ActivityInstanceVerification verifier = new ActivityInstanceVerification(); TransitionInstanceVerifyer transitionVerifier = new TransitionInstanceVerifyer(); PvmProcessDefinition processDefinition = (new ProcessDefinitionBuilder()).createActivity("start").initial().behavior(new Automatic()).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).startTransition("loop").executionListener([email protected]_Fields.EVENTNAME_TAKE, transitionVerifier).endTransition().endActivity().createActivity("loop").behavior(new While("count", 0, 10)).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).startTransition("one", "more").executionListener([email protected]_Fields.EVENTNAME_TAKE, transitionVerifier).endTransition().startTransition("end", "done").executionListener([email protected]_Fields.EVENTNAME_TAKE, transitionVerifier).endTransition().endActivity().createActivity("one").behavior(new Automatic()).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).transition("two").endActivity().createActivity("two").behavior(new Automatic()).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).transition("three").endActivity().createActivity("three").behavior(new Automatic()).executionListener([email protected]_Fields.EVENTNAME_START, verifier).executionListener([email protected]_Fields.EVENTNAME_END, verifier).transition("loop").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(); assertEquals(new List <string>(), processInstance.findActiveActivityIds()); assertTrue(processInstance.Ended); verifier.assertStartInstanceCount(1, "start"); verifier.assertProcessInstanceParent("start", processInstance); verifier.assertStartInstanceCount(11, "loop"); verifier.assertProcessInstanceParent("loop", processInstance); verifier.assertStartInstanceCount(10, "one"); verifier.assertProcessInstanceParent("one", processInstance); verifier.assertStartInstanceCount(10, "two"); verifier.assertProcessInstanceParent("two", processInstance); verifier.assertStartInstanceCount(10, "three"); verifier.assertProcessInstanceParent("three", processInstance); verifier.assertStartInstanceCount(1, "end"); verifier.assertProcessInstanceParent("end", processInstance); }
public virtual void testSimpleWaitStateConcurrency() { PvmProcessDefinition processDefinition = (new ProcessDefinitionBuilder()).createActivity("start").initial().behavior(new Automatic()).transition("fork").endActivity().createActivity("fork").behavior(new ParallelGateway()).transition("c1").transition("c2").endActivity().createActivity("c1").behavior(new WaitState()).transition("join").endActivity().createActivity("c2").behavior(new WaitState()).transition("join").endActivity().createActivity("join").behavior(new ParallelGateway()).transition("end").endActivity().createActivity("end").behavior(new WaitState()).endActivity().buildProcessDefinition(); PvmProcessInstance processInstance = processDefinition.createProcessInstance(); processInstance.start(); PvmExecution activityInstanceC1 = processInstance.findExecution("c1"); assertNotNull(activityInstanceC1); PvmExecution activityInstanceC2 = processInstance.findExecution("c2"); assertNotNull(activityInstanceC2); activityInstanceC1.signal(null, null); activityInstanceC2.signal(null, null); IList <string> activityNames = processInstance.findActiveActivityIds(); IList <string> expectedActivityNames = new List <string>(); expectedActivityNames.Add("end"); assertEquals(expectedActivityNames, activityNames); }
/// <summary> /// +-----+ +-----+ +-------+ /// | one |-->| two |-->| three | /// +-----+ +-----+ +-------+ /// </summary> public virtual void testSingleAutomatic() { PvmProcessDefinition processDefinition = (new ProcessDefinitionBuilder()).createActivity("one").initial().behavior(new Automatic()).transition("two").endActivity().createActivity("two").behavior(new Automatic()).transition("three").endActivity().createActivity("three").behavior(new End()).endActivity().buildProcessDefinition(); PvmProcessInstance processInstance = processDefinition.createProcessInstance(); processInstance.start(); assertEquals(new List <string>(), processInstance.findActiveActivityIds()); assertTrue(processInstance.Ended); }
/// <summary> /// +----------------------------+ /// v | /// +-------+ +------+ +-----+ +-----+ +-------+ /// | start |-->| loop |-->| one |-->| two |--> | three | /// +-------+ +------+ +-----+ +-----+ +-------+ /// | /// | +-----+ /// +-->| end | /// +-----+ /// </summary> public virtual void testWhileLoop() { PvmProcessDefinition processDefinition = (new ProcessDefinitionBuilder()).createActivity("start").initial().behavior(new Automatic()).transition("loop").endActivity().createActivity("loop").behavior(new While("count", 0, 10)).transition("one", "more").transition("end", "done").endActivity().createActivity("one").behavior(new Automatic()).transition("two").endActivity().createActivity("two").behavior(new Automatic()).transition("three").endActivity().createActivity("three").behavior(new Automatic()).transition("loop").endActivity().createActivity("end").behavior(new End()).endActivity().buildProcessDefinition(); PvmProcessInstance processInstance = processDefinition.createProcessInstance(); processInstance.start(); assertEquals(new List <string>(), processInstance.findActiveActivityIds()); assertTrue(processInstance.Ended); }
/// <summary> /// +------------------------------+ /// | embedded subprocess | /// +-----+ | +-----------+ +---------+ | +---+ /// |start|-->| |startInside|-->|endInside| |-->|end| /// +-----+ | +-----------+ +---------+ | +---+ /// +------------------------------+ /// </summary> public virtual void testEmbeddedSubProcess() { PvmProcessDefinition processDefinition = (new ProcessDefinitionBuilder()).createActivity("start").initial().behavior(new Automatic()).transition("embeddedsubprocess").endActivity().createActivity("embeddedsubprocess").scope().behavior(new EmbeddedSubProcess()).createActivity("startInside").behavior(new Automatic()).transition("endInside").endActivity().createActivity("endInside").behavior(new End()).endActivity().transition("end").endActivity().createActivity("end").behavior(new WaitState()).endActivity().buildProcessDefinition(); PvmProcessInstance processInstance = processDefinition.createProcessInstance(); processInstance.start(); IList <string> expectedActiveActivityIds = new List <string>(); expectedActiveActivityIds.Add("end"); assertEquals(expectedActiveActivityIds, processInstance.findActiveActivityIds()); }
/// <summary> /// +-----+ +----------+ +---+ /// |start|-->|scopedWait|-->|end| /// +-----+ +----------+ +---+ /// </summary> public virtual void testWaitStateScope() { PvmProcessDefinition processDefinition = (new ProcessDefinitionBuilder()).createActivity("start").initial().behavior(new Automatic()).transition("scopedWait").endActivity().createActivity("scopedWait").scope().behavior(new WaitState()).transition("end").endActivity().createActivity("end").behavior(new End()).endActivity().buildProcessDefinition(); PvmProcessInstance processInstance = processDefinition.createProcessInstance(); processInstance.start(); PvmExecution execution = processInstance.findExecution("scopedWait"); assertNotNull(execution); execution.signal(null, null); assertEquals(new List <string>(), processInstance.findActiveActivityIds()); assertTrue(processInstance.Ended); }
/// <summary> /// +----------------------------------------------------------------------+ /// | embedded subprocess | /// | | /// | create evt scope --+ | /// | | | /// | v | /// | | /// | +--------------------------------+ | /// | | nested embedded subprocess | | /// +-----+ | +-----------+ | +-----------------+ | +----+ +---+ | +---+ /// |start|-->| |startInside|--> | |startNestedInside| |-->|wait|-->|end| |-->|end| /// +-----+ | +-----------+ | +-----------------+ | +----+ +---+ | +---+ /// | +--------------------------------+ | /// | | /// +----------------------------------------------------------------------+ /// /// ^ /// | /// destroy evt scope --+ /// </summary> public virtual void testTransitionDestroysEventScope() { PvmProcessDefinition processDefinition = (new ProcessDefinitionBuilder()).createActivity("start").initial().behavior(new Automatic()).transition("embeddedsubprocess").endActivity().createActivity("embeddedsubprocess").scope().behavior(new EmbeddedSubProcess()).createActivity("startInside").behavior(new Automatic()).transition("nestedSubProcess").endActivity().createActivity("nestedSubProcess").scope().behavior(new EventScopeCreatingSubprocess()).createActivity("startNestedInside").behavior(new Automatic()).endActivity().transition("wait").endActivity().createActivity("wait").behavior(new WaitState()).transition("endInside").endActivity().createActivity("endInside").behavior(new Automatic()).endActivity().transition("end").endActivity().createActivity("end").behavior(new Automatic()).endActivity().buildProcessDefinition(); PvmProcessInstance processInstance = processDefinition.createProcessInstance(); processInstance.start(); IList <string> expectedActiveActivityIds = new List <string>(); expectedActiveActivityIds.Add("wait"); assertEquals(expectedActiveActivityIds, processInstance.findActiveActivityIds()); PvmExecution execution = processInstance.findExecution("wait"); execution.signal(null, null); assertTrue(processInstance.Ended); }
/// <summary> /// +-----+ +-----+ +-------+ +------+ +------+ /// | one |-->| two |-->| three |-->| four |--> | five | /// +-----+ +-----+ +-------+ +------+ +------+ /// </summary> public virtual void testCombinationOfWaitStatesAndAutomatics() { PvmProcessDefinition processDefinition = (new ProcessDefinitionBuilder()).createActivity("start").initial().behavior(new Automatic()).transition("one").endActivity().createActivity("one").behavior(new WaitState()).transition("two").endActivity().createActivity("two").behavior(new WaitState()).transition("three").endActivity().createActivity("three").behavior(new Automatic()).transition("four").endActivity().createActivity("four").behavior(new Automatic()).transition("five").endActivity().createActivity("five").behavior(new End()).endActivity().buildProcessDefinition(); PvmProcessInstance processInstance = processDefinition.createProcessInstance(); processInstance.start(); PvmExecution activityInstance = processInstance.findExecution("one"); assertNotNull(activityInstance); activityInstance.signal(null, null); activityInstance = processInstance.findExecution("two"); assertNotNull(activityInstance); activityInstance.signal(null, null); assertEquals(new List <string>(), processInstance.findActiveActivityIds()); assertTrue(processInstance.Ended); }