diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/mid/OminousRoostTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/mid/OminousRoostTest.java index 447c0e8d246..b0bc901ec55 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/single/mid/OminousRoostTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/mid/OminousRoostTest.java @@ -15,48 +15,48 @@ import org.mage.test.serverside.base.CardTestPlayerBase; * @author alexander-novo, Alex-Vasile */ public class OminousRoostTest extends CardTestPlayerBase { - private static final String ominousRoost = "Ominous Roost"; + private static final String ominousRoost = "Ominous Roost"; - /** - * Reported bug: https://github.com/magefree/mage/issues/9078 - * If Ominous Roost is in your library, it will trigger any time you cast a spell from your graveyard. - */ - @Test - public void doesNotTriggerFromOtherZones() { - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); + /** + * Reported bug: https://github.com/magefree/mage/issues/9078 + * If Ominous Roost is in your library, it will trigger any time you cast a spell from your graveyard. + */ + @Test + public void doesNotTriggerFromOtherZones() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); - addCard(Zone.EXILED, playerA, ominousRoost); - addCard(Zone.LIBRARY, playerA, ominousRoost); - addCard(Zone.GRAVEYARD, playerA, ominousRoost); - addCard(Zone.HAND, playerA, ominousRoost); + addCard(Zone.EXILED, playerA, ominousRoost); + addCard(Zone.LIBRARY, playerA, ominousRoost); + addCard(Zone.GRAVEYARD, playerA, ominousRoost); + addCard(Zone.HAND, playerA, ominousRoost); - // Flashback {2}{R} - // Create a treasure token - addCard(Zone.GRAVEYARD, playerA, "Strike It Rich"); + // Flashback {2}{R} + // Create a treasure token + addCard(Zone.GRAVEYARD, playerA, "Strike It Rich"); - setStrictChooseMode(true); + setStrictChooseMode(true); - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Flashback {2}{R}"); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Flashback {2}{R}"); - setStopAt(1, PhaseStep.END_TURN); - execute(); - assertPermanentCount(playerA, ominousRoost, 0); - assertPermanentCount(playerA, "Bird Token", 0); // None of the cards are on the field, so it should not have triggered - } + setStopAt(1, PhaseStep.END_TURN); + execute(); + assertPermanentCount(playerA, ominousRoost, 0); + assertPermanentCount(playerA, "Bird Token", 0); // None of the cards are on the field, so it should not have triggered + } - /** - * Test that it triggers on ETB - */ - @Test - public void triggersOnOwnETB() { - addCard(Zone.HAND, playerA, ominousRoost); - addCard(Zone.BATTLEFIELD, playerA, "Island", 3); + /** + * Test that it triggers on ETB + */ + @Test + public void triggersOnOwnETB() { + addCard(Zone.HAND, playerA, ominousRoost); + addCard(Zone.BATTLEFIELD, playerA, "Island", 3); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, ominousRoost); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, ominousRoost); - setStopAt(1, PhaseStep.END_TURN); - execute(); - assertPermanentCount(playerA, ominousRoost, 1); - assertPermanentCount(playerA, "Bird Token", 1); - } + setStopAt(1, PhaseStep.END_TURN); + execute(); + assertPermanentCount(playerA, ominousRoost, 1); + assertPermanentCount(playerA, "Bird Token", 1); + } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/mid/SigardasSplendorTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/mid/SigardasSplendorTest.java new file mode 100644 index 00000000000..95b7f30edda --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/mid/SigardasSplendorTest.java @@ -0,0 +1,76 @@ +package org.mage.test.cards.single.mid; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * {@link mage.cards.s.SigardasSplendor Sigarda's Splendor} + * {2}{W}{W} + * Enchantment + * As Sigarda’s Splendor enters the battlefield, note your life total. + * At the beginning of your upkeep, draw a card if your life total is greater than or equal + * to the last noted life total for Sigarda’s Splendor. Then note your life total. + * Whenever you cast a white spell, you gain 1 life. + * + * @author notgreat + */ +public class SigardasSplendorTest extends CardTestPlayerBase { + private static final String sigardasSplendor = "Sigarda's Splendor"; + + //Original bug: [BUG] Sigarda's Splendor always draws you a card the turn after it came into play #9872 + //Test added while changing abilities' zcc while entering the battlefield + + @Test + public void sigardasSplendorTestBasic() { + addCard(Zone.HAND, playerA, sigardasSplendor, 2); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); + + setStrictChooseMode(true); + + checkHandCount("Initial hand size", 1, PhaseStep.PRECOMBAT_MAIN, playerA, 2); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, sigardasSplendor); + checkHandCount("Initial hand size (2)", 1, PhaseStep.END_TURN, playerA, 1); //-1 sigarda + checkLife("Initial life", 1, PhaseStep.END_TURN, playerA, 20); + checkHandCount("Did not draw on 1st upkeep", 3, PhaseStep.PRECOMBAT_MAIN, playerA, 3); //-1 sigarda, +1 natural draw, +1 trigger + castSpell(3, PhaseStep.POSTCOMBAT_MAIN, playerA, sigardasSplendor); + checkHandCount("Did not draw on 1st upkeep (2)", 3, PhaseStep.END_TURN, playerA, 2); //-2 sigarda, +1 natural draw, +1 trigger + checkLife("Initial life", 3, PhaseStep.END_TURN, playerA, 21); + + setChoice(playerA, "At the beginning of your upkeep"); //stack triggers + setStopAt(5, PhaseStep.PRECOMBAT_MAIN); + execute(); + assertPermanentCount(playerA, sigardasSplendor, 2); + assertHandCount(playerA, 5); //-2 sigardas, +2 natural draw, +3 trigger + } + + @Test + public void sigardasSplendorTestDamaged() { + addCard(Zone.HAND, playerA, sigardasSplendor, 2); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); + + addCard(Zone.HAND, playerB, "Scorching Spear", 2); + addCard(Zone.BATTLEFIELD, playerB, "Mountain", 1); + setStrictChooseMode(true); + + checkHandCount("Initial hand size", 1, PhaseStep.PRECOMBAT_MAIN, playerA, 2); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, sigardasSplendor); + checkHandCount("Initial hand size (2)", 1, PhaseStep.END_TURN, playerA, 1); //-1 sigarda + checkLife("Initial life", 1, PhaseStep.END_TURN, playerA, 20); + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Scorching Spear", playerA); + checkLife("Post-spear 1", 2, PhaseStep.END_TURN, playerA, 19); + checkHandCount("Did not draw on 1st upkeep", 3, PhaseStep.PRECOMBAT_MAIN, playerA, 2); //-1 sigarda, +1 natural draw + castSpell(3, PhaseStep.POSTCOMBAT_MAIN, playerA, sigardasSplendor); + checkHandCount("Did not draw on 1st upkeep (2)", 3, PhaseStep.END_TURN, playerA, 1); //-2 sigarda, +1 natural draw + checkLife("Post-splendors", 3, PhaseStep.END_TURN, playerA, 20); + castSpell(4, PhaseStep.PRECOMBAT_MAIN, playerB, "Scorching Spear", playerA); + checkLife("Post-spear 2", 4, PhaseStep.END_TURN, playerA, 19); + + setChoice(playerA, "At the beginning of your upkeep"); //stack triggers + setStopAt(5, PhaseStep.PRECOMBAT_MAIN); + execute(); + assertPermanentCount(playerA, sigardasSplendor, 2); + assertHandCount(playerA, 3); //-2 sigardas, +2 natural draw, +1 trigger + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/pip/Vault13DwellersJourneyTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/pip/Vault13DwellersJourneyTest.java index 43cc503eb68..16b0a3f9ae9 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/single/pip/Vault13DwellersJourneyTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/pip/Vault13DwellersJourneyTest.java @@ -97,10 +97,11 @@ public class Vault13DwellersJourneyTest extends CardTestPlayerBase { addTarget(playerA, "Memnite"); addTarget(playerA, "Ornithopter"); + // turn 2 activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Sacrifice"); addTarget(playerB, vault); - //Turn 3 + // turn 3 addTarget(playerA, "Squire"); addTarget(playerA, "Watchwolf"); @@ -113,10 +114,10 @@ public class Vault13DwellersJourneyTest extends CardTestPlayerBase { addTarget(playerA, "Mountain"); // for Scry 2 // turn 7 - checkExileCount("before III: Memnite exiled", 5, PhaseStep.UPKEEP, playerB, "Memnite", 1); - checkExileCount("before III: Ornithopter exiled", 5, PhaseStep.UPKEEP, playerB, "Ornithopter", 1); - checkExileCount("before III: Squire exiled", 5, PhaseStep.UPKEEP, playerB, "Squire", 1); - checkExileCount("before III: Watchwolf exiled", 5, PhaseStep.UPKEEP, playerB, "Watchwolf", 1); + checkExileCount("before III: Memnite exiled", 7, PhaseStep.UPKEEP, playerB, "Memnite", 1); + checkExileCount("before III: Ornithopter exiled", 7, PhaseStep.UPKEEP, playerB, "Ornithopter", 1); + checkExileCount("before III: Squire exiled", 7, PhaseStep.UPKEEP, playerB, "Squire", 1); + checkExileCount("before III: Watchwolf exiled", 7, PhaseStep.UPKEEP, playerB, "Watchwolf", 1); setChoice(playerA, "Memnite^Ornithopter"); setStrictChooseMode(true); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/woe/ThePrincessTakesFlightTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/woe/ThePrincessTakesFlightTest.java index ed9c0ea463f..e7b9d197590 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/single/woe/ThePrincessTakesFlightTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/woe/ThePrincessTakesFlightTest.java @@ -54,4 +54,32 @@ public class ThePrincessTakesFlightTest extends CardTestPlayerBase { assertExileCount(playerB, "Memnite", 0); assertPermanentCount(playerB, "Memnite", 1); } + @Ignore // TODO: goal of #11619 is to fix this nicely + @Test + public void testFlicker() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 5); + addCard(Zone.HAND, playerA, flight); + addCard(Zone.HAND, playerA, "Flicker of Fate"); + addCard(Zone.BATTLEFIELD, playerA, "Grizzly Bears"); + addCard(Zone.BATTLEFIELD, playerA, "Memnite"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, flight); + waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN, 1); //Saga resolves, Bear exile on stack + addTarget(playerA, "Grizzly Bears"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Flicker of Fate", flight); + addTarget(playerA, "Memnite"); + waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN, 2); //Flicker resolves, Memnite exile resolves + checkExileCount("Memnite exiled first", 1, PhaseStep.PRECOMBAT_MAIN, playerA, "Memnite", 1); + checkExileCount("Bear not yet exiled", 1, PhaseStep.PRECOMBAT_MAIN, playerA, "Grizzly Bears", 0); + waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN); //Bear exile resolves + checkExileCount("Bear exiled", 1, PhaseStep.PRECOMBAT_MAIN, playerA, "Grizzly Bears", 1); + + setStrictChooseMode(true); + setStopAt(5, PhaseStep.END_TURN); + execute(); + + assertExileCount(playerA, "Grizzly Bears", 1); //Bear stays exiled + assertPermanentCount(playerA, "Memnite", 1); + assertGraveyardCount(playerA, flight, 1); + } }