/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.mage.test.cards.single.emn;
import mage.constants.PhaseStep;
import mage.constants.Zone;
import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase;
/**
*
* @author escplan9 (Derek Monturo - dmontur1 at gmail dot com)
*/
public class SpellQuellerTest extends CardTestPlayerBase {
@Test
public void testExileSpellCMCFour() {
// {1}{W}{U} Flash Flying 2/3 Spirit
// When Spell Queller enters the battlefield, exile target spell with converted mana cost 4 or less.
// When Spell Queller leaves the battlefield, the exiled card's owner may cast that card without paying its mana cost.
addCard(Zone.HAND, playerB, "Spell Queller");
addCard(Zone.BATTLEFIELD, playerB, "Plains", 1);
addCard(Zone.BATTLEFIELD, playerB, "Island", 2);
addCard(Zone.HAND, playerA, "Languish");
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 4);
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Languish");
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Spell Queller");
addTarget(playerB, "Languish");
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
assertPermanentCount(playerB, "Spell Queller", 1);
assertExileCount("Languish", 1);
}
@Test
public void testAttemptExileSpellCMCFive() {
// {1}{W}{U} Flash Flying 2/3 Spirit
// When Spell Queller enters the battlefield, exile target spell with converted mana cost 4 or less.
// When Spell Queller leaves the battlefield, the exiled card's owner may cast that card without paying its mana cost.
addCard(Zone.HAND, playerB, "Spell Queller");
addCard(Zone.BATTLEFIELD, playerB, "Plains", 1);
addCard(Zone.BATTLEFIELD, playerB, "Island", 2);
addCard(Zone.HAND, playerA, "Battle Sliver"); // {4}{R} 3/3 Sliver - Sliver creatures you control get +2/+0
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 5);
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Battle Sliver");
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Spell Queller");
addTarget(playerB, "Battle Sliver");
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
assertPermanentCount(playerB, "Spell Queller", 1);
assertPermanentCount(playerA, "Battle Sliver", 1);
assertExileCount(playerA, 0);
}
@Test
public void testExileSpellAndDiesAllowsFreeCast() {
// {1}{W}{U} Flash Flying 2/3 Spirit
// When Spell Queller enters the battlefield, exile target spell with converted mana cost 4 or less.
// When Spell Queller leaves the battlefield, the exiled card's owner may cast that card without paying its mana cost.
addCard(Zone.HAND, playerB, "Spell Queller");
addCard(Zone.BATTLEFIELD, playerB, "Plains", 1);
addCard(Zone.BATTLEFIELD, playerB, "Island", 2);
addCard(Zone.HAND, playerA, "Divination"); // {2}{U} sorcery - draw 2 cards
addCard(Zone.HAND, playerA, "Murder"); // {1}{B}{B} instant - destroy target creature
addCard(Zone.BATTLEFIELD, playerA, "Island", 1);
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2);
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Divination");
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Spell Queller");
addTarget(playerB, "Divination");
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Murder");
addTarget(playerA, "Spell Queller");
setChoice(playerB, "Yes"); // elect to cast exiled card (divination) for free
setStopAt(3, PhaseStep.BEGIN_COMBAT);
execute();
assertGraveyardCount(playerB, "Spell Queller", 1);
assertGraveyardCount(playerA, "Murder", 1);
assertGraveyardCount(playerA, "Divination", 1);
assertExileCount("Divination", 0);
assertHandCount(playerA, 3); // card drawn on draw step + 2 from divination
}
/*
Reported bug: "...Spell Queller exiled my Nissa, Vastwood Seeker. Next turn he processed Nissa with Wasteland Strangler and killed my Tireless Tracker.
I then cast Quarantine Field, targeting Spell Queller and Wasteland Strangler. That's when the error message occurred. (fatal exception)"
*/
@Test
public void testExiledSpellProcessedThenQuellerDies() {
// {1}{W}{U} Flash Flying 2/3 Spirit
// When Spell Queller enters the battlefield, exile target spell with converted mana cost 4 or less.
// When Spell Queller leaves the battlefield, the exiled card's owner may cast that card without paying its mana cost.
addCard(Zone.HAND, playerB, "Spell Queller");
// {2}{B} 3/2 Eldrazi (devoid)
// When Wasteland Strangler enters the battlefield, you may put a card an opponent owns from exile into that player's graveyard.
// If you do, target creature gets -3/-3 until end of turn.
addCard(Zone.HAND, playerB, "Wasteland Strangler");
addCard(Zone.BATTLEFIELD, playerB, "Plains", 1);
addCard(Zone.BATTLEFIELD, playerB, "Island", 2);
addCard(Zone.BATTLEFIELD, playerB, "Swamp", 1);
addCard(Zone.HAND, playerA, "Centaur Courser"); // {2}{G} 3/3
addCard(Zone.HAND, playerA, "Wrath of God"); // {2}{W}{W} sorcery - Destroy all creatures, no regen
addCard(Zone.BATTLEFIELD, playerA, "Forest", 2);
addCard(Zone.BATTLEFIELD, playerA, "Plains", 2);
addCard(Zone.BATTLEFIELD, playerA, "Sylvan Advocate"); // {1}{G} 2/3 vigilance
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Centaur Courser");
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Spell Queller");
addTarget(playerB, "Centaur Courser"); // exiles courser
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Wasteland Strangler");
setChoice(playerB, "Yes");
setChoice(playerB, "Centaur Courser"); // put courser from exile into grave from ETB ability
addTarget(playerB, "Sylvan Advocate"); // gives -3/-3 to Advocate
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Wrath of God"); // kill queller and strangler
setStopAt(3, PhaseStep.BEGIN_COMBAT);
execute();
assertGraveyardCount(playerA, "Wrath of God", 1);
assertGraveyardCount(playerA, "Centaur Courser", 1); // in grave from processing
assertGraveyardCount(playerA, "Sylvan Advocate", 1);
assertGraveyardCount(playerB, "Spell Queller", 1);
assertGraveyardCount(playerB, "Wasteland Strangler", 1);
assertExileCount(playerA, 0);
}
}