mirror of
https://github.com/magefree/mage.git
synced 2025-12-22 03:22:00 -08:00
Spell Queller bug confirmed for issue #2126
This commit is contained in:
parent
b7e0702b62
commit
60035fc0f5
1 changed files with 149 additions and 0 deletions
|
|
@ -0,0 +1,149 @@
|
||||||
|
/*
|
||||||
|
* 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue