From b5889d86e025a999de92d7022388797d59df986e Mon Sep 17 00:00:00 2001 From: AleandroPagani Date: Sat, 2 May 2026 16:03:47 +0200 Subject: [PATCH 1/7] Fix: TUI list option --- src/main/java/it/polimi/ingsw/gc14/ClientLauncherTUI.java | 8 ++++---- .../polimi/ingsw/gc14/Network/RMI/Server/RMIServer.java | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/it/polimi/ingsw/gc14/ClientLauncherTUI.java b/src/main/java/it/polimi/ingsw/gc14/ClientLauncherTUI.java index 6d2d854..a1d7a6e 100644 --- a/src/main/java/it/polimi/ingsw/gc14/ClientLauncherTUI.java +++ b/src/main/java/it/polimi/ingsw/gc14/ClientLauncherTUI.java @@ -85,10 +85,10 @@ public class ClientLauncherTUI { } switch(action) { case "0" -> controller.slotChoice(username, pos); - case "1" -> controller.drawUpperBuildingCard(username, pos); - case "2" -> controller.drawUpperTribeCard(username, pos); - case "3" -> controller.drawLowerBuildingCard(username, pos); - case "4" -> controller.drawLowerTribeCard(username, pos); + case "1" -> controller.drawUpperTribeCard(username, pos); + case "2" -> controller.drawUpperBuildingCard(username, pos); + case "3" -> controller.drawLowerTribeCard(username, pos); + case "4" -> controller.drawLowerBuildingCard(username, pos); case "5" -> controller.pickOptionalTribeCard(username, pos); case "6" -> controller.pickOptionalBuildingCard(username, pos); case "7" -> controller.noOptionalCard(username); diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Server/RMIServer.java b/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Server/RMIServer.java index 6fadf03..0e06955 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Server/RMIServer.java +++ b/src/main/java/it/polimi/ingsw/gc14/Network/RMI/Server/RMIServer.java @@ -90,6 +90,7 @@ public class RMIServer extends UnicastRemoteObject implements IGameServer { if (controller.addPlayer(username)) { clients.put(username, callback); playerList.add(username); + System.out.println("Accepted player: " + username); return true; } return false; From fe621d3a3cf200b6ce5364681ec054b0bd0431f8 Mon Sep 17 00:00:00 2001 From: AleandroPagani Date: Sat, 2 May 2026 16:11:32 +0200 Subject: [PATCH 2/7] Add: TUI for server (debug) --- src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java b/src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java index 9c8a10e..252a9da 100644 --- a/src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java +++ b/src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java @@ -7,6 +7,7 @@ import it.polimi.ingsw.gc14.Network.NetworkEvent; import it.polimi.ingsw.gc14.Network.NetworkEvents.AddPlayer; import it.polimi.ingsw.gc14.Network.RMI.Server.RMIServer; import it.polimi.ingsw.gc14.Network.TCP.Server.TCPServer; +import it.polimi.ingsw.gc14.View.TUI.TUI; import java.rmi.RemoteException; import java.util.concurrent.BlockingQueue; @@ -56,6 +57,8 @@ public class ServerLauncher { */ static LimitedList playerList; + TUI view; + /** * Class constructor that initializes the attributes. @@ -137,11 +140,14 @@ public class ServerLauncher { System.out.println("\n\nNotifying model"); serverRMI.notifyAll(gameController.getModel()); serverTCP.notifyAll(gameController.getModel()); + this.view = new TUI(gameController.getModel()); + this.view.fullRender(); // Game execution while (true) { try { this.doFirstEvent(); + this.view.fullRender(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); break; From 670b4fcf84edd34649030a6c5c3c8c663d9017a4 Mon Sep 17 00:00:00 2001 From: rubenpirreram Date: Sat, 2 May 2026 16:15:10 +0200 Subject: [PATCH 3/7] Fix: SkipLower(Game.java) --- src/main/java/it/polimi/ingsw/gc14/Model/Game.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Game.java b/src/main/java/it/polimi/ingsw/gc14/Model/Game.java index 7c9afcf..15f09ad 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Game.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Game.java @@ -346,7 +346,7 @@ public class Game implements Serializable { { return false; } - if(currentState.getNUpper() <1) + if(currentState.getNLower() <1) return false; if(hasDrawableDown()) return false; From 482921eb86acd64ecf9a85d4e16540811dfe5fa1 Mon Sep 17 00:00:00 2001 From: rubenpirreram Date: Sat, 2 May 2026 16:38:30 +0200 Subject: [PATCH 4/7] Fix:Board --- .../ingsw/gc14/Model/GamePackage/Board.java | 56 ++++++++++++------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/GamePackage/Board.java b/src/main/java/it/polimi/ingsw/gc14/Model/GamePackage/Board.java index 4fda653..8c324b6 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/GamePackage/Board.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/GamePackage/Board.java @@ -41,6 +41,8 @@ public class Board implements Serializable { /** Contains all the building cards of the upper list. When a new era starts, the old era's buildings are moved from the upper to the lower list */ public List lowerListBuilding; + + private final ArrayList> buildingCardsAllEras; /** Number of players */ private int nTotem; @@ -88,6 +90,7 @@ public class Board implements Serializable { tribeDeck=generateTribeDeck(nTotem); era=1; + for(int i=0;i buildingDeck = new ArrayList<>(DecksCreator.loadBuildingDeckByEra(1)); Collections.shuffle(buildingDeck); + buildingCardsAllEras= new ArrayList<>(); if(nTotem==2) + { + buildingCardsAllEras.set(0, new ArrayList<>(buildingDeck.subList(0, 1))); upperListBuilding = new ArrayList<>(buildingDeck.subList(0,1)); + } else + { + buildingCardsAllEras.set(0, new ArrayList<>(buildingDeck.subList(0, 2))); upperListBuilding = new ArrayList<>(buildingDeck.subList(0,2)); + } + + buildingDeck=new ArrayList<>(DecksCreator.loadBuildingDeckByEra(2)); + Collections.shuffle(buildingDeck); + if(nTotem<=3) + { + buildingCardsAllEras.set(1, new ArrayList(buildingDeck.subList(0, 2))); + } + else + { + buildingCardsAllEras.set(1, new ArrayList(buildingDeck.subList(0, 3))); + } + buildingDeck=new ArrayList<>(DecksCreator.loadBuildingDeckByEra(3)); + Collections.shuffle(buildingDeck); + if(nTotem==2) + { + buildingCardsAllEras.set(2, new ArrayList(buildingDeck.subList(0, 3))); + }else if(nTotem==5) + { + buildingCardsAllEras.set(2, new ArrayList(buildingDeck.subList(0, 5))); + } + else { + buildingCardsAllEras.set(2, new ArrayList(buildingDeck.subList(0, 4))); + } + } /** @@ -230,27 +264,11 @@ public class Board implements Serializable { Collections.shuffle(buildingCards); if(era==2) { - if(nTotem<=3) - { - upperListBuilding.addAll(buildingCards.subList(0,2)); - } - else - { - upperListBuilding.addAll( buildingCards.subList(0,3)); - } + upperListBuilding.addAll(buildingCardsAllEras.get(1)); } - else // Era 3 + else { - if(nTotem==2) - { - upperListBuilding.addAll( buildingCards.subList(0,3)); - }else if(nTotem==5) - { - upperListBuilding.addAll( buildingCards.subList(0,5)); - } - else { - upperListBuilding.addAll(buildingCards.subList(0,4)); - } + upperListBuilding.addAll(buildingCardsAllEras.get(2)); } } } From 5ecca62dd9678df00e75b76a24609acfbed4c599 Mon Sep 17 00:00:00 2001 From: rubenpirreram Date: Sat, 2 May 2026 17:03:51 +0200 Subject: [PATCH 5/7] Fixed: Building Shuffle Init --- src/main/java/it/polimi/ingsw/gc14/Model/Game.java | 2 +- .../polimi/ingsw/gc14/Model/GamePackage/Board.java | 3 +++ .../ingsw/gc14/Model/GamePackage/BoardTest.java | 13 +++++++++++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Game.java b/src/main/java/it/polimi/ingsw/gc14/Model/Game.java index 15f09ad..2037d26 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Game.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Game.java @@ -640,7 +640,7 @@ public class Game implements Serializable { { currentState.GameStageUpdate(GameStages.OPTIONAL_CARD_EFFECT); HashMap optional=new LinkedHashMap<>(); - for (Player p : playersList) { + for (Player p : orderLogicCard.players) { int tempCount=(int)p.buildingCards.stream().filter(x->x.getEffectId()==12).count(); if(tempCount>0) { diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/GamePackage/Board.java b/src/main/java/it/polimi/ingsw/gc14/Model/GamePackage/Board.java index 8c324b6..3f16dcc 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/GamePackage/Board.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/GamePackage/Board.java @@ -114,6 +114,9 @@ public class Board implements Serializable { ArrayList buildingDeck = new ArrayList<>(DecksCreator.loadBuildingDeckByEra(1)); Collections.shuffle(buildingDeck); buildingCardsAllEras= new ArrayList<>(); + buildingCardsAllEras.add(new ArrayList<>()); + buildingCardsAllEras.add(new ArrayList<>()); + buildingCardsAllEras.add(new ArrayList<>()); if(nTotem==2) { buildingCardsAllEras.set(0, new ArrayList<>(buildingDeck.subList(0, 1))); diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/GamePackage/BoardTest.java b/src/test/java/it/polimi/ingsw/gc14/Model/GamePackage/BoardTest.java index f270740..ce03ea4 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/GamePackage/BoardTest.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/GamePackage/BoardTest.java @@ -149,7 +149,7 @@ class BoardTest { } @Test - @DisplayName("RemgetTribeDeckSizeoving a card from upper row of building cards") + @DisplayName("Removing a card from upper row of building cards") void removeUpperBuildingCard() { Board bd = new Board(3); @@ -214,6 +214,8 @@ class BoardTest { assertEquals(upperListBefore, bd1.lowerListBuilding); assertNotEquals(upperListBefore, bd1.upperListBuilding); assertEquals(2, bd1.upperListBuilding.size()); + assertTrue(bd1.upperListBuilding.stream().allMatch(x->x.getEra()==2)); + assertTrue(bd1.lowerListBuilding.stream().allMatch(x->x.getEra()==1)); // Era 2, nTotem > 3 @@ -227,7 +229,8 @@ class BoardTest { assertEquals(upperListBefore, bd2.lowerListBuilding); assertNotEquals(upperListBefore, bd2.upperListBuilding); assertEquals(3, bd2.upperListBuilding.size()); - + assertTrue(bd2.upperListBuilding.stream().allMatch(x->x.getEra()==2)); + assertTrue(bd2.lowerListBuilding.stream().allMatch(x->x.getEra()==1)); // Era 3, nTotem == 2 numPlayer = 2; @@ -243,6 +246,8 @@ class BoardTest { assertEquals(upperListBefore, bd3.lowerListBuilding); assertNotEquals(upperListBefore, bd3.upperListBuilding); assertEquals(3, bd3.upperListBuilding.size()); + assertTrue(bd3.upperListBuilding.stream().allMatch(x->x.getEra()==3)); + assertTrue(bd3.lowerListBuilding.stream().allMatch(x->x.getEra()==2)); // Era 3, nTotem == 5 @@ -259,6 +264,8 @@ class BoardTest { assertEquals(upperListBefore, bd4.lowerListBuilding); assertNotEquals(upperListBefore, bd4.upperListBuilding); assertEquals(5, bd4.upperListBuilding.size()); + assertTrue(bd4.upperListBuilding.stream().allMatch(x->x.getEra()==3)); + assertTrue(bd4.lowerListBuilding.stream().allMatch(x->x.getEra()==2)); // Era 3, nTotem != 2, 5 @@ -275,6 +282,8 @@ class BoardTest { assertEquals(upperListBefore, bd5.lowerListBuilding); assertNotEquals(upperListBefore, bd5.upperListBuilding); assertEquals(4, bd5.upperListBuilding.size()); + assertTrue(bd5.upperListBuilding.stream().allMatch(x->x.getEra()==3)); + assertTrue(bd5.lowerListBuilding.stream().allMatch(x->x.getEra()==2)); } From 86bb799714eea4b577ee4783c5b149a71f64633d Mon Sep 17 00:00:00 2001 From: MatteoPellegrino05 Date: Sat, 2 May 2026 17:29:22 +0200 Subject: [PATCH 6/7] Add: Game slot and draw tests --- .../it/polimi/ingsw/gc14/Model/GameTest.java | 197 ++++++++++++++---- 1 file changed, 161 insertions(+), 36 deletions(-) diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/GameTest.java b/src/test/java/it/polimi/ingsw/gc14/Model/GameTest.java index 959dd13..3a4b1b1 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/GameTest.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/GameTest.java @@ -8,7 +8,6 @@ import it.polimi.ingsw.gc14.Model.GamePackage.GameStages; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; -import java.io.IOException; import java.util.*; import java.util.concurrent.TimeUnit; @@ -70,45 +69,59 @@ class GameTest { Player current = game.getCurrentState().getCurrentPlayer(); assertNotNull(current); - if (game.getCurrentState().getNLower() > 0 && hasDrawableLower(game)) { + if (game.getCurrentState().getNLower() > 0) { int index = firstNonEventIndexOrMinusOne(game.getLowerListTribeCards()); if (index != -1) { assertTrue(game.DrawLowerTribeCardByIndex(current, index)); - } else { - current.addFood(100); - assertTrue(game.DrawLowerBuildingCardByIndex(current, 0)); + return; } - } else if (game.getCurrentState().getNUpper() > 0 && hasDrawableUpper(game)) { + if (!game.getLowerListBuilding().isEmpty()) { + current.addFood(100); + assertTrue(game.DrawLowerBuildingCardByIndex(current, 0)); + return; + } + + assertTrue(game.SkipLowerDrawing(current)); + return; + } + + if (game.getCurrentState().getNUpper() > 0) { int index = firstNonEventIndexOrMinusOne(game.getUpperListTribeCards()); if (index != -1) { assertTrue(game.DrawUpperTribeCardByIndex(current, index)); - } else { - current.addFood(100); - assertTrue(game.DrawUpperBuildingCardByIndex(current, 0)); + return; } - } else { - fail( - "Current player has no drawable cards, although the game is still resolving actions.\n" + - "Current player: " + current + "\n" + - "Round: " + game.getCurrentState().getRound() + "\n" + - "Stage: " + game.getCurrentState().getGameStage() + "\n" + - "Slot: " + (game.getCurrentState().getSlot() == null - ? "null" - : game.getCurrentState().getSlot().getSlotId()) + "\n" + - "NLower: " + game.getCurrentState().getNLower() + "\n" + - "NUpper: " + game.getCurrentState().getNUpper() + "\n" + - "Lower tribe size: " + game.getLowerListTribeCards().size() + "\n" + - "Upper tribe size: " + game.getUpperListTribeCards().size() + "\n" + - "Lower building size: " + game.getLowerListBuilding().size() + "\n" + - "Upper building size: " + game.getUpperListBuilding().size() + "\n" + - "First lower non-event: " + firstNonEventIndexOrMinusOne(game.getLowerListTribeCards()) + "\n" + - "First upper non-event: " + firstNonEventIndexOrMinusOne(game.getUpperListTribeCards()) - ); + if (!game.getUpperListBuilding().isEmpty()) { + current.addFood(100); + assertTrue(game.DrawUpperBuildingCardByIndex(current, 0)); + return; + } + + assertTrue(game.SkipUpperDrawing(current)); + return; } + + fail( + "Current player has no remaining draw actions.\n" + + "Current player: " + current + "\n" + + "Round: " + game.getCurrentState().getRound() + "\n" + + "Stage: " + game.getCurrentState().getGameStage() + "\n" + + "Slot: " + (game.getCurrentState().getSlot() == null + ? "null" + : game.getCurrentState().getSlot().getSlotId()) + "\n" + + "NLower: " + game.getCurrentState().getNLower() + "\n" + + "NUpper: " + game.getCurrentState().getNUpper() + "\n" + + "Lower tribe size: " + game.getLowerListTribeCards().size() + "\n" + + "Upper tribe size: " + game.getUpperListTribeCards().size() + "\n" + + "Lower building size: " + game.getLowerListBuilding().size() + "\n" + + "Upper building size: " + game.getUpperListBuilding().size() + "\n" + + "First lower non-event: " + firstNonEventIndexOrMinusOne(game.getLowerListTribeCards()) + "\n" + + "First upper non-event: " + firstNonEventIndexOrMinusOne(game.getUpperListTribeCards()) + ); } private void resolveActionsUntilOptionalCardEffect(Game game) { @@ -140,14 +153,13 @@ class GameTest { resolveOptionalPhaseIfPresent(game); } - private boolean hasDrawableLower(Game game) { - return firstNonEventIndexOrMinusOne(game.getLowerListTribeCards()) != -1 - || !game.getLowerListBuilding().isEmpty(); - } + private void resolveCurrentPlayerCompletely(Game game, Player expectedPlayer) { + assertEquals(expectedPlayer, game.getCurrentState().getCurrentPlayer()); - private boolean hasDrawableUpper(Game game) { - return firstNonEventIndexOrMinusOne(game.getUpperListTribeCards()) != -1 - || !game.getUpperListBuilding().isEmpty(); + while (game.getCurrentState().getGameStage() == GameStages.RESOLVING_ACTIONS + && expectedPlayer.equals(game.getCurrentState().getCurrentPlayer())) { + resolveOneMandatoryAction(game); + } } @Test @@ -808,7 +820,7 @@ class GameTest { assertFalse(game.PickOptionalBuildingCard(current, 0)); } @Test - void toStringModel() throws IOException, InterruptedException { + void toStringModel() { Game game=new Game(5); Player p1=new Player("p1"); Player p2=new Player("p2"); @@ -828,6 +840,119 @@ class GameTest { assertTrue(game.SlotChoiceByIndex(game.getCurrentState().getCurrentPlayer(), i)); } - System.out.println(game.toString()); + String result = game.toString(); + + assertNotNull(result); + assertFalse(result.isBlank()); + assertTrue(result.contains("CURRENT STATE")); + } + + @Test + @Timeout(value = 5, unit = TimeUnit.SECONDS) + void shouldDrawLowerBuildingWhenAvailableAndPlayerCanPay() { + Game game = new Game(3); + + addPlayers(game, 3, "lower_building_"); + + for (int safety = 0; safety < 300; safety++) { + + if (game.getCurrentState().getGameStage() == GameStages.SLOT_CHOICE) { + completeSlotChoice(game); + } + + if (game.getCurrentState().getGameStage() == GameStages.RESOLVING_ACTIONS) { + Player current = game.getCurrentState().getCurrentPlayer(); + assertNotNull(current); + + if (game.getCurrentState().getNLower() > 0 + && !game.getLowerListBuilding().isEmpty()) { + + current.addFood(100); + + int buildingsBefore = current.buildingCards.size(); + int lowerBuildingsBefore = game.getLowerListBuilding().size(); + int foodBefore = current.getFoodValue(); + + assertTrue( + game.DrawLowerBuildingCardByIndex(current, 0), + "DrawLowerBuildingCardByIndex should return true when lower building exists, player can draw lower, and player has food." + ); + + assertEquals(buildingsBefore + 1, current.buildingCards.size()); + assertEquals(lowerBuildingsBefore - 1, game.getLowerListBuilding().size()); + assertTrue(current.getFoodValue() < foodBefore); + + return; + } + + resolveOneMandatoryAction(game); + } + + if (game.getCurrentState().getGameStage() == GameStages.OPTIONAL_CARD_EFFECT) { + resolveOptionalPhaseIfPresent(game); + } + + if (game.getCurrentState().getGameStage() == GameStages.ENDED) { + break; + } + } + + fail("The test never reached a state with NLower > 0 and at least one lower building."); + } + + @Test + void drawBuildingShouldReturnFalseIfPlayerCannotPay() { + Game game = new Game(3); + addPlayers(game, 3, "no_food_building_"); + + completeSlotChoice(game); + + while (game.getCurrentState().getGameStage() == GameStages.RESOLVING_ACTIONS) { + Player current = game.getCurrentState().getCurrentPlayer(); + + if (game.getCurrentState().getNUpper() > 0 + && !game.getUpperListBuilding().isEmpty() + && current.builders.isEmpty()) { + + while (current.getFoodValue() > 0) { + assertTrue(current.removeFood(1)); + } + + assertEquals(0, current.getFoodValue()); + assertFalse(game.DrawUpperBuildingCardByIndex(current, 0)); + return; + } + + resolveOneMandatoryAction(game); + } + + fail("No upper building draw state reached with a player without builders."); + } + + @Test + void shouldResolvePlayersAccordingToSlotOrder() { + Game game = new Game(3); + addPlayers(game, 3, "slot_order_"); + + Player firstChooser = game.getCurrentState().getCurrentPlayer(); + assertTrue(game.SlotChoiceByIndex(firstChooser, 2)); + + Player secondChooser = game.getCurrentState().getCurrentPlayer(); + assertTrue(game.SlotChoiceByIndex(secondChooser, 0)); + + Player thirdChooser = game.getCurrentState().getCurrentPlayer(); + assertTrue(game.SlotChoiceByIndex(thirdChooser, 1)); + + assertEquals(GameStages.RESOLVING_ACTIONS, game.getCurrentState().getGameStage()); + + assertEquals(secondChooser, game.getCurrentState().getCurrentPlayer()); + + resolveCurrentPlayerCompletely(game, secondChooser); + + assertEquals(thirdChooser, game.getCurrentState().getCurrentPlayer()); + + resolveCurrentPlayerCompletely(game, thirdChooser); + + assertEquals(firstChooser, game.getCurrentState().getCurrentPlayer()); } } \ No newline at end of file From 6d5a52f2a43768001d0dd9a2dd0af617b14cdac9 Mon Sep 17 00:00:00 2001 From: rubenpirreram Date: Sat, 2 May 2026 17:31:46 +0200 Subject: [PATCH 7/7] Fix: BoardTest --- .../gc14/Model/GamePackage/BoardTest.java | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/GamePackage/BoardTest.java b/src/test/java/it/polimi/ingsw/gc14/Model/GamePackage/BoardTest.java index ce03ea4..dd9db49 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/GamePackage/BoardTest.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/GamePackage/BoardTest.java @@ -125,11 +125,11 @@ class BoardTest { void removeUpperTribeCard() { Board bd = new Board(3); - List before = bd.upperListTribe; - TribeCard cardToRemove = before.get(2); + List before = new ArrayList<>( bd.upperListTribe); + TribeCard cardToRemove = before.get(0); - before.remove(2); - bd.removeUpperTribeCard(cardToRemove); + assertEquals(cardToRemove, before.remove(0)); + assertTrue( bd.removeUpperTribeCard(cardToRemove)); assertEquals(before, bd.upperListTribe); } @@ -139,11 +139,11 @@ class BoardTest { void removeLowerTribeCard() { Board bd = new Board(3); - List before = bd.lowerListTribe; - TribeCard cardToRemove = before.get(2); + List before = new ArrayList<>(bd.lowerListTribe); + TribeCard cardToRemove = before.get(0); - before.remove(2); - bd.removeLowerTribeCard(cardToRemove); + assertEquals(cardToRemove, before.remove(0)); + assertTrue( bd.removeLowerTribeCard(cardToRemove)); assertEquals(before, bd.lowerListTribe); } @@ -153,11 +153,11 @@ class BoardTest { void removeUpperBuildingCard() { Board bd = new Board(3); - List before = bd.upperListBuilding; + List before = new ArrayList<>(bd.upperListBuilding); BuildingCard cardToRemove = before.get(0); - before.remove(0); - bd.removeUpperBuildingCard(cardToRemove); + assertEquals(cardToRemove, before.remove(0)); + assertTrue( bd.removeUpperBuildingCard(cardToRemove)); assertEquals(before, bd.upperListBuilding); } @@ -171,12 +171,10 @@ class BoardTest { bd.nextRound(); // Skip to era 2 } - List before = bd.lowerListBuilding; + List before = new ArrayList<>( bd.lowerListBuilding); BuildingCard cardToRemove = before.get(0); - - before.remove(0); - bd.removeLowerBuildingCard(cardToRemove); - + assertEquals(cardToRemove, before.remove(0)); + assertTrue(bd.removeLowerBuildingCard(cardToRemove)); assertEquals(before, bd.lowerListBuilding); }