public void TestCallbacks() { List<string> messages = new List<string>(); StateMachine<TestNum> machine = new StateMachine<TestNum>(); machine.AddState(TestNum.Red); machine.SubscribeToEntry(TestNum.Red, (TestNum oldState, TestNum newState) => { messages.Add("Enter the red!"); }); machine.SubscribeToExit(TestNum.Red, (TestNum oldState, TestNum newState) => { messages.Add("Exit the red!"); }); machine.AddState(TestNum.White); machine.SubscribeToEntry(TestNum.White, (TestNum oldState, TestNum newState) => { messages.Add("Enter the white!"); }); machine.SubscribeToExit(TestNum.White, (TestNum oldState, TestNum newState) => { messages.Add("Exit the white!"); }); machine.SubscribeToExit(TestNum.White, (TestNum oldState, TestNum newState) => { messages.Add("Sneaky Second Message!"); }); machine.ChangeState(TestNum.Red); machine.ChangeState(TestNum.White); machine.ChangeState(TestNum.Red); Assert.AreEqual(6, messages.Count); Assert.AreEqual("Enter the red!", messages[0]); Assert.AreEqual("Exit the red!", messages[1]); Assert.AreEqual("Enter the white!", messages[2]); Assert.AreEqual("Exit the white!", messages[3]); Assert.AreEqual("Sneaky Second Message!", messages[4]); Assert.AreEqual("Enter the red!", messages[5]); }