public void Superstate_should_handle_event_when_guard_of_substate_does_not_pass()
        {
            var machine = new TestMachine <State, Event, EventArgs>();

            machine.AddTransition(State.S1, Event.E1, State.S2);
            machine.AddTransition(State.S1_1, Event.E1, State.S1_2);
            machine.AddTransition(State.S1_2, Event.E1, (sender, e) => false, State.S1_1);
            machine.SetupSubstates(State.S1, HistoryType.None, State.S1_1, State.S1_2);

            registerMachineEvents(machine);
            machine.Start(State.S1);
            Assert.AreEqual(State.S1_1, machine.CurrentStateID);
            machine.Send(Event.E1);
            machine.Execute();
            Assert.AreEqual(State.S1_2, machine.CurrentStateID);
            machine.Send(Event.E1);
            machine.Execute();
            Assert.AreEqual(State.S2, machine.CurrentStateID);
            assertMachineEvents(true, false, true, false);
        }