diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/enters/BloodMoonTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/enters/BloodMoonTest.java index 52b8740aac1..d2844086f62 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/enters/BloodMoonTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/enters/BloodMoonTest.java @@ -5,10 +5,13 @@ */ package org.mage.test.cards.abilities.enters; +import mage.constants.CardType; import mage.constants.PhaseStep; +import mage.constants.SubType; import mage.constants.Zone; import mage.game.permanent.Permanent; import org.junit.Assert; +import org.junit.Ignore; import org.junit.Test; import org.mage.test.serverside.base.CardTestPlayerBase; @@ -90,7 +93,7 @@ public class BloodMoonTest extends CardTestPlayerBase { * Spreading Seas was played turn 3 in a Steam Vents, Blood Moon turn 7 or * something * - * The enchanted Steam Vents was producing only U when ir should produce + * The enchanted Steam Vents was producing only U when it should produce * only R because of blood moon's time stamp. * * http://blogs.magicjudges.org/articles/2013/06/18/blood-moon-in-a-modern-environment/ @@ -238,4 +241,167 @@ public class BloodMoonTest extends CardTestPlayerBase { Assert.assertTrue("The mana the land can produce should be [{R}] but it's " + playerA.getManaAvailable(currentGame).toString(), playerA.getManaAvailable(currentGame).toString().equals("[{R}]")); } + + /** + * If Blood Moon enters the battlefield with an animated Mutavault in play, + * the Mutavault stays a 2/2 creature with all creature types and “gains” + * the land type mountain (it can also tap for R). However, once the turn + * ends, the Mutavault will loses both of its abilities and become a non + * basic mountain named Mutavault. + */ + @Test + public void testBloodMoonMutavault() { + + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + + // {T}: Add {C} to your mana pool. + // {1}: Mutavault becomes a 2/2 creature with all creature types until end of turn. It's still a land. + addCard(Zone.BATTLEFIELD, playerA, "Mutavault", 1); + + // Blood Moon 2R + // Enchantment + // Nonbasic lands are Mountains + addCard(Zone.HAND, playerB, "Blood Moon", 1); + addCard(Zone.BATTLEFIELD, playerB, "Mountain", 3); + + activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}: "); + + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Blood Moon"); + + setStopAt(2, PhaseStep.END_TURN); + + execute(); + + assertPermanentCount(playerB, "Blood Moon", 1); + assertPowerToughness(playerA, "Mutavault", 2, 2); + assertType("Mutavault", CardType.LAND, SubType.MOUNTAIN); + assertType("Swamp", CardType.LAND, SubType.SWAMP); + + Assert.assertTrue("The mana the land can produce should be [{R}] but it's " + playerA.getManaAvailable(currentGame).toString(), playerA.getManaAvailable(currentGame).toString().equals("[{R}]")); + } + + @Test + public void testBloodMoonMutavaultEnd() { + + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + + // {T}: Add {C} to your mana pool. + // {1}: Mutavault becomes a 2/2 creature with all creature types until end of turn. It's still a land. + addCard(Zone.BATTLEFIELD, playerA, "Mutavault", 1); + + // Blood Moon 2R + // Enchantment + // Nonbasic lands are Mountains + addCard(Zone.HAND, playerB, "Blood Moon", 1); + addCard(Zone.BATTLEFIELD, playerB, "Mountain", 3); + + activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}: "); + + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Blood Moon"); + + setStopAt(3, PhaseStep.PRECOMBAT_MAIN); + + execute(); + + assertPermanentCount(playerB, "Blood Moon", 1); + assertPowerToughness(playerA, "Mutavault", 0, 0); + assertType("Mutavault", CardType.LAND, SubType.MOUNTAIN); + assertType("Swamp", CardType.LAND, SubType.SWAMP); + + Assert.assertTrue("The mana the lands can produce should be [{B}{R}] but it's " + playerA.getManaAvailable(currentGame).toString(), playerA.getManaAvailable(currentGame).toString().equals("[{B}{R}]")); + } + + /** + * If Blood Moon is on the battlefield, Flagstones of Trokair will enter the + * battlefield as a legendary non-basic Mountain. If Flagstones of Trokair + * is put into the graveyard due to “Legends rule” or because it was + * destroyed, its ability doesn’t trigger, because it doesn’t exist: it + * won’t fetch you a Plains. + */ + @Test + public void testBloodMoonFlagstonesOfTrokair() { + // {T}: Add {W} to your mana pool. + // When Flagstones of Trokair is put into a graveyard from the battlefield, you may search + // your library for a Plains card and put it onto the battlefield tapped. If you do, shuffle your library. + addCard(Zone.HAND, playerA, "Flagstones of Trokair", 1); + addCard(Zone.LIBRARY, playerA, "Plains"); + + // Blood Moon 2R + // Enchantment + // Nonbasic lands are Mountains + addCard(Zone.BATTLEFIELD, playerB, "Blood Moon"); + addCard(Zone.BATTLEFIELD, playerB, "Mountain", 3); + addCard(Zone.HAND, playerB, "Stone Rain"); + + playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Flagstones of Trokair"); + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Stone Rain", "Flagstones of Trokair"); + + setStopAt(2, PhaseStep.BEGIN_COMBAT); + + execute(); + + assertPermanentCount(playerB, "Blood Moon", 1); + assertGraveyardCount(playerB, "Stone Rain", 1); + + assertPermanentCount(playerA, "Flagstones of Trokair", 0); + assertGraveyardCount(playerA, "Flagstones of Trokair", 1); + + assertPermanentCount(playerA, 0); + } + + /** + * Because Blood Moon’s static ability operates only when it’s on the + * battlefield and begins affecting any nonbasic lands immediately. In fact, + * Blood Moon’s effect is so quick that once a non-basic land hits the + * battlefield it’s going to be affected. Therefore: + * + * If a nonbasic land’s has EtB triggered abilities, these will not trigger + * because the ability isn’t there (it’s gone). Effects that modify the way + * the land enters the battlefield are replacement effects. They are applied + * before the permanent enters the battlefield and taking into account + * continuous effects that already exist and would apply to the permanent. + * (see CR 614.12). + * + * 614.12 Some replacement effects modify how a permanent enters the + * battlefield. (See rules 614.1c-d.) Such effects may come from the + * permanent itself if they affect only that permanent (as opposed to a + * general subset of permanents that includes it). They may also come from + * other sources. To determine which replacement effects apply and how they + * apply, check the characteristics of the permanent as it would exist on + * the battlefield, taking into account replacement effects that have + * already modified how it enters the battlefield (see rule 616.1), + * continuous effects from the permanent's own static abilities that would + * apply to it once it's on the battlefield, and continuous effects that + * ..........................................=========================== + * already exist and would apply to the permanent. + * ================================================ + * + * Madblind Mountain enters the battlefield untapped, as a nonbasic Mountain + * with single mana ability and no other. + */ + @Test + @Ignore + public void testBloodMoonMadblindMountain() { + // {T}: Add {R} to your mana pool. + // Madblind Mountain enters the battlefield tapped. + // {R}, {tap}: Shuffle your library. Activate this ability only if you control two or more red permanents. + addCard(Zone.HAND, playerA, "Madblind Mountain", 1); + + // Blood Moon 2R + // Enchantment + // Nonbasic lands are Mountains + addCard(Zone.BATTLEFIELD, playerB, "Blood Moon"); + + playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Madblind Mountain"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + + execute(); + + assertPermanentCount(playerB, "Blood Moon", 1); + assertPermanentCount(playerA, "Madblind Mountain", 1); + + assertTapped("Madblind Mountain", false); // it may not be tapped because the etB effect was removed by Blood Moon + + } }