Ejemplo n.º 1
0
        public void CancellationTokenCancelsOperation()
        {
            var sm = new StateMachine("sm");
            var initial = sm.CreateInitialState("initial");
            var doingOperation = sm.CreateState("doingOperation");
            var completedOperation = sm.CreateState("completedOperation");
            var evt = new Event("evt");

            initial.TransitionOn(evt).To(doingOperation);
            doingOperation.TransitionOn(evt).To(completedOperation);

            var cts = new CancellationTokenSource();

            var op = new Operation<State>(evt, doingOperation, completedOperation);

            var task = op.TryFireAsync(cts.Token);

            Assert.False(task.IsCompleted);
            Assert.False(task.IsCanceled);

            cts.Cancel();

            Assert.True(task.IsCanceled);

            // Check nothing explodes
            evt.Fire();
        }
Ejemplo n.º 2
0
        public void OperationCompletesWhenASuccessStateIsReached()
        {
            var sm = new StateMachine("sm");
            var initial = sm.CreateInitialState("initial");
            var doingOperation = sm.CreateState("doingOperation");
            var completedOperation = sm.CreateState("completedOperation");
            var evt = new Event("evt");

            initial.TransitionOn(evt).To(doingOperation);
            doingOperation.TransitionOn(evt).To(completedOperation);

            var op = new Operation<State>(evt, doingOperation, completedOperation);

            var task = op.TryFireAsync();

            Assert.False(task.IsCompleted);
            Assert.AreEqual(doingOperation, sm.CurrentState);

            evt.TryFire();

            Assert.True(task.IsCompleted);
            Assert.True(task.Result);
        }
Ejemplo n.º 3
0
        public void OperationFailsIfANonSuccessStateIsReached()
        {
            var sm = new StateMachine("sm");
            var initial = sm.CreateInitialState("initial");
            var doingOperation = sm.CreateState("doingOperation");
            var completedOperation = sm.CreateState("completedOperation");
            var operationFailed = sm.CreateState("operationFailed");
            var evt = new Event("evt");

            initial.TransitionOn(evt).To(doingOperation);
            doingOperation.TransitionOn(evt).To(operationFailed);

            var op = new Operation<State>(evt, doingOperation, completedOperation);

            var task = op.TryFireAsync();

            Assert.False(task.IsCompleted);
            Assert.AreEqual(doingOperation, sm.CurrentState);

            evt.TryFire();

            Assert.True(task.IsFaulted);
            var e = Assert.Throws<OperationFailedException>(() => task.GetAwaiter().GetResult());
            Assert.AreEqual(doingOperation, e.OperationStates[0]);
            Assert.AreEqual(operationFailed, e.ActualState);
            Assert.That(e.SuccessStates, Is.EquivalentTo(new[] { completedOperation }));
        }
Ejemplo n.º 4
0
        public void TryFireReturnsFalseIfEventTryFireReturnedFalse()
        {
            var sm = new StateMachine("sm");
            var initial = sm.CreateInitialState("initial");
            var operation = sm.CreateState("state2");
            var success = sm.CreateState("success");
            var evt = new Event("evt");

            operation.TransitionOn(evt).To(operation);

            var op = new Operation<State>(evt, operation, success);

            var task = op.TryFireAsync();

            Assert.True(task.IsCompleted);
            Assert.False(task.Result);
        }