Пример #1
0
        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();
        }
Пример #5
0
        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);
 }