diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/fin/ZackFairTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/fin/ZackFairTest.java new file mode 100644 index 00000000000..842b7a213f8 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/fin/ZackFairTest.java @@ -0,0 +1,110 @@ +package org.mage.test.cards.single.fin; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.counters.CounterType; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * @author Susucr + */ +public class ZackFairTest extends CardTestPlayerBase { + + /** + * {@link mage.cards.z.ZackFair Zack Fair} {W} + * Legendary Creature — Human Soldier + * Zack Fair enters with a +1/+1 counter on it. + * {1}, Sacrifice Zack Fair: Target creature you control gains indestructible until end of turn. Put Zack Fair’s counters on that creature and attach an Equipment that was attached to Zack Fair to that creature. + * 0/1 + */ + private static final String zack = "Zack Fair"; + + @Test + public void test_NoEquip() { + addCard(Zone.HAND, playerA, zack, 1); + addCard(Zone.BATTLEFIELD, playerA, "Squire"); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, zack, true); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}", "Squire"); + + setStrictChooseMode(true); + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertCounterCount(playerA, "Squire", CounterType.P1P1, 1); + } + + @Test + public void test_OtherCountersToo() { + addCard(Zone.HAND, playerA, zack, 1); + addCard(Zone.BATTLEFIELD, playerA, "Squire"); + /** + * Lifelink + * Cycling {1}{W} ({1}{W}, Discard this card: Draw a card.) + * When you cycle this card, put a lifelink counter on target creature you control. + */ + addCard(Zone.HAND, playerA, "Splendor Mare"); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, zack, true); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cycling "); + addTarget(playerA, zack); + waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN, playerA); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}", "Squire"); + + setStrictChooseMode(true); + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertCounterCount(playerA, "Squire", CounterType.P1P1, 1); + assertCounterCount(playerA, "Squire", CounterType.LIFELINK, 1); + } + + @Test + public void test_OneEquip() { + addCard(Zone.HAND, playerA, zack, 1); + addCard(Zone.BATTLEFIELD, playerA, "Squire"); + addCard(Zone.BATTLEFIELD, playerA, "Short Sword"); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 3); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, zack, true); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Equip {1}", zack); + waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN, playerA); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}, Sacrifice", "Squire"); + + setStrictChooseMode(true); + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertCounterCount(playerA, "Squire", CounterType.P1P1, 1); + assertAttachedTo(playerA, "Short Sword", "Squire", true); + } + + @Test + public void test_TwoEquip() { + addCard(Zone.HAND, playerA, zack, 1); + addCard(Zone.BATTLEFIELD, playerA, "Squire"); + addCard(Zone.BATTLEFIELD, playerA, "Short Sword"); + addCard(Zone.BATTLEFIELD, playerA, "Golem-Skin Gauntlets"); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 5); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, zack, true); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Equip {1}", zack); + waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN, playerA); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Equip {2}", zack); + waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN, playerA); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}, Sacrifice", "Squire"); + + setChoice(playerA, "Short Sword"); + + setStrictChooseMode(true); + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertCounterCount(playerA, "Squire", CounterType.P1P1, 1); + assertAttachedTo(playerA, "Short Sword", "Squire", true); + assertAttachedTo(playerA, "Golem-Skin Gauntlets", "Squire", false); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/stx/SpitefulSquadTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/stx/SpitefulSquadTest.java new file mode 100644 index 00000000000..a9cb149f535 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/stx/SpitefulSquadTest.java @@ -0,0 +1,40 @@ +package org.mage.test.cards.single.stx; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.counters.CounterType; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * @author Susucr + */ +public class SpitefulSquadTest extends CardTestPlayerBase { + + /** + * {@link mage.cards.s.SpitefulSquad} {2}{W}{B} + * Creature — Human Warlock + * Deathtouch + * This creature enters with two +1/+1 counters on it. + * When this creature dies, put its counters on target creature you control. + * 0/0 + */ + private static final String squad = "Spiteful Squad"; + + @Test + public void test_Simple() { + addCard(Zone.BATTLEFIELD, playerA, squad); + addCard(Zone.HAND, playerA, "Murder"); + addCard(Zone.BATTLEFIELD, playerA, "Squire"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 3); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Murder", squad, true); + addTarget(playerA, "Squire"); + + setStrictChooseMode(true); + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertCounterCount(playerA, "Squire", CounterType.P1P1, 2); + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/PutSourceCountersOnTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/PutSourceCountersOnTargetEffect.java index 455cba7d14e..60e0232529c 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/PutSourceCountersOnTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/PutSourceCountersOnTargetEffect.java @@ -27,7 +27,7 @@ public class PutSourceCountersOnTargetEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Permanent sourcePermanent = (Permanent) getValue("permanentLeftBattlefield"); + Permanent sourcePermanent = source.getSourcePermanentOrLKI(game); Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); if (sourcePermanent == null || permanent == null) { return false;