Exemplo n.º 1
0
        public void MakeMove_GivenAValidTakingMove_RaisesPieceTakenEvent()
        {
            PieceTakenEventArgs pieceTakenEventArgs = null;
            var chessBoard = new ChessBoard();
            var blackKnight = new Knight(Colour.Black);
            var whitePawn = new Pawn(Colour.White);
            var boardPosition1 = new BoardPosition("A1");
            var boardPosition2 = new BoardPosition("B3");
            chessBoard.SetInitialPosition(boardPosition1, blackKnight);
            chessBoard.SetInitialPosition(boardPosition2, whitePawn);

            chessBoard.PieceTaken += (sender, e) =>
            {
                pieceTakenEventArgs = e;
            };

            chessBoard.MakeMove(boardPosition1, boardPosition2);

            Assert.That(pieceTakenEventArgs, Is.Not.Null);
            Assert.That(pieceTakenEventArgs.PieceTaken, Is.Not.Null);
            Assert.That(pieceTakenEventArgs.PieceTaken, Is.InstanceOf<Pawn>());
            Assert.That(pieceTakenEventArgs.PieceTaken.Colour, Is.EqualTo(Colour.White));
            Assert.That(pieceTakenEventArgs.Square, Is.Not.Null);
            Assert.That(pieceTakenEventArgs.Square.ChessPiece, Is.Not.Null);
            Assert.That(pieceTakenEventArgs.Square.ChessPiece, Is.InstanceOf<Knight>());
            Assert.That(pieceTakenEventArgs.Square.ChessPiece.Colour, Is.EqualTo(Colour.Black));
        }
Exemplo n.º 2
0
 public void IHaveAWhitePawnAt(string boardPosition)
 {
     var chessBoard = ScenarioContextUtils.GetChessBoard();
     var whitePawn = new Pawn(Colour.White);
     chessBoard.SetInitialPosition(new BoardPosition(boardPosition), whitePawn);
     ScenarioContextUtils.SetWhitePawn(whitePawn);
 }
Exemplo n.º 3
0
        public void ValidateMove_PawnDiagonalCaptureLeftOfBlackPiece_ReturnsValid()
        {
            var from = "C2";
            var to = "B3";

            var chessBoardStub = MockRepository.GenerateStub<ChessBoard>();
            chessBoardStub.Stub(stub => stub.GetSquare(to)).Return(SquareWithBlackKnight);

            var whitePawn = new Pawn(Colour.White);
            ExceptionReasonDetail exceptionReasonDetail;
            MoveResult moveResult = whitePawn.ValidateMove(chessBoardStub, from, to, out exceptionReasonDetail);

            Assert.That(moveResult, Is.EqualTo(MoveResult.Valid));
            Assert.That(exceptionReasonDetail, Is.EqualTo(ExceptionReasonDetail.None));
        }
Exemplo n.º 4
0
        public void ValidateMove_PawnDiagonalCaptureLeftOfWhitePiece_ReturnsIllegal()
        {
            var from = "C2";
            var to = "B3";

            var chessBoardStub = MockRepository.GenerateStub<ChessBoard>();
            chessBoardStub.Stub(stub => stub.GetSquare(to)).Return(SquareWithWhitePawn);

            var whitePawn = new Pawn(Colour.White);

            ExceptionReasonDetail exceptionReasonDetail;
            MoveResult moveResult = whitePawn.ValidateMove(chessBoardStub, from, to, out exceptionReasonDetail);

            Assert.That(moveResult, Is.EqualTo(MoveResult.Illegal));
            Assert.That(exceptionReasonDetail, Is.EqualTo(ExceptionReasonDetail.PawnCannotMoveDiagonallyUnlessCapturing));
        }
Exemplo n.º 5
0
        public void ValidateMove_PawnBackward1Square_ReturnsIllegal()
        {
            var from = "C3";
            var to = "C2";

            var chessBoardStub = MockRepository.GenerateStub<ChessBoard>();
            chessBoardStub.Stub(stub => stub.GetSquare(to)).Return(EmptySquare);

            var whitePawn = new Pawn(Colour.White);

            ExceptionReasonDetail exceptionReasonDetail;
            MoveResult moveResult = whitePawn.ValidateMove(chessBoardStub, from, to, out exceptionReasonDetail);

            Assert.That(moveResult, Is.EqualTo(MoveResult.Illegal));
            Assert.That(exceptionReasonDetail, Is.EqualTo(ExceptionReasonDetail.None));
        }
Exemplo n.º 6
0
        public void MakeMove_GivenAnInvalidTakingMove_ThrowsException()
        {
            var chessBoard = new ChessBoard();
            var blackKnight = new Knight(Colour.Black);
            var blackPawn = new Pawn(Colour.Black);
            var boardPosition1 = new BoardPosition("A1");
            var boardPosition2 = new BoardPosition("B3");
            chessBoard.SetInitialPosition(boardPosition1, blackKnight);
            chessBoard.SetInitialPosition(boardPosition2, blackPawn);

            try {
                chessBoard.MakeMove(boardPosition1, boardPosition2);
                Assert.Fail("Expected a ChessBoardException to be thrown!");
            }
            catch (ChessBoardException ex) {
                Assert.That(ex.ExceptionReason, Is.EqualTo(ExceptionReason.IllegalMove));
            }
        }
Exemplo n.º 7
0
        public void MakeMove_GivenAValidTakingMove_RaisesGameOverEvent()
        {
            GameOverEventArgs gameOverEventArgs = null;
            var chessBoard = new ChessBoard();
            var blackKnight = new Knight(Colour.Black);
            var whitePawn = new Pawn(Colour.White);
            var boardPosition1 = new BoardPosition("A1");
            var boardPosition2 = new BoardPosition("B3");
            chessBoard.SetInitialPosition(boardPosition1, blackKnight);
            chessBoard.SetInitialPosition(boardPosition2, whitePawn);

            chessBoard.GameOver += (sender, e) =>
            {
                gameOverEventArgs = e;
            };

            chessBoard.MakeMove(boardPosition1, boardPosition2);

            Assert.That(gameOverEventArgs, Is.Not.Null);
            Assert.That(gameOverEventArgs.Result, Is.EqualTo(GameResult.BlackWin));
        }
Exemplo n.º 8
0
        public void ValidateMove_PawnForward2SquaresRound1OnHomeRank_ReturnsValid()
        {
            var from = "C2";
            var inbetween = "C3";
            var to = "C4";

            var chessBoardStub = MockRepository.GenerateStub<ChessBoard>();
            chessBoardStub.Round = 1;
            chessBoardStub.Stub(stub => stub.GetSquare(inbetween)).Return(EmptySquare);
            chessBoardStub.Stub(stub => stub.GetSquare(to)).Return(EmptySquare);

            var whitePawn = new Pawn(Colour.White);

            ExceptionReasonDetail exceptionReasonDetail;
            MoveResult moveResult = whitePawn.ValidateMove(chessBoardStub, from, to, out exceptionReasonDetail);

            Assert.That(moveResult, Is.EqualTo(MoveResult.Valid));
            Assert.That(exceptionReasonDetail, Is.EqualTo(ExceptionReasonDetail.None));
        }
Exemplo n.º 9
0
        public void ValidateMove_PawnForward2SquaresNotRound1_ReturnsIllegal()
        {
            var from = "C2";
            var inbetween = "C3";
            var to = "C4";

            var chessBoardStub = MockRepository.GenerateStub<ChessBoard>();
            chessBoardStub.Round = 2;
            chessBoardStub.Stub(stub => stub.GetSquare(inbetween)).Return(EmptySquare);
            chessBoardStub.Stub(stub => stub.GetSquare(to)).Return(EmptySquare);

            var whitePawn = new Pawn(Colour.White);

            ExceptionReasonDetail exceptionReasonDetail;
            MoveResult moveResult = whitePawn.ValidateMove(chessBoardStub, from, to, out exceptionReasonDetail);

            Assert.That(moveResult, Is.EqualTo(MoveResult.Illegal));
            Assert.That(exceptionReasonDetail, Is.EqualTo(ExceptionReasonDetail.PawnCannotMoveTwoSpacesAtThisTime));
        }
Exemplo n.º 10
0
        public void ValidateMove_PawnForward1SquareBlocked_ReturnsCollision()
        {
            var from = "C3";
            var to = "C4";

            var chessBoardStub = MockRepository.GenerateStub<ChessBoard>();
            chessBoardStub.Stub(stub => stub.GetSquare(to)).Return(SquareWithBlackKnight);

            var whitePawn = new Pawn(Colour.White);

            ExceptionReasonDetail exceptionReasonDetail;
            MoveResult moveResult = whitePawn.ValidateMove(chessBoardStub, from, to, out exceptionReasonDetail);

            Assert.That(moveResult, Is.EqualTo(MoveResult.Collision));
            Assert.That(exceptionReasonDetail, Is.EqualTo(ExceptionReasonDetail.None));
        }
 public static void SetWhitePawn(Pawn whitePawn)
 {
     ScenarioContext.Current[WHITE_PAWN_KEY] = whitePawn;
 }