diff --git a/forge-game/src/main/java/forge/game/mana/ManaPool.java b/forge-game/src/main/java/forge/game/mana/ManaPool.java index 9add3814575..0b923ad4f12 100644 --- a/forge-game/src/main/java/forge/game/mana/ManaPool.java +++ b/forge-game/src/main/java/forge/game/mana/ManaPool.java @@ -442,6 +442,9 @@ public class ManaPool extends ManaConversionMatrix implements Iterable { } public void clear() { + for (Map.Entry> entry : storage().entrySet()) { + entry.getValue().clear(); + } storage().clear(); } diff --git a/forge-gui-desktop/src/test/java/forge/FCollectionTest.java b/forge-gui-desktop/src/test/java/forge/FCollectionTest.java index fd3a5863385..5d88377a5f2 100644 --- a/forge-gui-desktop/src/test/java/forge/FCollectionTest.java +++ b/forge-gui-desktop/src/test/java/forge/FCollectionTest.java @@ -36,7 +36,7 @@ public class FCollectionTest { int i = 0; for (Card c : cc) { if (i != 3) - cc.remove(c); + cc.remove(c); // throws error if the CardCollection not threadsafe i++; } assertEquals(cc.size(), 1); diff --git a/forge-gui-desktop/src/test/java/forge/ManaPoolTest.java b/forge-gui-desktop/src/test/java/forge/ManaPoolTest.java index 8c629e71a3a..3804c0fc958 100644 --- a/forge-gui-desktop/src/test/java/forge/ManaPoolTest.java +++ b/forge-gui-desktop/src/test/java/forge/ManaPoolTest.java @@ -19,6 +19,26 @@ public class ManaPoolTest extends SimulationTest { * Just a quick test for ManaPool. */ @Test + void testManaPoolBadLogic() { + Game game = initAndCreateGame(); + Player p0 = game.getPlayers().get(0); + Player p1 = game.getPlayers().get(1); + Mana w = new Mana(MagicColor.WHITE, new Card(1, game), null); + Mana b = new Mana(MagicColor.BLACK, new Card(1, game), null); + p0.getManaPool().addMana(w, false); + p0.getManaPool().addMana(w, false); + p0.getManaPool().addMana(w, false); + p1.getManaPool().addMana(b, false); + p1.getManaPool().addMana(b, false); + p1.getManaPool().resetPool(); // empty manapool, should clear all values + for (Mana m : p0.getManaPool()) { + p1.getManaPool().addMana(m, false); + p0.getManaPool().removeMana(m, false); // throws error if ManaPool is not threadsafe + } + assertEquals(p0.getManaPool().getAmountOfColor(MagicColor.WHITE), 0); + assertEquals(p1.getManaPool().getAmountOfColor(MagicColor.WHITE), 3); + } + @Test void testCompletableFuture() { Game game = initAndCreateGame(); Player p0 = game.getPlayers().get(0);