From 271ff420a2f80c227e2d54a22b7c3ff97e51d4db Mon Sep 17 00:00:00 2001 From: Persson-dev Date: Sun, 4 May 2025 11:37:15 +0200 Subject: [PATCH] small refactor --- app/src/main/java/chess/ai/AI.java | 4 +- app/src/main/java/chess/model/Piece.java | 3 -- .../main/java/chess/model/pieces/Bishop.java | 9 ---- .../main/java/chess/model/pieces/King.java | 9 ---- .../main/java/chess/model/pieces/Knight.java | 8 --- .../main/java/chess/model/pieces/Pawn.java | 8 --- .../main/java/chess/model/pieces/Queen.java | 7 --- .../main/java/chess/model/pieces/Rook.java | 8 --- .../chess/model/visitor/KingIdentifier.java | 52 ------------------ .../main/java/chess/pgn/PgnFileSimulator.java | 14 +---- app/src/main/java/chess/pgn/PgnSimulator.java | 6 ++- .../java/chess/view/audio/AudioFiles.java | 2 +- .../chess/view/simplerender/PieceIcon.java | 2 +- .../{chess/view => common}/AssetManager.java | 11 +++- app/src/test/java/chess/PgnTest.java | 53 +++++++++++++++++-- 15 files changed, 69 insertions(+), 127 deletions(-) delete mode 100644 app/src/main/java/chess/model/visitor/KingIdentifier.java rename app/src/main/java/{chess/view => common}/AssetManager.java (69%) diff --git a/app/src/main/java/chess/ai/AI.java b/app/src/main/java/chess/ai/AI.java index c53709a..cbdafd0 100644 --- a/app/src/main/java/chess/ai/AI.java +++ b/app/src/main/java/chess/ai/AI.java @@ -72,9 +72,7 @@ public abstract class AI extends GameAdaptator{ protected CommandResult sendCommand(Command command, CommandExecutor commandExecutor) { CommandResult result = commandExecutor.executeCommand(command); - if(result == CommandResult.NotAllowed){ - System.out.println("eeeeee"); - } + assert result != CommandResult.NotAllowed : "Command not allowed!"; return result; } diff --git a/app/src/main/java/chess/model/Piece.java b/app/src/main/java/chess/model/Piece.java index 041b25b..f0d9efe 100644 --- a/app/src/main/java/chess/model/Piece.java +++ b/app/src/main/java/chess/model/Piece.java @@ -28,7 +28,4 @@ public abstract class Piece { public abstract T accept(PieceVisitor visitor); - @Override - public abstract boolean equals(Object other); - } diff --git a/app/src/main/java/chess/model/pieces/Bishop.java b/app/src/main/java/chess/model/pieces/Bishop.java index d755d00..301baea 100644 --- a/app/src/main/java/chess/model/pieces/Bishop.java +++ b/app/src/main/java/chess/model/pieces/Bishop.java @@ -15,13 +15,4 @@ public class Bishop extends Piece { return visitor.visitPiece(this); } - @Override - public int hashCode() { - return 0; - } - - public boolean equals(Object obj) { - return (obj instanceof Bishop && ((Bishop) obj).getColor() == this.getColor()); - } - } diff --git a/app/src/main/java/chess/model/pieces/King.java b/app/src/main/java/chess/model/pieces/King.java index a8fdf81..8234b7b 100644 --- a/app/src/main/java/chess/model/pieces/King.java +++ b/app/src/main/java/chess/model/pieces/King.java @@ -14,13 +14,4 @@ public class King extends Piece { public T accept(PieceVisitor visitor) { return visitor.visitPiece(this); } - - @Override - public int hashCode() { - return 1; - } - - public boolean equals(Object obj) { - return (obj instanceof King && ((King) obj).getColor() == this.getColor()); - } } diff --git a/app/src/main/java/chess/model/pieces/Knight.java b/app/src/main/java/chess/model/pieces/Knight.java index 790d928..358a5df 100644 --- a/app/src/main/java/chess/model/pieces/Knight.java +++ b/app/src/main/java/chess/model/pieces/Knight.java @@ -15,12 +15,4 @@ public class Knight extends Piece { return visitor.visitPiece(this); } - @Override - public int hashCode() { - return 2; - } - - public boolean equals(Object obj) { - return (obj instanceof Knight && ((Knight) obj).getColor() == this.getColor()); - } } diff --git a/app/src/main/java/chess/model/pieces/Pawn.java b/app/src/main/java/chess/model/pieces/Pawn.java index bf72740..33c1b66 100644 --- a/app/src/main/java/chess/model/pieces/Pawn.java +++ b/app/src/main/java/chess/model/pieces/Pawn.java @@ -19,12 +19,4 @@ public class Pawn extends Piece { return getColor() == Color.White ? 1 : -1; } - @Override - public int hashCode() { - return 3; - } - - public boolean equals(Object obj) { - return (obj instanceof Pawn && ((Pawn) obj).getColor() == this.getColor()); - } } diff --git a/app/src/main/java/chess/model/pieces/Queen.java b/app/src/main/java/chess/model/pieces/Queen.java index 49e6c2a..67cdf8c 100644 --- a/app/src/main/java/chess/model/pieces/Queen.java +++ b/app/src/main/java/chess/model/pieces/Queen.java @@ -15,12 +15,5 @@ public class Queen extends Piece { return visitor.visitPiece(this); } - @Override - public int hashCode() { - return 4; - } - public boolean equals(Object obj) { - return (obj instanceof Queen && ((Queen) obj).getColor() == this.getColor()); - } } diff --git a/app/src/main/java/chess/model/pieces/Rook.java b/app/src/main/java/chess/model/pieces/Rook.java index 8c520a4..48e316f 100644 --- a/app/src/main/java/chess/model/pieces/Rook.java +++ b/app/src/main/java/chess/model/pieces/Rook.java @@ -15,12 +15,4 @@ public class Rook extends Piece { return visitor.visitPiece(this); } - @Override - public int hashCode() { - return 5; - } - - public boolean equals(Object other) { - return (other instanceof Rook && ((Rook) other).getColor() == this.getColor()); - } } diff --git a/app/src/main/java/chess/model/visitor/KingIdentifier.java b/app/src/main/java/chess/model/visitor/KingIdentifier.java deleted file mode 100644 index 08259de..0000000 --- a/app/src/main/java/chess/model/visitor/KingIdentifier.java +++ /dev/null @@ -1,52 +0,0 @@ -package chess.model.visitor; - -import chess.model.Color; -import chess.model.Piece; -import chess.model.PieceVisitor; -import chess.model.pieces.*; - -public class KingIdentifier implements PieceVisitor { - - private final Color color; - - public KingIdentifier(Color color) { - this.color = color; - } - - public boolean isKing(Piece piece) { - if (piece == null) - return false; - return visit(piece); - } - - @Override - public Boolean visitPiece(Bishop bishop) { - return false; - } - - @Override - public Boolean visitPiece(King king) { - return king.getColor() == color; - } - - @Override - public Boolean visitPiece(Knight knight) { - return false; - } - - @Override - public Boolean visitPiece(Pawn pawn) { - return false; - } - - @Override - public Boolean visitPiece(Queen queen) { - return false; - } - - @Override - public Boolean visitPiece(Rook rook) { - return false; - } - -} diff --git a/app/src/main/java/chess/pgn/PgnFileSimulator.java b/app/src/main/java/chess/pgn/PgnFileSimulator.java index 6bd272f..b7bcb0f 100644 --- a/app/src/main/java/chess/pgn/PgnFileSimulator.java +++ b/app/src/main/java/chess/pgn/PgnFileSimulator.java @@ -1,22 +1,12 @@ package chess.pgn; -import java.io.BufferedReader; -import java.io.InputStreamReader; - import chess.controller.CommandExecutor; -import chess.view.AssetManager; +import common.AssetManager; public class PgnFileSimulator extends PgnSimulator{ - private static String readResource(String path) { - StringBuilder builder = new StringBuilder(); - BufferedReader reader = new BufferedReader(new InputStreamReader(AssetManager.getResource(path))); - reader.lines().forEach((line) -> builder.append(line + "\n")); - return builder.toString(); - } - public PgnFileSimulator(CommandExecutor commandExecutor, String fileName) { - super(commandExecutor, readResource(fileName)); + super(commandExecutor, AssetManager.getResourceAsString(fileName)); } } diff --git a/app/src/main/java/chess/pgn/PgnSimulator.java b/app/src/main/java/chess/pgn/PgnSimulator.java index 47824a1..26188ed 100644 --- a/app/src/main/java/chess/pgn/PgnSimulator.java +++ b/app/src/main/java/chess/pgn/PgnSimulator.java @@ -5,15 +5,16 @@ import java.util.List; import chess.controller.CommandExecutor; import chess.controller.PlayerCommand; -import chess.controller.commands.NewGameCommand; import chess.controller.event.GameAdaptator; -import chess.model.Game; +import common.Signal0; public class PgnSimulator extends GameAdaptator { private final CommandExecutor commandExecutor; private final String pgn; + public final Signal0 onComplete = new Signal0(); + public PgnSimulator(CommandExecutor commandExecutor, String pgn) { this.commandExecutor = commandExecutor; this.pgn = pgn; @@ -23,6 +24,7 @@ public class PgnSimulator extends GameAdaptator { public void onGameStart() { List cmds = PgnImport.importGame(this.pgn); this.commandExecutor.executeCommands(cmds); + this.onComplete.emit(); } } diff --git a/app/src/main/java/chess/view/audio/AudioFiles.java b/app/src/main/java/chess/view/audio/AudioFiles.java index 2ed46d6..9b5a214 100644 --- a/app/src/main/java/chess/view/audio/AudioFiles.java +++ b/app/src/main/java/chess/view/audio/AudioFiles.java @@ -8,7 +8,7 @@ import java.io.InputStream; import java.net.URI; import java.net.URISyntaxException; -import chess.view.AssetManager; +import common.AssetManager; public class AudioFiles { diff --git a/app/src/main/java/chess/view/simplerender/PieceIcon.java b/app/src/main/java/chess/view/simplerender/PieceIcon.java index 4932641..733fd41 100644 --- a/app/src/main/java/chess/view/simplerender/PieceIcon.java +++ b/app/src/main/java/chess/view/simplerender/PieceIcon.java @@ -17,7 +17,7 @@ import chess.model.pieces.Knight; import chess.model.pieces.Pawn; import chess.model.pieces.Queen; import chess.model.pieces.Rook; -import chess.view.AssetManager; +import common.AssetManager; public class PieceIcon implements PieceVisitor { diff --git a/app/src/main/java/chess/view/AssetManager.java b/app/src/main/java/common/AssetManager.java similarity index 69% rename from app/src/main/java/chess/view/AssetManager.java rename to app/src/main/java/common/AssetManager.java index a01e20d..0a6b89a 100644 --- a/app/src/main/java/chess/view/AssetManager.java +++ b/app/src/main/java/common/AssetManager.java @@ -1,9 +1,11 @@ -package chess.view; +package common; +import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; public class AssetManager { @@ -22,6 +24,13 @@ public class AssetManager { return ClassLoader.getSystemResourceAsStream(name); } + public static String getResourceAsString(String path) { + StringBuilder builder = new StringBuilder(); + BufferedReader reader = new BufferedReader(new InputStreamReader(AssetManager.getResource(path))); + reader.lines().forEach((line) -> builder.append(line + "\n")); + return builder.toString(); + } + private static InputStream getFileInputStream(String path) { File f = new File(path); if (f.exists()) { diff --git a/app/src/test/java/chess/PgnTest.java b/app/src/test/java/chess/PgnTest.java index 3369c18..f517f3f 100644 --- a/app/src/test/java/chess/PgnTest.java +++ b/app/src/test/java/chess/PgnTest.java @@ -14,7 +14,9 @@ import chess.controller.event.GameAdaptator; import chess.model.Color; import chess.model.Game; import chess.pgn.PgnExport; +import chess.pgn.PgnFileSimulator; import chess.pgn.PgnImport; +import common.AssetManager; public class PgnTest { @@ -49,7 +51,7 @@ public class PgnTest { return game; } - private void importExport() { + private void importExportRandom() { Game game = getRandomGame(); String pgnContent = PgnExport.exportGame(game); @@ -69,9 +71,54 @@ public class PgnTest { assertEquals(pgnContent, pgnContent2); } - @Test void importExports() { + private void importExportFile(String name) { + Game game = new Game(); + CommandExecutor commandExecutor = new CommandExecutor(game); + + PgnFileSimulator fileSimulator = new PgnFileSimulator(commandExecutor, name); + commandExecutor.addListener(fileSimulator); + + final StringBuilder pgnContent = new StringBuilder(); + + fileSimulator.onComplete.connect(() -> { + pgnContent.append(PgnExport.exportGame(game)); + + commandExecutor.close(); + + synchronized (game) { + game.notifyAll(); + } + + }); + + commandExecutor.executeCommand(new NewGameCommand()); + + synchronized (game) { + try { + game.wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + String content1 = pgnContent.toString().trim(); + String content2 = AssetManager.getResourceAsString(name).replaceAll("\n", " ").trim(); + + assertEquals(content1, content2); + } + + @Test + void importExportFiles() { + importExportFile("games/CastlingTest.pgn"); + importExportFile("games/EnPassantTest.pgn"); + importExportFile("games/FoolCheckmate.pgn"); + importExportFile("games/PromoteTest.pgn"); + } + + @Test + void importExports() { for (int i = 0; i < 50; i++) { - importExport(); + importExportRandom(); } } }