package org.mage.test.cards.abilities.keywords;
import mage.constants.PhaseStep;
import mage.constants.Zone;
import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase;
/**
* @author noxx
*/
public class MiracleTest extends CardTestPlayerBase {
/**
* Tests miracle alternative cost
*/
@Test
public void testMiracleCost() {
addCard(Zone.BATTLEFIELD, playerA, "Island", 2);
addCard(Zone.BATTLEFIELD, playerA, "Plains", 2);
// Put all creatures on the bottom of their owners' libraries.
addCard(Zone.LIBRARY, playerA, "Terminus");
// Draw a card.
addCard(Zone.HAND, playerA, "Think Twice");
skipInitShuffling();
addCard(Zone.BATTLEFIELD, playerB, "Elite Vanguard", 1);
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Think Twice");
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
// check Terminus was played
assertPermanentCount(playerB, "Elite Vanguard", 0);
}
/**
* Tests working on extra turn
*/
@Test
public void testMiracleOnExtraTurn() {
addCard(Zone.BATTLEFIELD, playerA, "Island", 4);
addCard(Zone.BATTLEFIELD, playerA, "Plains", 4);
addCard(Zone.LIBRARY, playerA, "Terminus");
addCard(Zone.LIBRARY, playerA, "Temporal Mastery");
addCard(Zone.HAND, playerA, "Think Twice");
skipInitShuffling();
addCard(Zone.BATTLEFIELD, playerB, "Elite Vanguard", 1);
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Think Twice");
setStopAt(2, PhaseStep.BEGIN_COMBAT);
execute();
// check Terminus was played
assertPermanentCount(playerB, "Elite Vanguard", 0);
}
/**
* Test that you can cast a card by miracle if you don't put it back to library before casting
*/
@Test
public void testMiracleWillWorkFromHand() {
addCard(Zone.BATTLEFIELD, playerA, "Island", 1);
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1);
addCard(Zone.LIBRARY, playerA, "Plains");
addCard(Zone.LIBRARY, playerA, "Forest");
addCard(Zone.LIBRARY, playerA, "Thunderous Wrath"); // must be the top most card
addCard(Zone.HAND, playerA, "Brainstorm");
skipInitShuffling();
castSpell(1, PhaseStep.UPKEEP, playerA, "Brainstorm");
addTarget(playerA, "Forest");
addTarget(playerA, "Plains");
addTarget(playerA, playerB);
setStopAt(1, PhaseStep.DRAW);
execute();
assertGraveyardCount(playerA, "Brainstorm", 1);
assertHandCount(playerA, "Thunderous Wrath", 0);
assertGraveyardCount(playerA, "Thunderous Wrath", 1);
assertHandCount(playerA, 0);
// check Thunderous Wrath was played
assertLife(playerA, 20);
assertLife(playerB, 15);
}
/**
* Test that you can't cast a card by miracle if you put it back to library before casting
*/
@Test
public void testMiracleWontWorkFromLibrary() {
addCard(Zone.BATTLEFIELD, playerA, "Island", 1);
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 4);
addCard(Zone.LIBRARY, playerA, "Plains");
addCard(Zone.LIBRARY, playerA, "Forest");
addCard(Zone.LIBRARY, playerA, "Thunderous Wrath");
addCard(Zone.HAND, playerA, "Brainstorm");
skipInitShuffling();
castSpell(1, PhaseStep.UPKEEP, playerA, "Brainstorm");
addTarget(playerA, "Thunderous Wrath");
addTarget(playerA, "Plains");
addTarget(playerA, playerB);
setStopAt(1, PhaseStep.DRAW);
execute();
// check Thunderous Wrath was not played
assertLife(playerA, 20);
assertLife(playerB, 20);
}
}