public void StateTransitionRule_WhenInvalid_ReturnsFalse()
        {
            // ARRANGE
            GameStateTransition nullToIntro       = new GameStateTransition(GameState.NullState, GameState.Intro);
            GameStateTransition introToMainMenu   = new GameStateTransition(GameState.Intro, GameState.MainMenu);
            GameStateTransition mainMenuToNewGame = new GameStateTransition(GameState.MainMenu, GameState.NewGame);
            GameStateTransition actualTransition  = new GameStateTransition(GameState.NullState, GameState.MainMenu);

            // ACT
            var transitionNullToIntro       = new StateTransitionRule(nullToIntro);
            var transitionIntroToMainMenu   = new StateTransitionRule(introToMainMenu);
            var transitionMainMenuToNewGame = new StateTransitionRule(mainMenuToNewGame);

            // Create the rule engine and add the rules
            var stateTransitionRuleEngine = new RuleEngine <GameStateTransition>();

            stateTransitionRuleEngine.ActualValue = actualTransition;

            stateTransitionRuleEngine.Add(transitionNullToIntro);
            stateTransitionRuleEngine.Add(transitionIntroToMainMenu);
            stateTransitionRuleEngine.Add(transitionMainMenuToNewGame);

            // Get the result
            var result = stateTransitionRuleEngine.MatchAny();

            // ASSERT
            Assert.IsFalse(result);
        }
        public void StateTransitionRule_WhenValid_ReturnsTrue()
        {
            // ARRANGE
            GameStateTransition nullToIntro = new GameStateTransition(GameState.NullState, GameState.Intro);
            GameStateTransition introToMainMenu = new GameStateTransition(GameState.Intro, GameState.MainMenu);
            GameStateTransition mainMenuToNewGame = new GameStateTransition(GameState.MainMenu, GameState.NewGame);
            GameStateTransition actualTransition = new GameStateTransition(GameState.Intro, GameState.MainMenu);

            // ACT
            var transitionNullToIntro = new StateTransitionRule(nullToIntro);
            var transitionIntroToMainMenu = new StateTransitionRule(introToMainMenu);
            var transitionMainMenuToNewGame = new StateTransitionRule(mainMenuToNewGame);

            // Create the rule engine and add the rules
            var stateTransitionRuleEngine = new RuleEngine<GameStateTransition>();
            stateTransitionRuleEngine.ActualValue = actualTransition;

            stateTransitionRuleEngine.Add(transitionNullToIntro);
            stateTransitionRuleEngine.Add(transitionIntroToMainMenu);
            stateTransitionRuleEngine.Add(transitionMainMenuToNewGame);

            // Get the result
            var result = stateTransitionRuleEngine.MatchAny();

            // ASSERT
            Assert.IsTrue(result);
        }