From 452ba945e0a22116df926d7a9f85543f39925908 Mon Sep 17 00:00:00 2001 From: Ingmar Goudt Date: Mon, 10 Aug 2020 23:03:12 +0200 Subject: [PATCH] add some m21 tests --- Mage.Sets/src/mage/cards/e/EpitaphGolem.java | 26 -------- .../test/cards/single/iko/BlitzLeechTest.java | 4 ++ .../single/m21/ContainmentPriestTest.java | 32 ++++++++++ .../cards/single/m21/CrashThroughTest.java | 30 +++++++++ .../cards/single/m21/DaybreakChargerTest.java | 25 ++++++++ .../single/m21/DeathbloomThallidTest.java | 26 ++++++++ .../cards/single/m21/DemonicEmbraceTest.java | 29 +++++++++ .../single/m21/DireFleetWarmongerTest.java | 27 ++++++++ .../cards/single/m21/DiscontinuityTest.java | 24 ++++++++ .../cards/single/m21/DoubleVisionTest.java | 28 +++++++++ .../mage/test/cards/single/m21/DubTest.java | 33 ++++++++++ .../cards/single/m21/ElderGargarothTest.java | 61 +++++++++++++++++++ .../test/cards/single/m21/EliminateTest.java | 37 +++++++++++ .../base/impl/CardTestPlayerAPIImpl.java | 14 +++++ 14 files changed, 370 insertions(+), 26 deletions(-) create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/single/iko/BlitzLeechTest.java create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/single/m21/ContainmentPriestTest.java create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/single/m21/CrashThroughTest.java create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DaybreakChargerTest.java create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DeathbloomThallidTest.java create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DemonicEmbraceTest.java create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DireFleetWarmongerTest.java create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DiscontinuityTest.java create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DoubleVisionTest.java create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DubTest.java create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/single/m21/ElderGargarothTest.java create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/single/m21/EliminateTest.java diff --git a/Mage.Sets/src/mage/cards/e/EpitaphGolem.java b/Mage.Sets/src/mage/cards/e/EpitaphGolem.java index 5d747a640cd..96c1b3eba67 100644 --- a/Mage.Sets/src/mage/cards/e/EpitaphGolem.java +++ b/Mage.Sets/src/mage/cards/e/EpitaphGolem.java @@ -48,29 +48,3 @@ public final class EpitaphGolem extends CardImpl { return new EpitaphGolem(this); } } - -class EpitaphGolemGraveyardToLibraryEffect extends OneShotEffect { - - public EpitaphGolemGraveyardToLibraryEffect() { - super(Outcome.Benefit); - this.staticText = "Put target card from your graveyard on the bottom of your library"; - } - - public EpitaphGolemGraveyardToLibraryEffect(final EpitaphGolemGraveyardToLibraryEffect effect) { - super(effect); - } - - @Override - public EpitaphGolemGraveyardToLibraryEffect copy() { - return new EpitaphGolemGraveyardToLibraryEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - return controller.putCardsOnBottomOfLibrary(game.getCard(getTargetPointer().getFirst(game, source)), game, source, true); - } - return false; - } -} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/iko/BlitzLeechTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/iko/BlitzLeechTest.java new file mode 100644 index 00000000000..de2719da982 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/iko/BlitzLeechTest.java @@ -0,0 +1,4 @@ +package org.mage.test.cards.single.iko; + +public class BlitzLeechTest { +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/ContainmentPriestTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/ContainmentPriestTest.java new file mode 100644 index 00000000000..c609c1503a3 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/ContainmentPriestTest.java @@ -0,0 +1,32 @@ +package org.mage.test.cards.single.m21; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +public class ContainmentPriestTest extends CardTestPlayerBase { + + @Test + public void replacementEffect(){ + // If a nontoken creature would enter the battlefield and it wasn't cast, exile it instead. + addCard(Zone.BATTLEFIELD, playerA, "Containment Priest"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2); + addCard(Zone.GRAVEYARD, playerA, "Grizzly Bears"); + addCard(Zone.GRAVEYARD, playerB, "Scryb Sprites"); + + // Each player puts a creature card from their graveyard onto the battlefield. + addCard(Zone.HAND, playerA, "Exhume"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Exhume"); + addTarget(playerA, "Grizzly Bears"); + addTarget(playerB, "Scryb Sprites"); + setStrictChooseMode(true); + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + assertAllCommandsUsed(); + + assertExileCount(playerA, "Grizzly Bears", 1); + assertExileCount(playerB, "Scryb Sprites", 1); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/CrashThroughTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/CrashThroughTest.java new file mode 100644 index 00000000000..78924a509d9 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/CrashThroughTest.java @@ -0,0 +1,30 @@ +package org.mage.test.cards.single.m21; + +import mage.abilities.keyword.TrampleAbility; +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +public class CrashThroughTest extends CardTestPlayerBase { + + @Test + public void crashThrough() { + // Creatures you control gain trample until end of turn. + // Draw a card. + addCard(Zone.HAND, playerA, "Crash Through"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); + addCard(Zone.BATTLEFIELD, playerA, "Grizzly Bears"); + addCard(Zone.BATTLEFIELD, playerB, "Scryb Sprites"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Crash Through"); + setStrictChooseMode(true); + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + assertAllCommandsUsed(); + assertAbility(playerA, "Grizzly Bears", TrampleAbility.getInstance(), true); + assertAbility(playerB, "Scryb Sprites", TrampleAbility.getInstance(), false); + assertHandCount(playerA, 1); + + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DaybreakChargerTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DaybreakChargerTest.java new file mode 100644 index 00000000000..778428e8c42 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DaybreakChargerTest.java @@ -0,0 +1,25 @@ +package org.mage.test.cards.single.m21; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +public class DaybreakChargerTest extends CardTestPlayerBase { + + @Test + public void etbTrigger(){ + // When Daybreak Charger enters the battlefield, target creature gets +2/+0 until end of turn. + addCard(Zone.HAND, playerA, "Daybreak Charger"); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Daybreak Charger"); + addTarget(playerA, "Daybreak Charger"); + setStrictChooseMode(true); + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + assertAllCommandsUsed(); + + assertPowerToughness(playerA, "Daybreak Charger", 5, 1); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DeathbloomThallidTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DeathbloomThallidTest.java new file mode 100644 index 00000000000..65eacfd0573 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DeathbloomThallidTest.java @@ -0,0 +1,26 @@ +package org.mage.test.cards.single.m21; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +public class DeathbloomThallidTest extends CardTestPlayerBase { + + @Test + public void diesTrigger() { + // When Deathbloom Thallid dies, create a 1/1 green Saproling creature token. + addCard(Zone.BATTLEFIELD, playerA, "Deathbloom Thallid"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); + addCard(Zone.HAND, playerA, "Shock"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Shock", "Deathbloom Thallid"); + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + setStrictChooseMode(true); + execute(); + assertAllCommandsUsed(); + + assertPermanentCount(playerA, "Saproling", 1); + + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DemonicEmbraceTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DemonicEmbraceTest.java new file mode 100644 index 00000000000..84b1b8cea29 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DemonicEmbraceTest.java @@ -0,0 +1,29 @@ +package org.mage.test.cards.single.m21; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Ignore; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +public class DemonicEmbraceTest extends CardTestPlayerBase { + + @Test + @Ignore + public void playFromGraveyard() { + // Enchanted creature gets +3/+1, has flying, and is a Demon in addition to its other types. + // You may cast Demonic Embrace from your graveyard by paying 3 life and discarding a card in addition to paying its other costs. + addCard(Zone.GRAVEYARD, playerA, "Demonic Embrace"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 3); + addCard(Zone.HAND, playerA, "Mountain"); + addCard(Zone.BATTLEFIELD, playerA, "Grizzly Bears"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Demonic Embrace", "Grizzly Bears"); + //addTarget(playerA, ); + addTarget(playerA, "Mountain"); + setStrictChooseMode(true); + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + assertAllCommandsUsed(); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DireFleetWarmongerTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DireFleetWarmongerTest.java new file mode 100644 index 00000000000..b7c8c866714 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DireFleetWarmongerTest.java @@ -0,0 +1,27 @@ +package org.mage.test.cards.single.m21; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +public class DireFleetWarmongerTest extends CardTestPlayerBase { + + + @Test + public void sacCreatureToBoost() { + // At the beginning of combat on your turn, you may sacrifice another creature. + // If you do, Dire Fleet Warmonger gets +2/+2 and gains trample until end of turn. + addCard(Zone.BATTLEFIELD, playerA, "Dire Fleet Warmonger"); + addCard(Zone.BATTLEFIELD, playerA, "Grizzly Bears"); + + setChoice(playerA, "Yes"); + addTarget(playerA, "Grizzly Bears"); + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + setStrictChooseMode(true); + execute(); + assertAllCommandsUsed(); + + assertPowerToughness(playerA, "Dire Fleet Warmonger", 5, 5); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DiscontinuityTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DiscontinuityTest.java new file mode 100644 index 00000000000..a184fe87810 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DiscontinuityTest.java @@ -0,0 +1,24 @@ +package org.mage.test.cards.single.m21; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +public class DiscontinuityTest extends CardTestPlayerBase { + + @Test + public void testCostReduction(){ + addCard(Zone.BATTLEFIELD, playerA, "Island", 2); + + // As long as it's your turn, this spell costs {2}{U}{U} less to cast. + addCard(Zone.HAND, playerA, "Discontinuity"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Discontinuity"); + setStrictChooseMode(true); + setStopAt(1, PhaseStep.END_TURN); + execute(); + assertAllCommandsUsed(); + assertTappedCount("Island", true, 2); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DoubleVisionTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DoubleVisionTest.java new file mode 100644 index 00000000000..1632afb8551 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DoubleVisionTest.java @@ -0,0 +1,28 @@ +package org.mage.test.cards.single.m21; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +public class DoubleVisionTest extends CardTestPlayerBase { + + @Test + public void testFirstInstant(){ + // Whenever you cast your first instant or sorcery spell each turn, copy that spell. + // You may choose new targets for the copy. + addCard(Zone.BATTLEFIELD, playerA, "Double Vision"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); + addCard(Zone.HAND, playerA, "Shock"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Shock", playerB); + setChoice(playerA, "Yes"); + addTarget(playerA, playerB); + setStopAt(1, PhaseStep.END_TURN); + setStrictChooseMode(true); + execute(); + assertAllCommandsUsed(); + + assertLife(playerB, 16); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DubTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DubTest.java new file mode 100644 index 00000000000..3a5fcce2ce6 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/DubTest.java @@ -0,0 +1,33 @@ +package org.mage.test.cards.single.m21; + +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.constants.PhaseStep; +import mage.constants.SubType; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +public class DubTest extends CardTestPlayerBase { + + @Test + public void testBoostAndAbilities(){ + + // Enchanted creature gets +2/+2, has first strike, and is a Knight in addition to its other types. + addCard(Zone.HAND, playerA, "Dub"); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 3); + addCard(Zone.BATTLEFIELD, playerA, "Scryb Sprites"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Dub", "Scryb Sprites"); + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + setStrictChooseMode(true); + execute(); + assertAllCommandsUsed(); + + assertAbility(playerA, "Scryb Sprites", FirstStrikeAbility.getInstance(), true); + assertAbility(playerA, "Scryb Sprites", FlyingAbility.getInstance(), true); + assertPowerToughness(playerA, "Scryb Sprites", 3, 3); + assertSubtype("Scryb Sprites", SubType.KNIGHT); + assertSubtype("Scryb Sprites", SubType.FAERIE); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/ElderGargarothTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/ElderGargarothTest.java new file mode 100644 index 00000000000..b2c77885906 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/ElderGargarothTest.java @@ -0,0 +1,61 @@ +package org.mage.test.cards.single.m21; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +public class ElderGargarothTest extends CardTestPlayerBase { + + private static final String gargaroth = "Elder Gargaroth"; + + @Test + public void createToken(){ + // Whenever Elder Gargaroth attacks or blocks, choose one — + + addCard(Zone.BATTLEFIELD, playerA, gargaroth); + + attack(3, playerA, gargaroth, playerB); + // • Create a 3/3 green Beast creature token. + setModeChoice(playerA, "1"); + setStrictChooseMode(true); + setStopAt(3, PhaseStep.POSTCOMBAT_MAIN); + execute(); + assertAllCommandsUsed(); + assertPermanentCount(playerA, "Beast", 1); + } + + @Test + public void gainLife(){ + // Whenever Elder Gargaroth attacks or blocks, choose one — + + addCard(Zone.BATTLEFIELD, playerA, gargaroth); + + attack(3, playerA, gargaroth, playerB); + // • You gain 3 life. + setModeChoice(playerA, "2"); + setStrictChooseMode(true); + setStopAt(3, PhaseStep.POSTCOMBAT_MAIN); + execute(); + assertAllCommandsUsed(); + assertLife(playerA, 23); + } + + @Test + public void drawCard(){ + // Whenever Elder Gargaroth attacks or blocks, choose one — + + addCard(Zone.BATTLEFIELD, playerA, gargaroth); + + attack(3, playerA, gargaroth, playerB); + + // • Draw a card. + setModeChoice(playerA, "3"); + setStrictChooseMode(true); + setStopAt(3, PhaseStep.POSTCOMBAT_MAIN); + execute(); + assertAllCommandsUsed(); + + assertHandCount(playerA, 2); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/EliminateTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/EliminateTest.java new file mode 100644 index 00000000000..6b1dcb4b80d --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/m21/EliminateTest.java @@ -0,0 +1,37 @@ +package org.mage.test.cards.single.m21; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +public class EliminateTest extends CardTestPlayerBase { + + @Test + public void destroyCreature(){ + addCard(Zone.BATTLEFIELD, playerB, "Ancient Crab"); + addCard(Zone.HAND, playerA, "Eliminate"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Eliminate", "Ancient Crab"); + setStrictChooseMode(true); + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + assertAllCommandsUsed(); + assertGraveyardCount(playerB, "Ancient Crab", 1); + } + + @Test + public void destroyPlaneswalker(){ + addCard(Zone.BATTLEFIELD, playerB, "Basri Ket"); + addCard(Zone.HAND, playerA, "Eliminate"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Eliminate", "Basri Ket"); + setStrictChooseMode(true); + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + assertAllCommandsUsed(); + assertGraveyardCount(playerB, "Basri Ket", 1); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java index 8eb95b20894..a7e11276fe0 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java @@ -1115,6 +1115,20 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement } } + /** + * Assert whether a permanent is a specified subtype + * + * @param cardName Name of the permanent that should be checked. + * @param subType a subtype to test for + */ + public void assertSubtype(String cardName, SubType subType) throws AssertionError { + //Assert.assertNotEquals("", cardName); + Permanent found = getPermanent(cardName); + if (subType != null) { + Assert.assertTrue("(Battlefield) card sub-type equal (" + cardName + ':' + subType.getDescription() + ')', found.getSubtype(currentGame).contains(subType)); + } + } + /** * Assert permanent color *