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())); }
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())); }