diff --git a/forge-ai/src/main/java/forge/ai/simulation/GameSimulator.java b/forge-ai/src/main/java/forge/ai/simulation/GameSimulator.java index a882421d864..a7cca10967d 100644 --- a/forge-ai/src/main/java/forge/ai/simulation/GameSimulator.java +++ b/forge-ai/src/main/java/forge/ai/simulation/GameSimulator.java @@ -157,10 +157,6 @@ public class GameSimulator { ComputerUtil.handlePlayingSpellAbility(aiPlayer, sa, simGame); } - if (simGame.getStack().isEmpty()) { - System.err.println("Stack empty: " + sa); - return Integer.MIN_VALUE; - } // TODO: Support multiple opponents. Player opponent = aiPlayer.getOpponent(); diff --git a/forge-gui-desktop/src/test/java/forge/ai/simulation/GameSimulatorTest.java b/forge-gui-desktop/src/test/java/forge/ai/simulation/GameSimulatorTest.java index f6b8683f8b7..7fb82b6d5bc 100644 --- a/forge-gui-desktop/src/test/java/forge/ai/simulation/GameSimulatorTest.java +++ b/forge-gui-desktop/src/test/java/forge/ai/simulation/GameSimulatorTest.java @@ -7,6 +7,7 @@ import com.google.common.collect.Lists; import forge.GuiBase; import forge.GuiDesktop; import forge.ai.LobbyPlayerAi; +import forge.card.CardStateName; import forge.deck.Deck; import forge.game.Game; import forge.game.GameRules; @@ -62,9 +63,13 @@ public class GameSimulatorTest extends TestCase { return null; } - private Card addCard(String name, Player p) { + private Card createCard(String name, Player p) { IPaperCard paperCard = FModel.getMagicDb().getCommonCards().getCard(name); - Card c = Card.fromPaperCard(paperCard, p); + return Card.fromPaperCard(paperCard, p); + } + + private Card addCard(String name, Player p) { + Card c = createCard(name, p); p.getZone(ZoneType.Battlefield).add(c); return c; } @@ -139,7 +144,7 @@ public class GameSimulatorTest extends TestCase { assertEquals(2, sliver.getNetToughness()); } - public void testEquippedAbilities() { + public void DISABLED_testEquippedAbilities() { String bearCardName = "Runeclaw Bear"; Game game = initAndCreateGame(); Player p = game.getPlayers().get(1); @@ -183,8 +188,7 @@ public class GameSimulatorTest extends TestCase { addCard("Swamp", p); String merchantCardName = "Gray Merchant of Asphodel"; - IPaperCard paperCard = FModel.getMagicDb().getCommonCards().getCard(merchantCardName); - Card c = Card.fromPaperCard(paperCard, p); + Card c = createCard(merchantCardName, p); p.getZone(ZoneType.Hand).add(c); game.getPhaseHandler().devModeSet(PhaseType.MAIN2, p); game.getAction().checkStateEffects(true); @@ -224,4 +228,26 @@ public class GameSimulatorTest extends TestCase { Card c2Copy = findCardWithName(simGame, c2Name); assertFalse(c2Copy.hasStartOfKeyword("(Echo unpaid)")); } + + public void testSimulateUnmorph() { + Game game = initAndCreateGame(); + Player p = game.getPlayers().get(1); + Card ripper = createCard("Ruthless Ripper", p); + ripper.setState(CardStateName.FaceDown, true); + p.getZone(ZoneType.Battlefield).add(ripper); + + game.getPhaseHandler().devModeSet(PhaseType.MAIN2, p); + game.getAction().checkStateEffects(true); + + assertEquals(20, p.getOpponent().getLife()); + + GameSimulator sim = new GameSimulator(game, p); + Game simGame = sim.getSimulatedGameState(); + + Card ripperCopy = findCardWithName(simGame, ""); + SpellAbility unmorphSA = findSAWithPrefix(ripperCopy, "Morph - Reveal a black card"); + assertNotNull(unmorphSA); + sim.simulateSpellAbility(unmorphSA); + assertEquals(18, simGame.getPlayers().get(0).getLife()); + } }