From 7b4f2dd33a1e372e92a87f98a0ef0598e9f69e3d Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Thu, 2 Jul 2015 21:53:28 +0200 Subject: [PATCH] * Added a bestow test. --- .../cards/abilities/keywords/BestowTest.java | 170 +++++++++++------- 1 file changed, 109 insertions(+), 61 deletions(-) diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BestowTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BestowTest.java index b2a1690abd8..584008d440e 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BestowTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BestowTest.java @@ -25,7 +25,6 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package org.mage.test.cards.abilities.keywords; import mage.constants.CardType; @@ -44,9 +43,9 @@ import org.mage.test.serverside.base.CardTestPlayerBase; public class BestowTest extends CardTestPlayerBase { /** - * Tests that if from bestow permanent targeted creature - * gets protection from the color of the bestow permanent, - * the bestow permanent becomes a creature on the battlefield. + * Tests that if from bestow permanent targeted creature gets protection + * from the color of the bestow permanent, the bestow permanent becomes a + * creature on the battlefield. * */ @@ -67,7 +66,6 @@ public class BestowTest extends CardTestPlayerBase { * Scry 1. (Look at the top card of your library. You may put that card on the bottom of your library.) * */ - @Test public void bestowEnchantmentToCreature() { addCard(Zone.BATTLEFIELD, playerA, "Plains", 5); @@ -97,7 +95,7 @@ public class BestowTest extends CardTestPlayerBase { addCard(Zone.BATTLEFIELD, playerA, "Forest", 6); // Creature - Giant 3/5 addCard(Zone.BATTLEFIELD, playerA, "Silent Artisan"); - + addCard(Zone.HAND, playerA, "Experiment One"); // Enchanted creature gets +4/+2. addCard(Zone.HAND, playerA, "Boon Satyr"); @@ -111,26 +109,27 @@ public class BestowTest extends CardTestPlayerBase { // because Boon Satyr is no creature on the battlefield, evolve may not trigger assertPermanentCount(playerA, "Boon Satyr", 1); Permanent boonSatyr = getPermanent("Boon Satyr", playerA); - Assert.assertTrue("Boon Satyr may not be a creature",!boonSatyr.getCardType().contains(CardType.CREATURE)); + Assert.assertTrue("Boon Satyr may not be a creature", !boonSatyr.getCardType().contains(CardType.CREATURE)); assertPermanentCount(playerA, "Silent Artisan", 1); assertPermanentCount(playerA, "Experiment One", 1); assertPowerToughness(playerA, "Experiment One", 1, 1); - assertPowerToughness(playerA, "Silent Artisan", 7, 7); - + assertPowerToughness(playerA, "Silent Artisan", 7, 7); + } - + /** - * Test that the bestow enchantment becomes a creature if the enchanted creature dies + * Test that the bestow enchantment becomes a creature if the enchanted + * creature dies */ @Test public void bestowEnchantmentBecomesCreature() { addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); - addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); addCard(Zone.HAND, playerA, "Hopeful Eidolon"); - + addCard(Zone.BATTLEFIELD, playerB, "Mountain", 1); addCard(Zone.HAND, playerB, "Lightning Bolt"); - + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Hopeful Eidolon using bestow", "Silvercoat Lion"); castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Lightning Bolt", "Silvercoat Lion"); @@ -140,7 +139,7 @@ public class BestowTest extends CardTestPlayerBase { // because Boon Satyr is no creature on the battlefield, evolve may not trigger assertLife(playerA, 20); assertLife(playerB, 20); - + assertPermanentCount(playerA, "Silvercoat Lion", 0); assertPermanentCount(playerA, "Hopeful Eidolon", 1); assertPowerToughness(playerA, "Hopeful Eidolon", 1, 1); @@ -149,23 +148,23 @@ public class BestowTest extends CardTestPlayerBase { Assert.assertTrue("Hopeful Eidolon has to be a creature but is not", hopefulEidolon.getCardType().contains(CardType.CREATURE)); Assert.assertTrue("Hopeful Eidolon has to be an enchantment but is not", hopefulEidolon.getCardType().contains(CardType.ENCHANTMENT)); - } - + /** - * Test that card cast with bestow will not be tapped, if creatures come into play tapped + * Test that card cast with bestow will not be tapped, if creatures come + * into play tapped */ @Test public void bestowEnchantmentWillNotBeTapped() { addCard(Zone.BATTLEFIELD, playerA, "Forest", 6); addCard(Zone.BATTLEFIELD, playerA, "Silent Artisan"); - + addCard(Zone.HAND, playerA, "Boon Satyr"); - + // Enchantment {1}{W} // Creatures your opponents control enter the battlefield tapped. addCard(Zone.BATTLEFIELD, playerB, "Imposing Sovereign"); - + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Boon Satyr using bestow", "Silent Artisan"); setStopAt(1, PhaseStep.END_TURN); @@ -176,34 +175,32 @@ public class BestowTest extends CardTestPlayerBase { assertPowerToughness(playerA, "Silent Artisan", 7, 7); // because cast with bestow, Boon Satyr may not be tapped assertTapped("Boon Satyr", false); - - } - + + } + /** - * If I have a bestowed creature on the battlefield and my opponent uses Far // Away casting - * both sides, will the creature that has bestow come in time for it to be sacrificed or does - * it fully resolve before the creature comes in? - * + * If I have a bestowed creature on the battlefield and my opponent uses Far + * // Away casting both sides, will the creature that has bestow come in + * time for it to be sacrificed or does it fully resolve before the creature + * comes in? + * * Bestowed creature can be used to sacrifice a creature for the Away part. * http://www.mtgsalvation.com/forums/magic-fundamentals/magic-rulings/magic-rulings-archives/513828-bestow-far-away - */ + */ @Test @Ignore // Handling of targets of Fused spells is not handled yet in TestPlayer class public void bestowWithFusedSpell() { addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); /** - * Cyclops of One-Eyed Pass {2}{R}{R} - * Creature - Cyclops - * 5/2 + * Cyclops of One-Eyed Pass {2}{R}{R} Creature - Cyclops 5/2 */ addCard(Zone.BATTLEFIELD, playerA, "Cyclops of One-Eyed Pass"); - + /** - * Nyxborn Rollicker {R} - * Enchantment Creature - Satyr - * 1/1 - * Bestow {1}{R} (If you cast this card for its bestow cost, it's an Aura spell with enchant creature. It becomes a creature again if it's not attached to a creature.) - * Enchanted creature gets +1/+1. + * Nyxborn Rollicker {R} Enchantment Creature - Satyr 1/1 Bestow {1}{R} + * (If you cast this card for its bestow cost, it's an Aura spell with + * enchant creature. It becomes a creature again if it's not attached to + * a creature.) Enchanted creature gets +1/+1. */ addCard(Zone.HAND, playerA, "Nyxborn Rollicker"); @@ -211,18 +208,14 @@ public class BestowTest extends CardTestPlayerBase { addCard(Zone.BATTLEFIELD, playerB, "Island", 2); /** - * Far {1}{U} - * Instant - * Return target creature to its owner's hand. - * Away {2}{B} - * Instant - * Target player sacrifices a creature. - * Fuse (You may cast one or both halves of this card from your hand.) - */ + * Far {1}{U} Instant Return target creature to its owner's hand. Away + * {2}{B} Instant Target player sacrifices a creature. Fuse (You may + * cast one or both halves of this card from your hand.) + */ addCard(Zone.HAND, playerB, "Far // Away"); - + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Nyxborn Rollicker using bestow", "Cyclops of One-Eyed Pass"); - + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "fused Far // Away", "Cyclops of One-Eyed Pass^targetPlayer=PlayerA"); playerA.addTarget("Nyxborn Rollicker"); @@ -231,18 +224,18 @@ public class BestowTest extends CardTestPlayerBase { assertHandCount(playerA, 0); assertHandCount(playerB, 0); - + assertGraveyardCount(playerB, "Far // Away", 1); - + assertPermanentCount(playerA, "Nyxborn Rollicker", 0); assertGraveyardCount(playerA, "Nyxborn Rollicker", 1); - + } /** - * Test that CMC of a spell cast with bestowed is correct - * Disdainful Stroke doesn't check converted mana cost correctly. Opponent was - * able to use it to counter a Hypnotic Siren cast with Bestow. + * Test that CMC of a spell cast with bestowed is correct Disdainful Stroke + * doesn't check converted mana cost correctly. Opponent was able to use it + * to counter a Hypnotic Siren cast with Bestow. */ @Test public void bestowCheckForCorrectCMC() { @@ -275,14 +268,14 @@ public class BestowTest extends CardTestPlayerBase { // because cast with bestow, Boon Satyr may not be tapped assertPermanentCount(playerA, "Silvercoat Lion", 1); - assertPowerToughness(playerA, "Silvercoat Lion", 3,3); + assertPowerToughness(playerA, "Silvercoat Lion", 3, 3); } - - /** - * - * - * + + /** + * + * + * */ @Test public void bestowMogissWarhound() { @@ -311,5 +304,60 @@ public class BestowTest extends CardTestPlayerBase { assertPermanentCount(playerA, "Mogis's Warhound", 1); assertGraveyardCount(playerA, "Silvercoat Lion", 1); - } + } + + /* + * Bug with the Nighthowler Card. Card does sometimes not get a creature + * after Bestow. + + Steps: + 1) Cast any creature + 2) Cast Nightowler using Bestow on that creature + 3) Make sure creature is tapped + 4) Opponent uses any spell that kills creature which is bestowed by nighthowler + 5) Result: Nighthowler is still on the field, but is no creature (no Power/Toughness) + + Expected:Nighthowler gets on field as a creature + + Important: This happens ONLY if the creature is killed with a spell when + its TAPPED! + + */ + @Test + public void bestowNighthowlerTest() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 4); + // Instant - {2}{R}{R} + // Chandra's Outrage deals 4 damage to target creature and 2 damage to that creature's controller. + addCard(Zone.HAND, playerA, "Chandra's Outrage"); + + // Enchantment Creature — Horror + // 0/0 + // Bestow {2}{B}{B} + // Nighthowler and enchanted creature each get +X/+X, where X is the number of creature cards in all graveyards. + addCard(Zone.HAND, playerB, "Nighthowler"); + addCard(Zone.BATTLEFIELD, playerB, "Swamp", 4); + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + addCard(Zone.GRAVEYARD, playerB, "Pillarfield Ox"); + + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Nighthowler using bestow", "Silvercoat Lion"); + + attack(2, playerB, "Silvercoat Lion"); + + castSpell(2, PhaseStep.POSTCOMBAT_MAIN, playerA, "Chandra's Outrage", "Silvercoat Lion"); + + setStopAt(2, PhaseStep.END_TURN); + execute(); + + assertLife(playerB, 18); // -2 from Chandra's Outrage + assertLife(playerA, 17); // -3 from attack Nighthowler + + assertGraveyardCount(playerA, "Chandra's Outrage", 1); + assertGraveyardCount(playerB, "Silvercoat Lion", 1); + assertPermanentCount(playerB, "Nighthowler", 1); + assertPowerToughness(playerB, "Nighthowler", 2, 2); + Permanent nighthowler = getPermanent("Nighthowler", playerB); + + Assert.assertEquals("Nighthowler has to be a creature", true, nighthowler.getCardType().contains(CardType.CREATURE)); + + } }