예제 #1
0
        public void Loading(
            StateMachineSaver <State> saver,
            StateMachineLoader <State> loader,
            FakeExtension extension,
            State sourceState,
            State targetState)
        {
            "establish a saved state machine with history".x(() =>
            {
                var machine = new PassiveStateMachine <State, Event>();

                DefineMachine(machine);
                machine.Initialize(State.A);
                machine.Start();
                machine.Fire(Event.S2);     // set history of super state S
                machine.Fire(Event.B);      // set current state to B

                saver  = new StateMachineSaver <State>();
                loader = new StateMachineLoader <State>();

                machine.Save(saver);
            });

            "when state machine is loaded".x(() =>
            {
                loader.SetCurrentState(saver.CurrentStateId);
                loader.SetHistoryStates(saver.HistoryStates);

                extension         = new FakeExtension();
                var loadedMachine = new PassiveStateMachine <State, Event>();
                loadedMachine.AddExtension(extension);

                DefineMachine(loadedMachine);
                loadedMachine.Load(loader);

                loadedMachine.TransitionCompleted += (sender, args) =>
                {
                    sourceState = args.StateId;
                    targetState = args.NewStateId;
                };

                loadedMachine.Start();
                loadedMachine.Fire(Event.S);
            });

            "it should reset current state".x(() =>
                                              sourceState.Should().Be(State.B));

            "it should reset all history states of super states".x(() =>
                                                                   targetState.Should().Be(State.S2));

            "it should notify extensions".x(()
                                            => extension.LoadedCurrentState
                                            .Should().BeEquivalentTo(State.B));
        }
        public void TellsExtensionsAboutExecutedTransition()
        {
            var extension = new FakeExtension();

            this.ExtensionHost.Extension = extension;

            this.Testee.Fire(this.TransitionDefinition, this.TransitionContext, this.LastActiveStateModifier, this.StateDefinitions);

            extension.Items.Should().Contain(new FakeExtension.Item(
                                                 this.Source,
                                                 this.Target,
                                                 this.TransitionContext));
        }
예제 #3
0
        public async Task TellsExtensionsAboutExecutedTransition()
        {
            var extension = new FakeExtension();

            this.ExtensionHost.Extension = extension;

            await this.Testee.Fire(this.TransitionDefinition, this.TransitionContext, this.LastActiveStateModifier);

            extension.Items.Should().Contain(new FakeExtension.Item(
                                                 this.StateMachineInformation,
                                                 this.Source,
                                                 this.Target,
                                                 this.TransitionContext));
        }
예제 #4
0
        public void TellsExtensionsAboutExecutedTransition()
        {
            var extension = new FakeExtension();

            this.ExtensionHost.Extension = extension;

            this.Testee.Fire(this.TransitionContext);

            extension.Items.Should().Contain(new FakeExtension.Item(
                                                 this.StateMachineInformation,
                                                 this.Source,
                                                 this.Target,
                                                 this.TransitionContext));
        }