public void PerformEnPassantIfApplicable_WhiteEnPassantTest()
        {
            var movementHistory = new Mock <IMovementHistory>(MockBehavior.Strict);
            var whitePawnMock   = new Mock <IChessPiece>(MockBehavior.Strict);
            var blackPawnMock   = new Mock <IChessPiece>(MockBehavior.Strict);

            var whitePawnPosition         = new Position(4, 4);
            var blackPawnPosition         = new Position(5, 4);
            var blackPawnPreviousPosition = new Position(5, 6);
            var whitePawnCapturePosition  = new Position(5, 5);
            var chessMove = new ChessMove(whitePawnPosition, whitePawnCapturePosition);

            whitePawnMock
            .SetupGet(p => p.Position)
            .Returns(whitePawnPosition);
            whitePawnMock
            .SetupGet(p => p.Color)
            .Returns(ChessColor.White);
            whitePawnMock
            .SetupGet(p => p.PieceType)
            .Returns(ChessPieceType.Pawn);
            whitePawnMock
            .SetupSet(p => p.Position = whitePawnCapturePosition);
            whitePawnMock
            .Setup(p => p.IncrementMoveCounter());

            blackPawnMock
            .SetupGet(p => p.Position)
            .Returns(blackPawnPosition);
            blackPawnMock
            .SetupGet(p => p.Color)
            .Returns(ChessColor.Black);
            blackPawnMock
            .SetupGet(p => p.PieceType)
            .Returns(ChessPieceType.Pawn);

            var previousMoves = new List <ChessMove>()
            {
                new ChessMove(blackPawnPreviousPosition, blackPawnPosition)
            };

            movementHistory
            .Setup(h => h.Add(chessMove.ReturnWithCaptureAsTrue()));

            var pieces = new List <IChessPiece>()
            {
                whitePawnMock.Object, blackPawnMock.Object
            };

            var mover  = new EnPassantMover(movementHistory.Object);
            var result = mover.PerformEnPassantIfApplicable(chessMove, pieces);

            Assert.AreEqual(blackPawnMock.Object, result);
            whitePawnMock
            .VerifySet(p => p.Position = whitePawnCapturePosition);
            whitePawnMock
            .Verify(p => p.IncrementMoveCounter());
            movementHistory
            .Verify(h => h.Add(chessMove.ReturnWithCaptureAsTrue()));
        }
Beispiel #2
0
        public void WhenThereIsCapture_Move_ReturnsCapturedPiece_IncrementsMoveCounter_AndAddsMoveToMovmentHistory()
        {
            var movementHistory    = new Mock <IMovementHistory>(MockBehavior.Strict);
            var promoterMock       = new Mock <IPiecePromoter>(MockBehavior.Strict);
            var castlingMoverMock  = new Mock <ICastlingMover>(MockBehavior.Strict);
            var enPassantMoverMock = new Mock <IEnPassantMover>(MockBehavior.Strict);
            var movedPieceMock     = new Mock <IChessPiece>(MockBehavior.Strict);
            var otherPieceMock     = new Mock <IChessPiece>(MockBehavior.Strict);
            var capturedPieceMock  = new Mock <IChessPiece>(MockBehavior.Strict);

            var piecePosition = new Position(3, 1);
            var destination   = new Position(3, 3);
            var chessMove     = new ChessMove(piecePosition, destination);

            movedPieceMock
            .SetupGet(p => p.Position)
            .Returns(piecePosition);
            movedPieceMock
            .SetupSet(p => p.Position = destination);
            movedPieceMock
            .Setup(p => p.IncrementMoveCounter());

            otherPieceMock
            .SetupGet(p => p.Position)
            .Returns(new Position(1, 1));
            capturedPieceMock
            .SetupGet(p => p.Position)
            .Returns(destination);

            var pieces = new List <IChessPiece>()
            {
                movedPieceMock.Object,
                otherPieceMock.Object,
                capturedPieceMock.Object
            };

            promoterMock
            .Setup(p => p.PromoteIfPromotionMove(chessMove, pieces))
            .Returns(false);

            castlingMoverMock
            .Setup(c => c.PerformCastlingIfCastlingMove(chessMove, pieces))
            .Returns(false);

            enPassantMoverMock
            .Setup(e => e.PerformEnPassantIfApplicable(chessMove, pieces))
            .Returns <IChessPiece>(null);

            movementHistory
            .Setup(h => h.Add(chessMove.ReturnWithCaptureAsTrue()));

            var pieceMover = new PieceMover(movementHistory.Object, promoterMock.Object,
                                            castlingMoverMock.Object, enPassantMoverMock.Object);
            var result = pieceMover.Move(chessMove, pieces);

            Assert.AreEqual(capturedPieceMock.Object, result);
            movedPieceMock
            .VerifySet(p => p.Position = destination);
            movedPieceMock
            .Verify(p => p.IncrementMoveCounter());
            movementHistory
            .Verify(h => h.Add(chessMove.ReturnWithCaptureAsTrue()));
        }