public void TransitionNotFoundRaisedWhenTransitionNotFoundOnChild()
        {
            var sm           = new StateMachine("sm");
            var initial      = sm.CreateInitialState("initial");
            var state1       = sm.CreateState("state 1");
            var child        = initial.CreateChildStateMachine();
            var childInitial = child.CreateInitialState("childInitial");
            var evt          = new Event("evt");

            state1.InnerSelfTransitionOn(evt);

            TransitionNotFoundEventArgs <State> ea = null;

            sm.TransitionNotFound += (o, e) =>
            {
                ea = e;
            };

            evt.TryFire();

            Assert.NotNull(ea);
            Assert.AreEqual(evt, ea.Event);
            Assert.AreEqual(initial, ea.From);
            Assert.AreEqual(sm, ea.StateMachine);
            Assert.AreEqual(EventFireMethod.TryFire, ea.EventFireMethod);
        }
        public void TransitionNotFoundRaisedWhenTransitionNotFoundOnParent()
        {
            var sm      = new StateMachine("sm");
            var initial = sm.CreateInitialState("initial");
            var evt     = sm.CreateEvent("evt");

            TransitionNotFoundEventArgs <State> ea = null;

            sm.TransitionNotFound += (o, e) =>
            {
                ea = e;
            };

            evt.TryFire();

            Assert.NotNull(ea);
            Assert.AreEqual(evt, ea.Event);
            Assert.AreEqual(initial, ea.From);
        }
        public void RecursiveFireRaisesTransitionNotFoundEvent()
        {
            var sm           = new StateMachine("sm");
            var initialState = sm.CreateInitialState("initialState");
            var state1       = sm.CreateState("state1");
            var evt          = new Event("evt");
            var evt2         = new Event("evt2");

            TransitionNotFoundEventArgs <State> ea = null;

            sm.TransitionNotFound += (o, e) => ea = e;

            initialState.TransitionOn(evt).To(state1).WithHandler(i => evt2.Fire());
            initialState.InnerSelfTransitionOn(evt2);

            try { evt.TryFire(); } catch (TransitionNotFoundException) { }

            Assert.NotNull(ea);
            Assert.AreEqual(evt2, ea.Event);
            Assert.AreEqual(state1, ea.From);
            Assert.AreEqual(sm, ea.StateMachine);
            Assert.AreEqual(EventFireMethod.Fire, ea.EventFireMethod);
        }
        public void RecursiveTryFireRaisesTransitionNotFoundEvent()
        {
            var sm           = new StateMachine("sm");
            var initialState = sm.CreateInitialState("initialState");
            var state1       = sm.CreateState("state1");
            var evt          = new Event("evt");
            var evt2         = new Event("evt2");

            TransitionNotFoundEventArgs <State> ea = null;

            sm.TransitionNotFound += (o, e) => ea = e;

            initialState.TransitionOn(evt2).To(initialState);
            initialState.TransitionOn(evt).To(state1).WithHandler(i =>
            {
                evt2.TryFire();
            });

            evt.Fire();

            Assert.NotNull(ea);
            Assert.AreEqual(state1, ea.From);
            Assert.AreEqual(evt2, ea.Event);
        }
 private void OnTransitionNotFound(object sender, TransitionNotFoundEventArgs<State> eventArgs)
 {
     var handler = this.TransitionNotFound;
     if (handler != null)
         handler(this, eventArgs);
 }