Ejemplo n.º 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="StateMachineTest"/> class.
        /// </summary>
        public StateMachineTest()
        {
            var stateDefinitionBuilder = new StateDefinitionsBuilder <States, Events>();

            stateDefinitionBuilder
            .DefineHierarchyOn(States.B)
            .WithHistoryType(HistoryType.None)
            .WithInitialSubState(States.B1)
            .WithSubState(States.B2);
            stateDefinitionBuilder
            .DefineHierarchyOn(States.C)
            .WithHistoryType(HistoryType.Shallow)
            .WithInitialSubState(States.C2)
            .WithSubState(States.C1);
            stateDefinitionBuilder
            .DefineHierarchyOn(States.C1)
            .WithHistoryType(HistoryType.Shallow)
            .WithInitialSubState(States.C1A)
            .WithSubState(States.C1B);
            stateDefinitionBuilder
            .DefineHierarchyOn(States.D)
            .WithHistoryType(HistoryType.Deep)
            .WithInitialSubState(States.D1)
            .WithSubState(States.D2);
            stateDefinitionBuilder
            .DefineHierarchyOn(States.D1)
            .WithHistoryType(HistoryType.Deep)
            .WithInitialSubState(States.D1A)
            .WithSubState(States.D1B);
            stateDefinitionBuilder
            .In(States.A)
            .ExecuteOnEntry(() => this.RecordEntry(States.A))
            .ExecuteOnExit(() => this.RecordExit(States.A))
            .On(Events.B).Goto(States.B)
            .On(Events.C).Goto(States.C)
            .On(Events.D).Goto(States.D)
            .On(Events.A);
            stateDefinitionBuilder
            .In(States.B)
            .ExecuteOnEntry(() => this.RecordEntry(States.B))
            .ExecuteOnExit(() => this.RecordExit(States.B))
            .On(Events.D).Goto(States.D);
            stateDefinitionBuilder
            .In(States.B1)
            .ExecuteOnEntry(() => this.RecordEntry(States.B1))
            .ExecuteOnExit(() => this.RecordExit(States.B1))
            .On(Events.B2).Goto(States.B2);
            stateDefinitionBuilder
            .In(States.B2)
            .ExecuteOnEntry(() => this.RecordEntry(States.B2))
            .ExecuteOnExit(() => this.RecordExit(States.B2))
            .On(Events.A).Goto(States.A)
            .On(Events.C1B).Goto(States.C1B);
            stateDefinitionBuilder
            .In(States.C)
            .ExecuteOnEntry(() => this.RecordEntry(States.C))
            .ExecuteOnExit(() => this.RecordExit(States.C))
            .On(Events.A).Goto(States.A);
            stateDefinitionBuilder
            .In(States.C1)
            .ExecuteOnEntry(() => this.RecordEntry(States.C1))
            .ExecuteOnExit(() => this.RecordExit(States.C1))
            .On(Events.C1B).Goto(States.C1B);
            stateDefinitionBuilder
            .In(States.C2)
            .ExecuteOnEntry(() => this.RecordEntry(States.C2))
            .ExecuteOnExit(() => this.RecordExit(States.C2));
            stateDefinitionBuilder
            .In(States.C1A)
            .ExecuteOnEntry(() => this.RecordEntry(States.C1A))
            .ExecuteOnExit(() => this.RecordExit(States.C1A));
            stateDefinitionBuilder
            .In(States.C1B)
            .ExecuteOnEntry(() => this.RecordEntry(States.C1B))
            .ExecuteOnExit(() => this.RecordExit(States.C1B));
            stateDefinitionBuilder
            .In(States.D)
            .ExecuteOnEntry(() => this.RecordEntry(States.D))
            .ExecuteOnExit(() => this.RecordExit(States.D));
            stateDefinitionBuilder
            .In(States.D1)
            .ExecuteOnEntry(() => this.RecordEntry(States.D1))
            .ExecuteOnExit(() => this.RecordExit(States.D1));
            stateDefinitionBuilder
            .In(States.D1A)
            .ExecuteOnEntry(() => this.RecordEntry(States.D1A))
            .ExecuteOnExit(() => this.RecordExit(States.D1A));
            stateDefinitionBuilder
            .In(States.D1B)
            .ExecuteOnEntry(() => this.RecordEntry(States.D1B))
            .ExecuteOnExit(() => this.RecordExit(States.D1B))
            .On(Events.A).Goto(States.A)
            .On(Events.B1).Goto(States.B1);
            stateDefinitionBuilder
            .In(States.D2)
            .ExecuteOnEntry(() => this.RecordEntry(States.D2))
            .ExecuteOnExit(() => this.RecordExit(States.D2))
            .On(Events.A).Goto(States.A);
            stateDefinitionBuilder
            .In(States.E)
            .ExecuteOnEntry(() => this.RecordEntry(States.E))
            .ExecuteOnExit(() => this.RecordExit(States.E))
            .On(Events.A).Goto(States.A)
            .On(Events.E).Goto(States.E);
            this.stateDefinitions = stateDefinitionBuilder.Build();
        }