package org.mage.test.cards.single.roe; import mage.cards.Card; import mage.constants.PhaseStep; import mage.constants.Zone; import org.junit.Assert; import org.junit.Test; import org.mage.test.serverside.base.CardTestPlayerBase; /** * * @author magenoxx_at_gmail.com */ public class CastThroughTimeTest extends CardTestPlayerBase { /** * Tests Rebound works with a card that has no Rebound itself */ @Test public void testCastWithRebound() { addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); /* * Instant and sorcery spells you control have rebound. (Exile the spell as * it resolves if you cast it from your hand. At the beginning of your next * upkeep, you may cast that card from exile without paying its mana cost.) * */ addCard(Zone.BATTLEFIELD, playerA, "Cast Through Time"); addCard(Zone.HAND, playerA, "Lightning Bolt"); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerB); setStopAt(3, PhaseStep.BEGIN_COMBAT); execute(); assertGraveyardCount(playerA, "Lightning Bolt", 1); assertLife(playerA, 20); assertLife(playerB, 14); } /** * Tests rebound from two Cast Through Time instances * Should have no effect for second copy */ @Test public void testCastWithDoubleRebound() { addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); addCard(Zone.BATTLEFIELD, playerA, "Cast Through Time", 2); addCard(Zone.HAND, playerA, "Lightning Bolt"); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerB); setStopAt(3, PhaseStep.BEGIN_COMBAT); execute(); assertLife(playerB, 14); } /** * Tests rebound tooltip */ @Test public void testReboundTooltipExists() { addCard(Zone.BATTLEFIELD, playerA, "Cast Through Time"); addCard(Zone.HAND, playerA, "Lightning Bolt"); setStopAt(1, PhaseStep.BEGIN_COMBAT); execute(); boolean found = false; for (Card card : currentGame.getPlayer(playerA.getId()).getHand().getCards(currentGame)) { if (card.getName().equals("Lightning Bolt")) { for (String rule : card.getRules(currentGame)) { if (rule.startsWith("Rebound")) { found = true; } } } } Assert.assertTrue("Couldn't find Rebound rule text displayed for the card", found); } /** * Tests Rebound disappeared */ @Test public void testCastWithoutRebound() { addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); addCard(Zone.BATTLEFIELD, playerA, "Forest", 2); addCard(Zone.BATTLEFIELD, playerA, "Cast Through Time"); addCard(Zone.HAND, playerA, "Lightning Bolt"); addCard(Zone.HAND, playerA, "Naturalize"); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Naturalize", "Cast Through Time"); castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Lightning Bolt", playerB); setStopAt(3, PhaseStep.BEGIN_COMBAT); execute(); assertLife(playerB, 17); } /** * Tests other than Battlefield zone */ @Test public void testInAnotherZone() { addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); addCard(Zone.GRAVEYARD, playerA, "Cast Through Time"); addCard(Zone.HAND, playerA, "Lightning Bolt"); castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Lightning Bolt", playerB); setStopAt(3, PhaseStep.BEGIN_COMBAT); execute(); assertLife(playerB, 17); } }