示例#1
0
        private void Event_Finished(TestActions[] actions)
        {
            var builder = new CodeStateMachineBuilder <TestStates, TestActions>();

            builder
            .StartWith(TestStates.Default)
            .Move(TestStates.Default, TestActions.Save, TestStates.Draft)
            .Move(TestStates.Draft, TestActions.Check, TestStates.Checked)
            .Move(TestStates.Draft, TestActions.Delete, TestStates.Deleted)
            .Move(TestStates.Checked, TestActions.Check, TestStates.DoubleChecked)
            .Move(TestStates.Checked, TestActions.Recall, TestStates.Recalled)
            .StopWith(TestStates.Deleted, TestStates.DoubleChecked, TestStates.Recalled)
            ;
            var  machine    = builder.Build();
            bool isFinished = false;

            machine.Stoped += (sender, e) =>
            {
                isFinished = true;
            };
            foreach (var a in actions)
            {
                machine.Push(a);
            }
            Assert.IsTrue(isFinished, actions.Join(",", x => x.ToString()));
        }
示例#2
0
        public void BuildTest()
        {
            var builder = new CodeStateMachineBuilder <TestStates, TestActions>();

            builder
            .StartWith(TestStates.Default)
            .Move(TestStates.Default, TestActions.Save, TestStates.Draft)
            .Move(TestStates.Draft, TestActions.Check, TestStates.Checked)
            .Move(TestStates.Draft, TestActions.Delete, TestStates.Deleted)
            .Move(TestStates.Checked, TestActions.Check, TestStates.DoubleChecked)
            .Move(TestStates.Checked, TestActions.Recall, TestStates.Recalled)
            .Move(TestStates.DoubleChecked, TestActions.Recall, TestStates.Recalled)
            ;
            var        machine = builder.Build();
            TestStates ts      = TestStates.Default;

            machine.Pushed += (sender, e) =>
            {
                ts = e.NewState;
            };
            machine.Push(TestActions.Save);
            Assert.AreEqual(TestStates.Draft, ts);
            machine.Push(TestActions.Check);
            Assert.AreEqual(TestStates.Checked, ts);
            machine.Push(TestActions.Check);
            Assert.AreEqual(TestStates.DoubleChecked, ts);
        }
示例#3
0
        public void TryPush()
        {
            var builder = new CodeStateMachineBuilder <TestStates, TestActions>();

            builder
            .StartWith(TestStates.Default)
            .Move(TestStates.Default, TestActions.Save, TestStates.Draft)
            .Move(TestStates.Draft, TestActions.Check, TestStates.Checked)
            .Move(TestStates.Draft, TestActions.Delete, TestStates.Deleted)
            .Move(TestStates.Checked, TestActions.Check, TestStates.DoubleChecked)
            .Move(TestStates.Checked, TestActions.Recall, TestStates.Recalled)
            .Move(TestStates.DoubleChecked, TestActions.Recall, TestStates.Recalled)
            ;
            var machine = builder.Build();

            Assert.IsFalse(machine.TryPush(TestActions.Check));
            Assert.IsTrue(machine.TryPush(TestActions.Save));
        }
        public void TestGetListener()
        {
            var builder = new CodeStateMachineBuilder <TestStates, TestActions>();

            builder.StartWith(TestStates.Default)
            .From(TestStates.Default)
            .When(TestActions.Save).To(TestStates.Draft)
            .From(TestStates.Draft)
            .When(TestActions.Check).To(TestStates.Checked)
            .When(TestActions.Delete).To(TestStates.Deleted)
            .From(TestStates.Checked)
            .When(TestActions.Check).To(TestStates.DoubleChecked)
            .When(TestActions.Recall).To(TestStates.Recalled);
            var machine = builder.Build();
            int i       = 0;

            machine.GetStateListener(TestStates.Draft).Entered
                += (sender, e) =>
                {
                i++;
                };
            machine.Push(TestActions.Save);
            Assert.AreEqual(1, i);
        }