From c2108869a4ef9c8875f8ec7a8e6793fc487211b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Ferreira=20de=20Souza?= Date: Wed, 15 Oct 2025 20:46:41 -0300 Subject: [PATCH 1/6] test(ui): update display unit tests --- .../rogeriofrsouza/app/ui/DisplayTest.java | 78 ++++++++++--------- 1 file changed, 42 insertions(+), 36 deletions(-) diff --git a/src/test/java/com/rogeriofrsouza/app/ui/DisplayTest.java b/src/test/java/com/rogeriofrsouza/app/ui/DisplayTest.java index 2e20c24..6395d7f 100644 --- a/src/test/java/com/rogeriofrsouza/app/ui/DisplayTest.java +++ b/src/test/java/com/rogeriofrsouza/app/ui/DisplayTest.java @@ -66,27 +66,30 @@ void clearScreen() { @DisplayName("should print the match information and status") void printMatch_notCheckNotCheckmate_logMatch() { ChessMatch chessMatch = new ChessMatch(); - Board board = chessMatch.getBoard(); + List captured = List.of( new Rook(board, ChessPiece.Color.WHITE), new Rook(board, ChessPiece.Color.WHITE), new Rook(board, ChessPiece.Color.BLACK), new Rook(board, ChessPiece.Color.BLACK)); + chessMatch.setCapturedPieces(captured); - String outputExpected = "Captured pieces%nBlack: %s%s%s%nWhite: %s%s%s%n".formatted( - YELLOW, - captured.subList(2, 4), - RESET, - WHITE, - captured.subList(0, 2), - RESET) + - "Turn: " + chessMatch.getTurn() + "\n" + - "Waiting player: " + chessMatch.getCurrentPlayer() + "\n"; + String string = """ + Captured pieces + Black: %s%s%s + White: %s%s%s + Turn: %d + Waiting player: %s%s%s + """.formatted( + YELLOW, captured.subList(2, 4), RESET, + WHITE, captured.subList(0, 2), RESET, + chessMatch.getTurn(), + WHITE, chessMatch.getCurrentPlayer().getLabel(), RESET); doNothing().when(display).printBoard(board); display.printMatch(chessMatch); - assertEquals(outputExpected, outputStream.toString()); + assertEquals(string, outputStream.toString()); } @Test @@ -98,25 +101,26 @@ void printMatch_isCheck_logMatchAndCheck() { chessMatch.setCurrentPlayer(ChessPiece.Color.BLACK); Board board = chessMatch.getBoard(); - List captured = List.of( - new Rook(board, ChessPiece.Color.WHITE), new Rook(board, ChessPiece.Color.WHITE)); + List captured = List.of(new Rook(board, ChessPiece.Color.WHITE), new Rook(board, ChessPiece.Color.WHITE)); chessMatch.setCapturedPieces(captured); - String outputExpected = "Captured pieces%nBlack: %s%s%s%nWhite: %s%s%s%n".formatted( - YELLOW, - List.of(), - RESET, - WHITE, - captured, - RESET) + - "Turn: " + chessMatch.getTurn() + "\n" + - "Waiting player: " + chessMatch.getCurrentPlayer() + "\n" + - "CHECK!\n"; + String string = """ + Captured pieces + Black: %s%s%s + White: %s%s%s + Turn: %d + Waiting player: %s%s%s + CHECK! + """.formatted( + YELLOW, List.of(), RESET, + WHITE, captured, RESET, + chessMatch.getTurn(), + YELLOW, chessMatch.getCurrentPlayer().getLabel(), RESET); doNothing().when(display).printBoard(board); display.printMatch(chessMatch); - assertEquals(outputExpected, outputStream.toString()); + assertEquals(string, outputStream.toString()); } @Test @@ -128,23 +132,25 @@ void printMatch_isCheckMate_logMatchAndCheckMate() { chessMatch.setCurrentPlayer(ChessPiece.Color.BLACK); Board board = chessMatch.getBoard(); - List captured = List.of( - new Rook(board, ChessPiece.Color.BLACK), new Rook(board, ChessPiece.Color.BLACK)); + List captured = List.of(new Rook(board, ChessPiece.Color.BLACK), new Rook(board, ChessPiece.Color.BLACK)); chessMatch.setCapturedPieces(captured); - String stringBuilder = "Captured pieces%nBlack: %s%s%s%nWhite: %s%s%s%n".formatted( - YELLOW, - captured, - RESET, - WHITE, - List.of(), - RESET) + - "Turn: " + chessMatch.getTurn() + "\n" + - "CHECKMATE!\nWinner: " + chessMatch.getCurrentPlayer() + "\n"; + String string = """ + Captured pieces + Black: %s%s%s + White: %s%s%s + Turn: %d + CHECKMATE! + Winner: %s%s%s + """.formatted( + YELLOW, captured, RESET, + WHITE, List.of(), RESET, + chessMatch.getTurn(), + YELLOW, chessMatch.getCurrentPlayer().getLabel(), RESET); doNothing().when(display).printBoard(board); display.printMatch(chessMatch); - assertEquals(stringBuilder, outputStream.toString()); + assertEquals(string, outputStream.toString()); } } From 970b1aa27092a00321baf1465222cc0d37131a21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Ferreira=20de=20Souza?= Date: Wed, 15 Oct 2025 20:53:04 -0300 Subject: [PATCH 2/6] refactor(chess): use Lombok getter --- .../com/rogeriofrsouza/app/chess/ChessPosition.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/rogeriofrsouza/app/chess/ChessPosition.java b/src/main/java/com/rogeriofrsouza/app/chess/ChessPosition.java index cbbf1ae..a807595 100644 --- a/src/main/java/com/rogeriofrsouza/app/chess/ChessPosition.java +++ b/src/main/java/com/rogeriofrsouza/app/chess/ChessPosition.java @@ -1,7 +1,9 @@ package com.rogeriofrsouza.app.chess; import com.rogeriofrsouza.app.boardgame.Position; +import lombok.Getter; +@Getter public class ChessPosition { private final char column; @@ -16,14 +18,6 @@ public ChessPosition(char column, int row) { this.row = row; } - public char getColumn() { - return column; - } - - public int getRow() { - return row; - } - // Não permitir que a coluna e a linha sejam livremente alteradas public Position toPosition() { From 8cba78a6cf1de4d3cdca14aa394ef09d37c30a3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Ferreira=20de=20Souza?= Date: Wed, 15 Oct 2025 20:53:55 -0300 Subject: [PATCH 3/6] refactor(chess): remove comments --- src/main/java/com/rogeriofrsouza/app/chess/ChessPosition.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/rogeriofrsouza/app/chess/ChessPosition.java b/src/main/java/com/rogeriofrsouza/app/chess/ChessPosition.java index a807595..aeb7d31 100644 --- a/src/main/java/com/rogeriofrsouza/app/chess/ChessPosition.java +++ b/src/main/java/com/rogeriofrsouza/app/chess/ChessPosition.java @@ -18,8 +18,6 @@ public ChessPosition(char column, int row) { this.row = row; } - // Não permitir que a coluna e a linha sejam livremente alteradas - public Position toPosition() { return new Position(8 - row, column - 'a'); } @@ -30,6 +28,6 @@ protected static ChessPosition fromPosition(Position position) { @Override public String toString() { - return "" + column + row; // Macete para forçar a concatenação + return "" + column + row; } } From 371efefb55c047ada43224a99148a8534cab148f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Ferreira=20de=20Souza?= Date: Wed, 15 Oct 2025 21:00:42 -0300 Subject: [PATCH 4/6] refactor(chess): move position conversion to chess position --- src/main/java/com/rogeriofrsouza/app/boardgame/Position.java | 5 +++++ src/main/java/com/rogeriofrsouza/app/chess/ChessPiece.java | 2 +- .../java/com/rogeriofrsouza/app/chess/ChessPosition.java | 4 ---- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/rogeriofrsouza/app/boardgame/Position.java b/src/main/java/com/rogeriofrsouza/app/boardgame/Position.java index 428a7c2..bd3c314 100644 --- a/src/main/java/com/rogeriofrsouza/app/boardgame/Position.java +++ b/src/main/java/com/rogeriofrsouza/app/boardgame/Position.java @@ -1,5 +1,6 @@ package com.rogeriofrsouza.app.boardgame; +import com.rogeriofrsouza.app.chess.ChessPosition; import lombok.AllArgsConstructor; import lombok.Data; @@ -14,4 +15,8 @@ public void setValues(int row, int column) { this.row = row; this.column = column; } + + public ChessPosition toChessPosition() { + return new ChessPosition((char) (column + 'a'), 8 - row); + } } diff --git a/src/main/java/com/rogeriofrsouza/app/chess/ChessPiece.java b/src/main/java/com/rogeriofrsouza/app/chess/ChessPiece.java index 9214c6a..aeadc21 100644 --- a/src/main/java/com/rogeriofrsouza/app/chess/ChessPiece.java +++ b/src/main/java/com/rogeriofrsouza/app/chess/ChessPiece.java @@ -37,7 +37,7 @@ protected ChessPiece( } public ChessPosition getChessPosition() { - return ChessPosition.fromPosition(position); + return position.toChessPosition(); } protected boolean isThereOpponentPiece(Position position) { diff --git a/src/main/java/com/rogeriofrsouza/app/chess/ChessPosition.java b/src/main/java/com/rogeriofrsouza/app/chess/ChessPosition.java index aeb7d31..0d58eff 100644 --- a/src/main/java/com/rogeriofrsouza/app/chess/ChessPosition.java +++ b/src/main/java/com/rogeriofrsouza/app/chess/ChessPosition.java @@ -22,10 +22,6 @@ public Position toPosition() { return new Position(8 - row, column - 'a'); } - protected static ChessPosition fromPosition(Position position) { - return new ChessPosition((char) (position.getColumn() + 'a'), 8 - position.getRow()); - } - @Override public String toString() { return "" + column + row; From 28193cf4c90ec4fe42d96ef516c70ff7cd5ca7a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Ferreira=20de=20Souza?= Date: Wed, 15 Oct 2025 21:03:45 -0300 Subject: [PATCH 5/6] refactor(chess): convert to record class --- .../rogeriofrsouza/app/chess/ChessPosition.java | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/rogeriofrsouza/app/chess/ChessPosition.java b/src/main/java/com/rogeriofrsouza/app/chess/ChessPosition.java index 0d58eff..47c8bfc 100644 --- a/src/main/java/com/rogeriofrsouza/app/chess/ChessPosition.java +++ b/src/main/java/com/rogeriofrsouza/app/chess/ChessPosition.java @@ -1,29 +1,16 @@ package com.rogeriofrsouza.app.chess; import com.rogeriofrsouza.app.boardgame.Position; -import lombok.Getter; -@Getter -public class ChessPosition { +public record ChessPosition(char column, int row) { - private final char column; - private final int row; - - public ChessPosition(char column, int row) { + public ChessPosition { if (column < 'a' || column > 'h' || row < 1 || row > 8) { throw new IllegalArgumentException("Invalid chess position. Should be a1 - h8"); } - - this.column = column; - this.row = row; } public Position toPosition() { return new Position(8 - row, column - 'a'); } - - @Override - public String toString() { - return "" + column + row; - } } From 9d37d3827ccdb288c227e26691da3730fdecc160 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Ferreira=20de=20Souza?= Date: Wed, 15 Oct 2025 21:58:26 -0300 Subject: [PATCH 6/6] feat(chess): reset possible moves after the chess movement --- src/main/java/com/rogeriofrsouza/app/chess/ChessMatch.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/rogeriofrsouza/app/chess/ChessMatch.java b/src/main/java/com/rogeriofrsouza/app/chess/ChessMatch.java index ded5a01..31f3835 100644 --- a/src/main/java/com/rogeriofrsouza/app/chess/ChessMatch.java +++ b/src/main/java/com/rogeriofrsouza/app/chess/ChessMatch.java @@ -95,6 +95,7 @@ public void performChessMove(ChessPosition sourcePosition, ChessPosition targetP } Piece capturedPiece = makeMove(source, target); + board.resetPossibleMoves(); if (testCheck(currentPlayer)) { undoMove(source, target, capturedPiece);