public GenericSubStateManagerImplTests() { mockIDeviceSubStateController = new Mock <IDeviceSubStateController>(); mockIDeviceStateController = new Mock <IDeviceStateController>(); subject = new GenericSubStateManagerImpl(mockIDeviceStateController.Object); stateIDeviceSubStateAction = new DeviceRequestCompleteSubStateAction(mockIDeviceSubStateController.Object); asyncManager = new DeviceSubStateMachineAsyncManager(ref mockIDeviceSubStateController, stateIDeviceSubStateAction); }
private bool IsEndOfWorkflow(IDeviceSubStateAction currentState) { // If this is a cutoff state then there is nothing further for us to do. if (currentState.WorkflowCutoff) { currentState.Dispose(); return(true); } return(false); }
public Task Error(IDeviceSubStateAction state) { if (IsEndOfWorkflow(state)) { RaiseOnWorkflowError(); } else { AdvanceStateActionTransition(state); } return(Task.CompletedTask); }
private async Task AssignAndForward(IDeviceSubStateAction newState, IDeviceSubStateAction oldState) { if (savedStackState.Count > 0) { newState.SetState(savedStackState.Pop()); } if (newState.LaunchRules?.RequestCancellationToken ?? false) { newState.SetCancellationToken(GetCancellationToken()); } oldState?.Dispose(); LogStateChange(oldState?.WorkflowStateType ?? DeviceSubWorkflowState.Undefined, newState.WorkflowStateType); await newState.DoWork(); }
public void GetNextAction_ShouldReturnCorrectType_When_Called(Type expectedType, DeviceSubWorkflowState initialState, bool set = true, bool exception = false) { TestHelper.Helper.SetFieldValueToInstance <IDeviceStateAction>("currentStateAction", false, false, subject, null); if (set) { var map = TestHelper.Helper.GetFieldValueFromInstance <Dictionary <DeviceSubWorkflowState, Func <IDeviceSubStateController, IDeviceSubStateAction> > >( "workflowMap", false, false, subject); IDeviceSubStateAction action = map[initialState](stubManager); if (exception) { TestHelper.Helper.SetPropertyValueToInstance <StateException>("LastException", true, false, action, new StateException()); } TestHelper.Helper.SetFieldValueToInstance <IDeviceStateAction>("currentStateAction", false, false, subject, action); } Assert.IsType(expectedType, subject.GetNextAction(initialState)); }
public Task Error(IDeviceSubStateAction state) => Task.CompletedTask;
public DeviceSubStateMachineAsyncManager(ref Mock <IDeviceSubStateController> mockController, IDeviceSubStateAction stateAction) : this() { mockController.Setup(e => e.Complete(stateAction)).Callback(() => resetEvent.Set()); mockController.Setup(e => e.Error(stateAction)).Callback(() => resetEvent.Set()); }
private void AdvanceStateActionTransition(DeviceSubWorkflowState workflowState) { currentStateAction = stateActionController.GetNextAction(workflowState); _ = AssignAndForward(currentStateAction, null); }
private void AdvanceStateActionTransition(IDeviceSubStateAction oldState) { currentStateAction = stateActionController.GetNextAction(oldState); _ = AssignAndForward(currentStateAction, oldState); }