public void When_behave_Running_then_completes_until_running_behaviour()
        {
            _calledAndSuccessTimes = 0;
            var seq = new ExclusiveSequence(
                new BehaviourAction(CalledAndSuccess),
                new BehaviourAction(CalledAndRunning),
                new BehaviourAction(CalledAndSuccess));

            var returnCode = seq.Behave();

            Assert.AreEqual(1, _calledAndSuccessTimes);
            Assert.AreEqual(BehaviourReturnCode.Running, returnCode);
        }
        public void When_running_Then_re_evaluate_and_complete_with_many_behave_calls()
        {
            var sequence = new ExclusiveSequence(
                new BehaviourAction(CalledAndSuccess),
                new BehaviourAction(new TestHelper().RunningTwiceThenSuccess)
                );

            Assert.AreEqual(BehaviourReturnCode.Running, sequence.Behave());
            Assert.AreEqual(BehaviourReturnCode.Running, sequence.Behave());
            Assert.AreEqual(BehaviourReturnCode.Running, sequence.Behave());
            Assert.AreEqual(BehaviourReturnCode.Success, sequence.Behave());

            Assert.AreEqual(4, _calledAndSuccessTimes);
        }
 public void When_behave_running_takes_up_re_evaluating_prev_conditions()
 {
     var called = 0;
     var exclusive = new ExclusiveSequence(new Conditional(() =>
                             {
                                 called++;
                                 return true;
                             }),
                             TestHelper.CreateRunningAction(),
                             TestHelper.CreateRunningAction(),
                             TestHelper.CreateSuccessAction()
                             );
     exclusive.Behave();
     exclusive.Behave();
     Assert.AreEqual(2, called);
 }