assertEquals(6,msf.getAuditTrail().size());
assertEquals(10,msf.getAuditTrail().size()); assertEquals(4,msf.getFOEs(pi).size());
	public void testDirectRecursiveSplitWithLimboTask() throws Exception {		MockProcessDef pd = new MockProcessDef("testDirectRecursiveSplitWithLimboTask");		MockTaskDef tdSplit = new SplitTaskDef(pd,"Split");		pd.setFirstTask(tdSplit);		tdSplit.setAuto(false);				tdSplit.addRoutingOut(tdSplit).setName("Goto Split");				MockTaskDef tdLimbo = new ManualRunTaskDef(pd,"Limbo");		MockRouting mrLimbo =  tdSplit.addRoutingOut(tdLimbo);		mrLimbo.setName("Always going to Limbo");		mrLimbo.setConditionClass(null);		mrLimbo.setParallel(false);				MockTaskDef tdJoin = new JoinTaskDef(pd,"Join");		tdSplit.addRoutingOut(tdJoin).setName("Goto Join");						MockStateFactory msf = new MockStateFactory();		IEngine engine = new Engine(msf);				MockProcessInstance pi = (MockProcessInstance) engine.createProcess(pd);		engine.startProcess(pi);				MockTaskInstance ti = pi.findTask(tdSplit,MockTaskInstance.STATE_READY);				ti.setConditionAction("Goto Split");				engine.transitionTask(ti);				ti = pi.findTask(tdSplit,MockTaskInstance.STATE_READY);				ti.setConditionAction("Goto Join");				engine.transitionTask(ti);				/*		 * check expected results		 * 1xProcess (running)		 * 2xSplit (completed)		 * 1xJoin (completed)		 * 2xLimbo (completed)		 */		assertEquals(6,msf.getAuditTrail().size());		assertEquals(2,pi.getTaskInstances().size());		assertEquals(2,msf.countInstances(tdSplit,MockTaskInstance.STATE_DELETED));		assertEquals(1,msf.countInstances(tdJoin,MockTaskInstance.STATE_DELETED));		assertEquals(2,msf.countInstances(tdLimbo,MockTaskInstance.STATE_READY));		assertEquals(MockProcessInstance.STATE_RUNNING,pi.getState());	}