From abe8a4356e8d8df781cd5820303466026f6db435 Mon Sep 17 00:00:00 2001 From: jmlundeen Date: Sun, 17 Aug 2025 09:46:17 -0500 Subject: [PATCH] increase test coverage for sacrifice effects --- .../cards/single/lci/DireBlunderbussTest.java | 44 ++++++++++++++ .../single/mir/PhyrexianDreadnoughtTest.java | 59 +++++++++++++++++++ .../single/one/NahirisSacrificeTest.java | 57 ++++++++++++++++++ 3 files changed, 160 insertions(+) create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/single/lci/DireBlunderbussTest.java create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/single/mir/PhyrexianDreadnoughtTest.java create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/single/one/NahirisSacrificeTest.java diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/lci/DireBlunderbussTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/lci/DireBlunderbussTest.java new file mode 100644 index 00000000000..2acd66fb4de --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/lci/DireBlunderbussTest.java @@ -0,0 +1,44 @@ +package org.mage.test.cards.single.lci; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + + +public class DireBlunderbussTest extends CardTestPlayerBase { + + /* + Dire Blunderbuss + Color Indicator: RedArtifact — Equipment + + Equipped creature gets +3/+0 and has “Whenever this creature attacks, you may sacrifice an artifact other than Dire Blunderbuss. When you do, this creature deals damage equal to its power to target creature.” + + Equip {1} + */ + private static final String direBlunderBuss = "Dire Blunderbuss"; + + @Test + public void DireBlunderbussTest() { + setStrictChooseMode(true); + + addCard(Zone.BATTLEFIELD, playerA, "Forest"); + addCard(Zone.BATTLEFIELD, playerA, direBlunderBuss); + addCard(Zone.BATTLEFIELD, playerA, "Balduvian Bears"); + addCard(Zone.BATTLEFIELD, playerB, "Balduvian Bears@bearsB"); + addCard(Zone.BATTLEFIELD, playerA, "Tormod's Crypt"); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Equip", "Balduvian Bears"); + + attack(1, playerA, "Balduvian Bears"); + setChoice(playerA, true); + setChoice(playerA, "Tormod's Crypt"); + addTarget(playerA, "@bearsB"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertGraveyardCount(playerB, "Balduvian Bears", 1); + assertLife(playerB, 20 - 2 - 3); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/mir/PhyrexianDreadnoughtTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/mir/PhyrexianDreadnoughtTest.java new file mode 100644 index 00000000000..db3d1766d7a --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/mir/PhyrexianDreadnoughtTest.java @@ -0,0 +1,59 @@ +package org.mage.test.cards.single.mir; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.player.TestPlayer; +import org.mage.test.serverside.base.CardTestPlayerBase; + +public class PhyrexianDreadnoughtTest extends CardTestPlayerBase { + + /* + Phyrexian Dreadnought + {1} + Artifact Creature — Phyrexian Dreadnought + + Trample + + When this creature enters, sacrifice it unless you sacrifice any number of creatures with total power 12 or greater. + + 12/12 + */ + private static final String phyrexianDreadnought = "Phyrexian Dreadnought"; + + @Test + public void testPhyrexianDreadnoughtCanPay() { + setStrictChooseMode(true); + + addCard(Zone.HAND, playerA, phyrexianDreadnought); + addCard(Zone.BATTLEFIELD, playerA, phyrexianDreadnought + "@sacTarget"); + addCard(Zone.BATTLEFIELD, playerA, "Island"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, phyrexianDreadnought); + setChoice(playerA, true); + setChoice(playerA, "@sacTarget"); + setChoice(playerA, TestPlayer.CHOICE_SKIP); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertPermanentCount(playerA, phyrexianDreadnought, 1); + assertGraveyardCount(playerA, phyrexianDreadnought, 1); + } + + @Test + public void testPhyrexianDreadnoughtCantPay() { + setStrictChooseMode(true); + + addCard(Zone.HAND, playerA, phyrexianDreadnought); + addCard(Zone.BATTLEFIELD, playerA, "Island"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, phyrexianDreadnought); + + setStopAt(1, PhaseStep.END_TURN); + setChoice(playerA, false); + execute(); + + assertGraveyardCount(playerA, phyrexianDreadnought, 1); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/one/NahirisSacrificeTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/one/NahirisSacrificeTest.java new file mode 100644 index 00000000000..24087ff3541 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/one/NahirisSacrificeTest.java @@ -0,0 +1,57 @@ +package org.mage.test.cards.single.one; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + + +public class NahirisSacrificeTest extends CardTestPlayerBase { + + /* + Nahiri's Sacrifice + {1}{R} + Sorcery + + As an additional cost to cast this spell, sacrifice an artifact or creature with mana value X. + + Nahiri’s Sacrifice deals X damage divided as you choose among any number of target creatures. + */ + private static final String nahirisSacrifice = "Nahiri's Sacrifice"; + private static final String balduvianBears = "Balduvian Bears"; + @Test + public void testNahirisSacrifice() { + setStrictChooseMode(true); + + addCard(Zone.HAND, playerA, nahirisSacrifice); + addCard(Zone.BATTLEFIELD, playerA, balduvianBears); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); + addCard(Zone.BATTLEFIELD, playerB, balduvianBears + "@bearsB"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, nahirisSacrifice, "@bearsB"); + setChoice(playerA, "X=2"); + setChoice(playerA, balduvianBears); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertGraveyardCount(playerB, balduvianBears, 1); + assertGraveyardCount(playerA, nahirisSacrifice, 1); + } + + @Test + public void testNahirisSacrificePrevented() { + setStrictChooseMode(true); + + addCard(Zone.HAND, playerA, nahirisSacrifice); + addCard(Zone.BATTLEFIELD, playerA, balduvianBears); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); + addCard(Zone.BATTLEFIELD, playerB, balduvianBears + "@bearsB"); + addCard(Zone.BATTLEFIELD, playerB, "Yasharn, Implacable Earth"); + + checkPlayableAbility("Can't cast", 1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cast " + nahirisSacrifice, false); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + } +}