public void Act_ShouldAttemptToClaimEachCellForWin()
        {
            //Arrange
            FakeCell fakeCell = new FakeCell.Builder().Build();
            FakeEnumerator <ICell> fakeEnumerator = new FakeEnumerator <ICell> .Builder()
                                                    .MoveNext(true, true, true, true, true, false)
                                                    .Current(fakeCell)
                                                    .Build();

            FakeCellCollection fakeCellCollection = new FakeCellCollection.Builder()
                                                    .GetEnumerator(fakeEnumerator)
                                                    .Build();
            FakeBoard fakeBoardClone = new FakeBoard.Builder()
                                       .ClaimEndsGame(Bool.False)
                                       .Build();
            FakeBoard fakeBoard = new FakeBoard.Builder()
                                  .AvailableSpaces(fakeCellCollection)
                                  .Clone(fakeBoardClone)
                                  .Build();
            FakeSelectMoveAction          fakeSelectMoveAction = new FakeSelectMoveAction.Builder().Act(null).Build();
            PlayerWinningSelectMoveAction subject = new AbstractWrapper(fakeSelectMoveAction);

            //Act
            subject.Act(fakeBoard, null, null);

            //Assert
            fakeSelectMoveAction.AssertActInvoked();
            fakeBoard.CloneInvokedCount(5);
            fakeBoardClone.AssertClaimEndsGameInvokedCount(5);
        }
        public void Act_ShouldSelectOtherPlayer()
        {
            //Arrange
            FakeCell fakeCell = new FakeCell.Builder().Build();
            FakeEnumerator <ICell> fakeEnumerator = new FakeEnumerator <ICell> .Builder()
                                                    .MoveNext(true)
                                                    .Current(fakeCell)
                                                    .Build();

            FakeCellCollection fakeCellCollection = new FakeCellCollection.Builder()
                                                    .GetEnumerator(fakeEnumerator)
                                                    .Build();
            FakeBoard fakeBoardClone = new FakeBoard.Builder()
                                       .ClaimEndsGame(Bool.True)
                                       .Build();
            FakeBoard fakeBoard = new FakeBoard.Builder()
                                  .AvailableSpaces(fakeCellCollection)
                                  .Clone(fakeBoardClone)
                                  .Build();
            FakePlayer           fakePlayer            = new FakePlayer.Builder().Build();
            FakeSelectMoveAction fakeSelectMoveAction  = new FakeSelectMoveAction.Builder().Act(null).Build();
            OtherPlayerWinningSelectMoveAction subject = new OtherPlayerWinningSelectMoveAction(fakeSelectMoveAction);

            //Act
            subject.Act(fakeBoard, null, fakePlayer);

            //Assert
            fakeBoardClone.AssertClaimEndsGameInvokedWith(fakeCell, fakePlayer);
        }
        public void ShouldPrintBoard()
        {
            //Arrange
            FakeWriter          fakeWriter = new FakeWriter();
            ConsoleGameStarting subject    = new ConsoleGameStarting(fakeWriter);
            FakeBoard           fakeBoard  = new FakeBoard.Builder().Print().Build();

            //Act
            subject.DisplayInitialBoard(fakeBoard);

            //Assert
            fakeBoard.AssertPrintInvoked();
        }
Esempio n. 4
0
        public void ShouldReturnTrueGivenNotHasWinner()
        {
            //Arrange
            FakePlayerEndsGameAction       fakePlayerEndsGameAction = new FakePlayerEndsGameAction.Builder().Build();
            NoWinGuardPlayerEndsGameAction subject = new NoWinGuardPlayerEndsGameAction(fakePlayerEndsGameAction);
            FakeGameState fakeGameState            = new FakeGameState.Builder().HasWinner(Bool.False).Build();
            FakeBoard     fakeBoard = new FakeBoard.Builder().GameState(fakeGameState).Build();
            //Act
            bool actual = subject.Act(fakeBoard, null, null);

            //Assert
            actual.Should().BeFalse();
        }
Esempio n. 5
0
        public void ShouldReturnFalseGivenGameOver()
        {
            //Arrange
            FakePlayerEndsGameAction          fakePlayerEndsGameAction = new FakePlayerEndsGameAction.Builder().Build();
            GameOverGuardPlayerEndsGameAction subject = new GameOverGuardPlayerEndsGameAction(fakePlayerEndsGameAction);
            FakeGameState fakeGameState = new FakeGameState.Builder().IsGameOver(Bool.True).Build();
            FakeBoard     fakeBoard     = new FakeBoard.Builder().GameState(fakeGameState).Build();
            //Act
            bool actual = subject.Act(fakeBoard, null, null);

            //Assert
            actual.Should().BeFalse();
        }
Esempio n. 6
0
        public void ShouldReturnTieStatus()
        {
            //Arrange
            Bool          expected      = Bool.True;
            FakeGameState fakeGameState = new FakeGameState.Builder().IsTie(expected).Build();
            FakeBoard     fakeBoard     = new FakeBoard.Builder().GameState(fakeGameState).Build();
            TieEndsGame   subject       = new TieEndsGame(fakeBoard);

            //Act
            bool actual = subject;

            //Assert
            actual.Should().BeTrue();
        }
        public void Act_ShouldReturnExpectedCellWhenCenterAvailable()
        {
            //Arrange
            FakeCell                     expectedCell         = new FakeCell.Builder().Value("4").Build();
            FakeSelectMoveAction         fakeSelectMoveAction = new FakeSelectMoveAction.Builder().Build();
            FakeBoard                    fakeBoard            = new FakeBoard.Builder().Available(Bool.True).Build();
            CenterSquareSelectMoveAction subject = new CenterSquareSelectMoveAction(fakeSelectMoveAction);

            //Act
            ICell cell = subject.Act(fakeBoard, null, null);

            //Assert
            cell.Value().Should().Be(expectedCell.Value());
        }
        public void ShouldReturnResultGivenHasWinner()
        {
            //Arrange
            FakePlayerEndsGameAction       fakePlayerEndsGameAction = new FakePlayerEndsGameAction.Builder().Act(Bool.True).Build();
            PrintBoardPlayerEndsGameAction subject = new PrintBoardPlayerEndsGameAction(fakePlayerEndsGameAction);
            FakeBoard fakeBoard = new FakeBoard.Builder().Print().Build();

            //Act
            bool actual = subject.Act(fakeBoard, null, null);

            //Assert
            actual.Should().BeTrue();
            fakeBoard.AssertPrintInvoked();
            fakePlayerEndsGameAction.AssertActInvoked();
        }
        public void Act_ShouldCallActWhenCenterNotAvailable()
        {
            //Arrange
            FakeCell                     expectedCell         = new FakeCell.Builder().Build();
            FakeSelectMoveAction         fakeSelectMoveAction = new FakeSelectMoveAction.Builder().Act(expectedCell).Build();
            FakeBoard                    fakeBoard            = new FakeBoard.Builder().Available(Bool.False).Build();
            FakePlayer                   fakePlayerA          = new FakePlayer.Builder().Build();
            FakePlayer                   fakePlayerB          = new FakePlayer.Builder().Build();
            CenterSquareSelectMoveAction subject = new CenterSquareSelectMoveAction(fakeSelectMoveAction);

            //Act
            subject.Act(fakeBoard, fakePlayerA, fakePlayerB);

            //Assert
            fakeSelectMoveAction.AssertActInvokedWith(new Tuple <IBoard, IPlayer, IPlayer>(fakeBoard, fakePlayerA, fakePlayerB));
        }
Esempio n. 10
0
        public void ShouldReturnPlayersTurns()
        {
            //Arrange
            FakePlayer                 fakePlayer         = new FakePlayer.Builder().Build();
            FakePlayerCreation         fakePlayerCreation = new FakePlayerCreation.Builder().Player(fakePlayer).Build();
            FakeBoard                  fakeBoard          = new FakeBoard.Builder().Build();
            ComputerVsComputerGameMode subject            = new ComputerVsComputerGameMode(fakePlayerCreation);

            //Act
            IPlayersTurns actual = subject.ConfigurePlayers(fakeBoard);

            //Assert
            actual.Should().BeOfType <PlayersTurns>();
            fakePlayerCreation.PlayerInvokedWith("O");
            fakePlayerCreation.PlayerInvokedWith("X");
        }
Esempio n. 11
0
        public void TakeActionEnds_ShouldIndicateGameEnds()
        {
            //Arrange
            FakeBoard fakeBoard = new FakeBoard.Builder()
                                  .ClaimEndsGame(Bool.True)
                                  .Build();
            FakeCell             fakeCell             = new FakeCell.Builder().Build();
            FakeSelectMoveAction fakeSelectMoveAction = new FakeSelectMoveAction.Builder().Act(fakeCell).Build();
            TestPlayer           subject = new TestPlayer(fakeSelectMoveAction);

            //Act
            subject.TakeAction(fakeBoard, null);

            //Assert
            fakeBoard.AssertClaimEndsGameInvoked();
        }
Esempio n. 12
0
        public void ShouldRunTheLoopMultipleTimes()
        {
            //Arrange
            FakeBoard             fakeBoard             = new FakeBoard.Builder().Build();
            FakePlayersTurns      fakePlayersTurns      = new FakePlayersTurns.Builder().GameOver(Bool.False, Bool.False, Bool.False, Bool.True).Build();
            FakeGameMode          fakeGameMode          = new FakeGameMode.Builder().ConfigurePlayers(fakePlayersTurns).Build();
            FakeGameModeSelection fakeGameModeSelection = new FakeGameModeSelection.Builder().Select(fakeGameMode).Build();
            FakeGameStarting      fakeGameStarting      = new FakeGameStarting.Builder().DisplayWelcome().DisplayInitialBoard().Build();
            FakeGameEnding        fakeGameEnding        = new FakeGameEnding.Builder().Display().Build();
            TicTacToeGame         subject = new TicTacToeGame(fakeBoard, fakeGameModeSelection, fakeGameStarting, fakeGameEnding);

            //Act
            subject.Run();

            //Assert
            fakePlayersTurns.AssertGameOverInvokedCountMatches(4);
        }
        public void Act_ShouldReturnAvailableCell()
        {
            //Arrange
            FakeCell  expected  = new FakeCell.Builder().Value("1").Build();
            FakeBoard fakeBoard = new FakeBoard.Builder()
                                  .Available(Bool.False, Bool.False, Bool.False, Bool.True).Build();
            FakeCell              fakeCell        = new FakeCell.Builder().Build();
            FakePlayer            fakePlayer      = new FakePlayer.Builder().Cell(fakeCell).Build();
            FakePlayer            fakePlayerOther = new FakePlayer.Builder().Build();
            FakeMoveInput         fakeMoveInput   = new FakeMoveInput.Builder().Input(new Glyph('1')).Build();
            HumanSelectMoveAction subject         = new HumanSelectMoveAction(fakeMoveInput);

            //Act
            ICell actual = subject.Act(fakeBoard, fakePlayer, fakePlayerOther);

            //Assert
            actual.Value().Should().Be(expected.Value());
        }
Esempio n. 14
0
        public void ShouldReturnPlayersTurns()
        {
            //Arrange
            FakeCell             fakeCell           = new FakeCell.Builder().Value("?").Build();
            FakePlayer           fakePlayer         = new FakePlayer.Builder().Cell(fakeCell).Build();
            FakePlayer           fakePlayer2        = new FakePlayer.Builder().Build();
            FakePlayerCreation   fakePlayerCreation = new FakePlayerCreation.Builder().Player(fakePlayer, fakePlayer2).Build();
            FakeBoard            fakeBoard          = new FakeBoard.Builder().Build();
            HumanVsHumanGameMode subject            = new HumanVsHumanGameMode(fakePlayerCreation, fakePlayerCreation);

            //Act
            IPlayersTurns actual = subject.ConfigurePlayers(fakeBoard);

            //Assert
            actual.Should().BeOfType <PlayersTurns>();
            fakePlayerCreation.PlayerInvokedWith("");
            fakePlayerCreation.PlayerInvokedWith("?");
        }
Esempio n. 15
0
        public void ShouldReturnPlayersTurnsComputerAsX()
        {
            //Arrange
            FakeCell   fakeCell           = new FakeCell.Builder().Value("O").Build();
            FakePlayer fakePlayer         = new FakePlayer.Builder().Cell(fakeCell).Build();
            FakePlayer fakePlayerComputer = new FakePlayer.Builder().Build();
            FakeValidResponse <IPlayerOrder> fakeValidResponse = new FakeValidResponse <IPlayerOrder> .Builder().Response(new HumanFirstOrder()).Build();

            FakePlayerCreation      fakePlayerCreation = new FakePlayerCreation.Builder().Player(fakePlayer, fakePlayerComputer).Build();
            FakeBoard               fakeBoard          = new FakeBoard.Builder().Build();
            HumanVsComputerGameMode subject            = new HumanVsComputerGameMode(fakeValidResponse, fakePlayerCreation, fakePlayerCreation);

            //Act
            IPlayersTurns actual = subject.ConfigurePlayers(fakeBoard);

            //Assert
            actual.Should().BeOfType <PlayersTurns>();
            fakePlayerCreation.PlayerInvokedWith("");
            fakePlayerCreation.PlayerInvokedWith("X");
        }
Esempio n. 16
0
        public void Act_ShouldSelectRandomSpace()
        {
            //Arrange
            Int                expectedMax        = new IntOf(57);
            FakeCell           fakeCell           = new FakeCell.Builder().Build();
            FakeCellCollection fakeCellCollection = new FakeCellCollection.Builder()
                                                    .Count(expectedMax)
                                                    .At(fakeCell)
                                                    .Build();
            FakeBoard fakeBoard = new FakeBoard.Builder()
                                  .AvailableSpaces(fakeCellCollection)
                                  .Build();
            RandomSpaceSelectMoveAction subject = new RandomSpaceSelectMoveAction();

            //Act
            ICell actual = subject.Act(fakeBoard, null, null);

            //Assert
            actual.Should().BeOfType <RandomCell>();
        }
        public void Act_ShouldInvokeActWhenNoSpacesAvailable()
        {
            //Arrange
            FakeEnumerator <ICell> fakeEnumerator = new FakeEnumerator <ICell> .Builder()
                                                    .MoveNext(false)
                                                    .Build();

            FakeCellCollection fakeCellCollection = new FakeCellCollection.Builder()
                                                    .GetEnumerator(fakeEnumerator)
                                                    .Build();
            FakeBoard                     fakeBoard            = new FakeBoard.Builder().AvailableSpaces(fakeCellCollection).Build();
            FakeSelectMoveAction          fakeSelectMoveAction = new FakeSelectMoveAction.Builder().Act(null).Build();
            PlayerWinningSelectMoveAction subject = new AbstractWrapper(fakeSelectMoveAction);

            //Act
            subject.Act(fakeBoard, null, null);

            //Assert
            fakeSelectMoveAction.AssertActInvoked();
        }