public async Task When_become_stacked() { Behavior behavior = new BehaviorTester(events) .Initial("Initial") .State("Initial") .State("A") .State("B") .State("C"); await behavior.BecomeStacked("A"); await behavior.BecomeStacked("B"); await behavior.BecomeStacked("C"); Assert.That(behavior.Current.Name, Is.EqualTo("C")); await behavior.Unbecome(); Assert.That(behavior.Current.Name, Is.EqualTo("B")); await behavior.Unbecome(); Assert.That(behavior.Current.Name, Is.EqualTo("A")); await behavior.Unbecome(); Assert.That(behavior.Current.Name, Is.EqualTo("Initial")); Assert.ThrowsAsync <InvalidOperationException>(() => behavior.Unbecome()); }
public async Task When_become_with_arguments() { string passedArg = null; Task <object> Receive(object message) { if (message is Become <string> m) { passedArg = m.Argument; } return(TaskResult.Done); }; Behavior behavior = new BehaviorTester(events) .State("A", Receive) .State("B", Receive) .Initial("A"); await behavior.Become("B", "arg1"); Assert.That(passedArg, Is.EqualTo("arg1")); await behavior.BecomeStacked("A", "arg2"); Assert.That(passedArg, Is.EqualTo("arg2")); }