package org.mage.test.cards.triggers;
import mage.constants.PhaseStep;
import mage.constants.Zone;
import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase;
/**
* @author noxx
*
* Card: When Oblivion Ring enters the battlefield, exile another target nonland
* permanent. When Oblivion Ring leaves the battlefield, return the exiled card
* to the battlefield under its owner's control.
*/
public class OblivionRingTest extends CardTestPlayerBase {
/**
* When Oblivion Ring enters the battlefield, exile another target nonland
* permanent.
*/
@Test
public void testFirstTriggeredAbility() {
addCard(Zone.BATTLEFIELD, playerA, "Plains", 3);
addCard(Zone.HAND, playerA, "Oblivion Ring");
addCard(Zone.BATTLEFIELD, playerB, "Craw Wurm");
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Oblivion Ring");
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
assertLife(playerA, 20);
assertLife(playerB, 20);
assertPermanentCount(playerA, "Oblivion Ring", 1);
assertPermanentCount(playerB, "Craw Wurm", 0);
}
/**
* When Oblivion Ring leaves the battlefield, return the exiled card to the
* battlefield under its owner's control.
*/
@Test
public void testSecondTriggeredAbility() {
addCard(Zone.BATTLEFIELD, playerA, "Plains", 3);
addCard(Zone.HAND, playerA, "Oblivion Ring");
addCard(Zone.BATTLEFIELD, playerB, "Craw Wurm");
addCard(Zone.BATTLEFIELD, playerB, "Forest", 2);
addCard(Zone.HAND, playerB, "Naturalize");
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Oblivion Ring");
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Naturalize", "Oblivion Ring");
setStopAt(2, PhaseStep.END_TURN);
execute();
assertLife(playerA, 20);
assertLife(playerB, 20);
assertPermanentCount(playerA, "Oblivion Ring", 0);
assertPermanentCount(playerB, "Craw Wurm", 1);
}
@Test
public void testWithOblivionRingExile() {
addCard(Zone.BATTLEFIELD, playerA, "Plains", 3);
addCard(Zone.HAND, playerA, "Oblivion Ring");
addCard(Zone.BATTLEFIELD, playerB, "Craw Wurm");
addCard(Zone.BATTLEFIELD, playerB, "Plains", 3);
addCard(Zone.HAND, playerB, "Revoke Existence");
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Oblivion Ring");
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Revoke Existence", "Oblivion Ring");
setStopAt(2, PhaseStep.END_TURN);
execute();
assertLife(playerA, 20);
assertLife(playerB, 20);
assertPermanentCount(playerA, "Oblivion Ring", 0);
assertPermanentCount(playerB, "Craw Wurm", 1);
}
/**
* Tests that when Oblivion Ring gets destroyed planeswalker returns with
* new counters and can be used second time at the same turn
*/
@Test
public void testExilePlaneswalker() {
addCard(Zone.BATTLEFIELD, playerA, "Plains", 5);
addCard(Zone.HAND, playerA, "Oblivion Ring");
addCard(Zone.BATTLEFIELD, playerA, "Jace Beleren");
// Exile target artifact or enchantment.
addCard(Zone.HAND, playerA, "Revoke Existence");
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "-1: Target player draws a card", playerA);
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Oblivion Ring");
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Revoke Existence", "Oblivion Ring");
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "-1: Target player draws a card", playerA);
setStopAt(1, PhaseStep.END_TURN);
execute();
assertExileCount("Oblivion Ring", 1);
assertGraveyardCount(playerA, "Revoke Existence", 1);
assertPermanentCount(playerA, "Oblivion Ring", 0);
assertGraveyardCount(playerA, "Jace Beleren", 0);
assertPermanentCount(playerA, "Jace Beleren", 1); // returns back
assertHandCount(playerA, 2); // can use ability twice
}
/**
* Oblivion Ring leaves from battlefield Effect brings Hangarback Walker
* back with counters. But with rules it should come back with no counters
*/
@Test
public void testReturningHangarbackWalker() {
addCard(Zone.BATTLEFIELD, playerA, "Forest", 4);
// Hangarback Walker enters the battlefield with X +1/+1 counters on it.
// When Hangarback Walker dies, put a 1/1 colorless Thopter artifact creature token with flying onto the battlefield for each +1/+1 counter on Hangarback Walker.
// {1}, {t}: Put a +1/+1 counter on Hangarback Walker.
addCard(Zone.HAND, playerA, "Hangarback Walker"); // {X}{X}
addCard(Zone.HAND, playerA, "Naturalize");
addCard(Zone.BATTLEFIELD, playerB, "Plains", 3);
addCard(Zone.HAND, playerB, "Oblivion Ring");
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Hangarback Walker");
setChoice(playerA, "X=2");
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Oblivion Ring");
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Naturalize", "Oblivion Ring");
setStopAt(3, PhaseStep.BEGIN_COMBAT);
execute();
assertPermanentCount(playerB, "Oblivion Ring", 0);
assertGraveyardCount(playerB, "Oblivion Ring", 1);
assertPermanentCount(playerA, "Hangarback Walker", 0);
assertGraveyardCount(playerA, "Hangarback Walker", 1);
}
}