mirror of
https://github.com/correl/mage.git
synced 2024-12-26 03:00:11 +00:00
Fix many tests with wrong commands
This commit is contained in:
parent
6fa5fdc3c1
commit
37f4f40a2c
225 changed files with 816 additions and 627 deletions
|
@ -18,6 +18,7 @@ public final class Battlegrowth extends CardImpl {
|
|||
public Battlegrowth(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{G}");
|
||||
|
||||
// Put a +1/+1 counter on target creature.
|
||||
this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance()));
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
}
|
||||
|
|
|
@ -67,6 +67,7 @@ public class LevelUpAbilityTest extends CardTestPlayerBase {
|
|||
|
||||
for (int i = 0; i < 6; i++) {
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Level up {1}");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
}
|
||||
|
||||
setStopAt(2, PhaseStep.END_TURN);
|
||||
|
@ -93,6 +94,7 @@ public class LevelUpAbilityTest extends CardTestPlayerBase {
|
|||
|
||||
for (int i = 0; i < 12; i++) {
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Level up {1}");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
}
|
||||
|
||||
setStopAt(2, PhaseStep.END_TURN);
|
||||
|
@ -117,6 +119,7 @@ public class LevelUpAbilityTest extends CardTestPlayerBase {
|
|||
|
||||
for (int i = 0; i < 15; i++) {
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Level up {1}");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
}
|
||||
|
||||
setStopAt(2, PhaseStep.END_TURN);
|
||||
|
|
|
@ -36,6 +36,7 @@ public class BanisherPriestTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerB, "Rockslide Elemental");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Banisher Priest");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN, 1); // Let Banisher Priest enter the battlefield, but don't let its ETB ability resolve
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Incinerate", "Banisher Priest");
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ public class GreenbeltRampagerTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Greenbelt Rampager");
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Forest", 2);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Greenbelt Rampager");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Greenbelt Rampager", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Greenbelt Rampager");
|
||||
|
||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
|
@ -48,8 +48,8 @@ public class GreenbeltRampagerTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Greenbelt Rampager");
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Forest", 3);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Greenbelt Rampager");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Greenbelt Rampager");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Greenbelt Rampager", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Greenbelt Rampager", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Greenbelt Rampager");
|
||||
|
||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
|
@ -74,7 +74,7 @@ public class GreenbeltRampagerTest extends CardTestPlayerBase {
|
|||
|
||||
skipInitShuffling();
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Gonti, Lord of Luxury");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Gonti, Lord of Luxury", true);
|
||||
// addTarget(playerA, playerB); playerB is autochosen since only option
|
||||
setChoice(playerA, "Greenbelt Rampager");
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ public class GolemSkinGauntletsTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Elite Vanguard");
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Equip {4}", "Elite Vanguard");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Equip {2}", "Elite Vanguard");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
|
|
@ -24,6 +24,7 @@ public class HeavyArbalestTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerB, "Llanowar Elves");
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Equip {4}", "Elite Vanguard");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: {this} deals 2 damage", playerB);
|
||||
|
||||
setStopAt(3, PhaseStep.BEGIN_COMBAT);
|
||||
|
@ -48,7 +49,9 @@ public class HeavyArbalestTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Llanowar Elves");
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Equip {4}", "Elite Vanguard");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: {this} deals 2 damage", playerB);
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Equip {4}", "Llanowar Elves");
|
||||
|
||||
setStopAt(5, PhaseStep.BEGIN_COMBAT);
|
||||
|
|
|
@ -96,9 +96,7 @@ public class BlitzTest extends CardTestPlayerBase {
|
|||
} catch (AssertionError e) {
|
||||
Assert.assertEquals(
|
||||
"Shouldn't be able to cast normally from graveyard",
|
||||
"Missing CAST/ACTIVATE def for turn 1, step PRECOMBAT_MAIN, PlayerA\n" +
|
||||
"Can't find available command - activate:Cast Tenacious Underdog " +
|
||||
"(use checkPlayableAbility for \"non available\" checks)", e.getMessage()
|
||||
"Can't find ability to activate command: Cast Tenacious Underdog", e.getMessage()
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -48,7 +48,8 @@ public class BloodthirstTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Lightning Bolt");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerB);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Bloodlord of Vaasgoth");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Bloodlord of Vaasgoth", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Barony Vampire");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
|
|
@ -147,7 +147,8 @@ public class CascadeTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerB, "Unsummon"); // Instant {U}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Enlisted Wurm");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Unsummon", "Enlisted Wurm");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Unsummon", "Enlisted Wurm", true);
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Enlisted Wurm");
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
|
@ -156,7 +157,6 @@ public class CascadeTest extends CardTestPlayerBase {
|
|||
assertGraveyardCount(playerB, "Unsummon", 1);
|
||||
assertPermanentCount(playerA, "Silvercoat Lion", 2);
|
||||
assertPermanentCount(playerA, "Enlisted Wurm", 1);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -196,7 +196,7 @@ public class ConspireTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Sakashima the Impostor");
|
||||
addCard(Zone.HAND, playerA, "Lightning Bolt");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Wort, the Raidmother"); // {4}{R/G}{R/G}
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Wort, the Raidmother", true); // {4}{R/G}{R/G}
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Sakashima the Impostor"); // {2}{U}{U}
|
||||
setChoice(playerA, "Wort, the Raidmother");
|
||||
|
||||
|
@ -223,7 +223,7 @@ public class ConspireTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Sakashima the Impostor");
|
||||
addCard(Zone.HAND, playerA, "Lightning Bolt");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Wort, the Raidmother"); // {4}{R/G}{R/G}
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Wort, the Raidmother", true); // {4}{R/G}{R/G}
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Sakashima the Impostor"); // {2}{U}{U}
|
||||
setChoice(playerA, "Wort, the Raidmother");
|
||||
|
||||
|
|
|
@ -207,6 +207,7 @@ public class ConstellationTest extends CardTestPlayerBase {
|
|||
// give dax a new type (on next turn) -- effects dependacy
|
||||
if (castVampireDifferentWay) {
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Archetype of Courage"); // make dax to creature
|
||||
waitStackResolved(3, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Mephidross Vampire"); // give vampire to creatures
|
||||
} else {
|
||||
// Make sure not white mana is used here to cast the vampire
|
||||
|
@ -219,6 +220,7 @@ public class ConstellationTest extends CardTestPlayerBase {
|
|||
activateManaAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Add {B}");
|
||||
checkManaPool("after B mana", 3, PhaseStep.PRECOMBAT_MAIN, playerA, "B", 6);
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Mephidross Vampire"); // give vampire to creatures
|
||||
waitStackResolved(3, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Archetype of Courage"); // make dax to creature
|
||||
}
|
||||
|
||||
|
|
|
@ -102,7 +102,7 @@ public class DeathtouchTest extends CardTestPlayerBase {
|
|||
// Creatures your opponents control get -2/-2.
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Elesh Norn, Grand Cenobite");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Marath, Will of the Wild");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Marath, Will of the Wild", true);
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Equip {2}", "Marath, Will of the Wild");
|
||||
|
||||
|
|
|
@ -103,6 +103,7 @@ public class DeliriumTest extends CardTestPlayerBaseWithAIHelps {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Balduvian Bears", 4);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Spirit Mantle", "Balduvian Bears");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Descend upon the Sinful");
|
||||
|
||||
setStrictChooseMode(true);
|
||||
|
|
|
@ -89,7 +89,7 @@ public class DiscardTest extends CardTestPlayerBase {
|
|||
|
||||
addCard(Zone.HAND, playerB, "Island", 2);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Liliana's Caress");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Liliana's Caress", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Coercion", playerB);
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
@ -103,7 +103,6 @@ public class DiscardTest extends CardTestPlayerBase {
|
|||
|
||||
assertLife(playerA, 20);
|
||||
assertLife(playerB, 18);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -7,6 +7,11 @@ import org.junit.Test;
|
|||
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||
|
||||
/**
|
||||
* 702.128. Embalm
|
||||
* 702.128a Embalm is an activated ability that functions while the card with embalm is in a graveyard.
|
||||
* “Embalm [cost]” means
|
||||
* “[Cost], Exile this card from your graveyard: Create a token that’s a copy of this card, except it’s white, it has no mana cost, and it’s a Zombie in addition to its other types. Activate only as a sorcery.”
|
||||
* 702.128b A token is “embalmed” if it’s created by a resolving embalm ability.
|
||||
*
|
||||
* @author noxx
|
||||
*/
|
||||
|
@ -44,7 +49,6 @@ public class EmbalmTest extends CardTestPlayerBase {
|
|||
assertPermanentCount(playerA, aSanctions, 1);
|
||||
assertPermanentCount(playerB, yOx, 0);
|
||||
assertPermanentCount(playerB, wKnight, 1);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -92,11 +96,10 @@ public class EmbalmTest extends CardTestPlayerBase {
|
|||
assertGraveyardCount(playerA, aSanctions, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
/**
|
||||
* Reported bug: https://github.com/magefree/mage/issues/3144
|
||||
* Tests that not only creature targeted by original creature is returned.
|
||||
* After using Embalm creature will exile another creature and should return it back when leaves battlefield.
|
||||
*
|
||||
* Bug: #3144
|
||||
*/
|
||||
@Test
|
||||
public void testCreatureExiledByEmbalmCreatureReturns() {
|
||||
|
@ -123,13 +126,13 @@ public class EmbalmTest extends CardTestPlayerBase {
|
|||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, aSanctions);
|
||||
addTarget(playerA, yOx);
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, dBlade);
|
||||
// Angel of Sanction is auto-chosen since only option
|
||||
waitStackResolved(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
|
||||
castSpell(1, PhaseStep.BEGIN_COMBAT, playerB, dBlade, aSanctions);
|
||||
|
||||
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Embalm");
|
||||
addTarget(playerA, wKnight);
|
||||
castSpell(1, PhaseStep.END_TURN, playerB, dBlade);
|
||||
addTarget(playerB, aSanctions);
|
||||
|
||||
castSpell(1, PhaseStep.END_TURN, playerB, dBlade, aSanctions);
|
||||
|
||||
setStopAt(1, PhaseStep.CLEANUP);
|
||||
execute();
|
||||
|
@ -138,7 +141,6 @@ public class EmbalmTest extends CardTestPlayerBase {
|
|||
assertPermanentCount(playerA, aSanctions, 0);
|
||||
assertPermanentCount(playerB, yOx, 1);
|
||||
// second creature should also return after embalm token leaves battlefield
|
||||
// Bug: #3144
|
||||
assertPermanentCount(playerB, wKnight, 1);
|
||||
assertGraveyardCount(playerA, aSanctions, 0);
|
||||
assertGraveyardCount(playerB, dBlade, 2);
|
||||
|
|
|
@ -216,12 +216,12 @@ public class EvolveTest extends CardTestPlayerBase {
|
|||
// Evolve
|
||||
addCard(Zone.HAND, playerA, "Adaptive Snapjaw", 1); // {4}{G} - Creature 6/2
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Ivy Lane Denizen");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Ivy Lane Denizen", true);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Renegade Krasis");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Renegade Krasis", true);
|
||||
addTarget(playerA, "Ivy Lane Denizen"); // Ivy target
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Ivy Lane Denizen"); // Renegade Krasis evolves
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Ivy Lane Denizen", true); // Renegade Krasis evolves
|
||||
addTarget(playerA, "Renegade Krasis"); // Ivy target
|
||||
setChoice(playerA, "Whenever another green creature"); // So +1/+1 counter from Renegade is first put onto Ivy
|
||||
|
||||
|
|
|
@ -64,10 +64,12 @@ public class ExploitTest extends CardTestPlayerBase {
|
|||
setStrictChooseMode(true);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silumgar Butcher");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Lightning Bolt", "Silumgar Butcher");
|
||||
setChoice(playerA, true);
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN, 1);
|
||||
setChoice(playerA, true); // Choose to exploit
|
||||
addTarget(playerA, "Silvercoat Lion"); // sacrifice to Exploit
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Lightning Bolt", "Silumgar Butcher");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
execute();
|
||||
|
||||
|
|
|
@ -293,7 +293,8 @@ public class FlashbackTest extends CardTestPlayerBase {
|
|||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Flashback");
|
||||
addTarget(playerA, "Silvercoat Lion");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Runic Repetition");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Runic Repetition", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silent Departure", "Silvercoat Lion");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
@ -567,19 +568,20 @@ public class FlashbackTest extends CardTestPlayerBase {
|
|||
|
||||
Assert.fail("must throw exception on execute");
|
||||
} catch (Throwable e) {
|
||||
if (!e.getMessage().contains("Player PlayerA must have 0 actions but found 1")) {
|
||||
if (!e.getMessage().contains("Flashback$spellOnStack=Lightning Bolt")) {
|
||||
Assert.fail("Should have thrown error about not being able to play Force of Will, but got:\n" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
assertPermanentCount(playerA, "Snapcaster Mage", 0);
|
||||
|
||||
assertGraveyardCount(playerA, "Snapcaster Mage", 1);
|
||||
assertGraveyardCount(playerA, "Force of Will", 1);
|
||||
|
||||
assertGraveyardCount(playerB, "Lightning Bolt", 1);
|
||||
|
||||
assertLife(playerA, 20);
|
||||
// TODO: Re-enable when checkPlayableAbility can be used instead of try-catch
|
||||
// assertPermanentCount(playerA, "Snapcaster Mage", 0);
|
||||
//
|
||||
// assertGraveyardCount(playerA, "Snapcaster Mage", 1);
|
||||
// assertGraveyardCount(playerA, "Force of Will", 1);
|
||||
//
|
||||
// assertGraveyardCount(playerB, "Lightning Bolt", 1);
|
||||
//
|
||||
// assertLife(playerA, 20);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -597,7 +599,7 @@ public class FlashbackTest extends CardTestPlayerBase {
|
|||
// Flashback-{1}{U}, Pay 3 life.
|
||||
addCard(Zone.HAND, playerA, "Deep Analysis"); // {3}{U}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Deep Analysis");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Deep Analysis", true);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Flashback");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
|
|
@ -191,6 +191,7 @@ public class InfectTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Island", 2);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Corrupted Conscience", "Phyrexian Obliterator");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Enslave", "Phyrexian Obliterator");
|
||||
|
||||
setStopAt(3, PhaseStep.POSTCOMBAT_MAIN);
|
||||
|
|
|
@ -25,6 +25,7 @@ public class JumpStartTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); // 2/2
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Direct Current", "Silvercoat Lion");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Direct Current with jump-start", playerB);
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
@ -52,6 +53,7 @@ public class JumpStartTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerB, "Island", 2);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Direct Current", "Silvercoat Lion");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Direct Current with jump-start", playerB);
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Counterspell", "Direct Current");
|
||||
|
||||
|
@ -86,6 +88,7 @@ public class JumpStartTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); // 2/2
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Direct Current", "Silvercoat Lion");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Experimental Frenzy");
|
||||
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Direct Current with jump-start", playerB);
|
||||
|
|
|
@ -268,12 +268,13 @@ public class KickerTest extends CardTestPlayerBase {
|
|||
assertGraveyardCount(playerA, "Sunscape Battlemage", 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reported Bug:
|
||||
* Hallar Not Procing Right: When I kick Thornscape Battlemage it doesn't proc Hallar effect for some reason.
|
||||
* I tried this 3 times and it never triggered properly.
|
||||
*/
|
||||
@Test
|
||||
public void test_Conditional_TriggeredAbilityMustSeeMultikickedStatus() {
|
||||
// bug:
|
||||
// Hallar Not Procing Right: When I kick Thornscape Battlemage it doesn't proc Hallar effect for some reason.
|
||||
// I tried this 3 times and it never triggered properly.
|
||||
|
||||
// Kicker {R} and/or {W} (You may pay an additional {R} and/or {W} as you cast this spell.)
|
||||
// When Thornscape Battlemage enters the battlefield, if it was kicked with its {R} kicker, it deals 2 damage to any target.
|
||||
// When Thornscape Battlemage enters the battlefield, if it was kicked with its {W} kicker, destroy target artifact.
|
||||
|
@ -300,14 +301,15 @@ public class KickerTest extends CardTestPlayerBase {
|
|||
assertLife(playerB, 20 - 2 - 1); // 2 damage from kicked spell, 1 damage from hallar's trigger
|
||||
}
|
||||
|
||||
/**
|
||||
* Reported Bug:
|
||||
* If a creature is cast with kicker, dies, and is then returned to play
|
||||
* from graveyard, it still behaves like it were kicked.
|
||||
* I noticed this while testing some newly implemented cards, but it can be reproduced for
|
||||
* example by Zombifying a Gatekeeper of Malakir.
|
||||
*/
|
||||
@Test
|
||||
public void test_ZCC_ReturnedPermanentMustNotBeKicked() {
|
||||
// bug:
|
||||
// If a creature is cast with kicker, dies, and is then returned to play
|
||||
// from graveyard, it still behaves like it were kicked. I noticed this
|
||||
// while testing some newly implemented cards, but it can be reproduced for
|
||||
// example by Zombifying a Gatekeeper of Malakir.
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5);
|
||||
|
||||
// Kicker {B} (You may pay an additional {B} as you cast this spell.)
|
||||
|
@ -342,14 +344,15 @@ public class KickerTest extends CardTestPlayerBase {
|
|||
assertPermanentCount(playerA, "Gatekeeper of Malakir", 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reported Bug: https://github.com/magefree/mage/issues/7192
|
||||
* Krark, the thumbless and a copy of him are on the field, and I cast Rite of replication kicked.
|
||||
* The first coinflip fails and returns it to my hand, and the second coinflip wins and copies it,
|
||||
* but does not copy the kicked part.
|
||||
* I believe I did this before in another game and the first flip won then it would be a kicked copy.
|
||||
*/
|
||||
@Test
|
||||
public void test_ZCC_CopiedSpellMustKeepKickerStatus() {
|
||||
// https://github.com/magefree/mage/issues/7192
|
||||
// bug: Krark, the thumbless and a copy of him are on the field, and I cast Rite of replication kicked.
|
||||
// The first coinflip fails and returns it to my hand, and the second coinflip wins and copies it,
|
||||
// but does not copy the kicked part. I believe I did this before in another game and the first flip
|
||||
// won then it would be a kicked copy.
|
||||
|
||||
// Whenever you cast an instant or sorcery spell, you may copy that spell. You may choose new targets for the copy.
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Swarm Intelligence", 1);
|
||||
//
|
||||
|
@ -385,10 +388,11 @@ public class KickerTest extends CardTestPlayerBase {
|
|||
assertLife(playerA, 20 - 2 * 2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Copied spell must have access to kicker status.
|
||||
*/
|
||||
@Test
|
||||
public void test_ZCC_CopiedSpellMustHaveIndependentZCC_InSpell() {
|
||||
// reason: copied spell must have access to kicker status
|
||||
|
||||
// Whenever you cast an instant or sorcery spell, you may copy that spell. You may choose new targets for the copy.
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Swarm Intelligence", 1);
|
||||
//
|
||||
|
@ -446,10 +450,11 @@ public class KickerTest extends CardTestPlayerBase {
|
|||
assertLife(playerA, 20 - 2 + 3);
|
||||
}
|
||||
|
||||
/**
|
||||
* Static ability from copied spell's permanent must have access to kicker status
|
||||
*/
|
||||
@Test
|
||||
public void test_ZCC_CopiedSpellMustHaveIndependentZCC_InStaticAbility() {
|
||||
// reason: static ability from copied spell's permanent must have access to kicker status
|
||||
|
||||
// {4}, {T}: Copy target permanent spell you control.
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Lithoform Engine", 1);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Island", 4);
|
||||
|
@ -559,10 +564,7 @@ public class KickerTest extends CardTestPlayerBase {
|
|||
|
||||
attack(1, playerA, "Raging Goblin");
|
||||
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Lightning Bolt", playerA);
|
||||
|
||||
// Attack must be restricted, so no attack commands available
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
setStopAt(1, PhaseStep.END_COMBAT);
|
||||
|
||||
try {
|
||||
execute();
|
||||
|
@ -574,6 +576,21 @@ public class KickerTest extends CardTestPlayerBase {
|
|||
}
|
||||
}
|
||||
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Lightning Bolt", playerA);
|
||||
|
||||
// Attack must be restricted, so no attack commands available
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
|
||||
try {
|
||||
execute();
|
||||
|
||||
Assert.fail("must throw exception on execute");
|
||||
} catch (Throwable e) {
|
||||
if (!e.getMessage().contains("Cast Lightning Bolt$targetPlayer=PlayerA")) {
|
||||
Assert.fail("Should have thrown error about not being able to attack with Raging Golin, but got:\n" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
assertGraveyardCount(playerA, "Orim's Chant", 1);
|
||||
assertGraveyardCount(playerB, "Lightning Bolt", 0);
|
||||
|
||||
|
@ -581,12 +598,13 @@ public class KickerTest extends CardTestPlayerBase {
|
|||
assertLife(playerB, 20);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reported Bug:
|
||||
* Bloodhusk Ritualist's discard trigger does nothing if the Ritualist
|
||||
* leaves the battlefield before the trigger resolves.
|
||||
*/
|
||||
@Test
|
||||
public void test_Single_BloodhuskRitualist() {
|
||||
// bug:
|
||||
// Bloodhusk Ritualist's discard trigger does nothing if the Ritualist
|
||||
// leaves the battlefield before the trigger resolves.
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Mountain", 1);
|
||||
addCard(Zone.HAND, playerB, "Lightning Bolt");
|
||||
addCard(Zone.HAND, playerB, "Fireball", 2);
|
||||
|
@ -599,6 +617,7 @@ public class KickerTest extends CardTestPlayerBase {
|
|||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Bloodhusk Ritualist");
|
||||
setChoice(playerA, true, 2); // 2 x Multikicker
|
||||
setChoice(playerA, false); // stop the kicking
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN, 1);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Lightning Bolt", "Bloodhusk Ritualist");
|
||||
addTarget(playerA, playerB); // target for kicker's trigger (discard cards)
|
||||
|
||||
|
@ -614,13 +633,15 @@ public class KickerTest extends CardTestPlayerBase {
|
|||
assertHandCount(playerB, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reported Bug:
|
||||
* Paying the Kicker on "Marsh Casualties" has no effect.
|
||||
* Target player's creatures still only get -1/-1 instead of -2/-2.
|
||||
* Was playing against AI.
|
||||
* It was me who cast the spell.
|
||||
*/
|
||||
@Test
|
||||
public void test_Single_MarshCasualties() {
|
||||
// bug:
|
||||
// Paying the Kicker on "Marsh Casualties" has no effect. Target player's
|
||||
// creatures still only get -1/-1 instead of -2/-2. Was playing against AI.
|
||||
// It was me who cast the spell.
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5);
|
||||
|
||||
// Kicker {3}
|
||||
|
@ -668,10 +689,12 @@ public class KickerTest extends CardTestPlayerBase {
|
|||
assertCounterCount(playerA, "Ardent Soldier", CounterType.P1P1, 1); // from kicker
|
||||
}
|
||||
|
||||
/**
|
||||
* Reported Bug:
|
||||
* Can cast Thieving Skydiver with kicker's X = 0 on Etali, Primal Storm
|
||||
*/
|
||||
@Test
|
||||
public void test_FreeCast_MinXValueMustWork() {
|
||||
// bug:
|
||||
// Can cast Thieving Skydiver with kicker's X = 0 on Etali, Primal Storm
|
||||
skipInitShuffling();
|
||||
|
||||
// Kicker {X}. X can't be 0.
|
||||
|
|
|
@ -42,8 +42,8 @@ public class MeldTest extends CardTestPlayerBase {
|
|||
|
||||
Assert.fail("must throw exception on execute");
|
||||
} catch (Throwable e) {
|
||||
if (!e.getMessage().contains("Player PlayerB must have 0 actions but found 1")) {
|
||||
Assert.fail("Should have thrown error about cannot attack, but got:\n" + e.getMessage());
|
||||
if (!e.getMessage().contains("Cast Silvercoat Lion")) {
|
||||
Assert.fail("Should have thrown error about casting Silvercoat Lion, but got:\n" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,7 +85,7 @@ public class MeldTest extends CardTestPlayerBase {
|
|||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Bruna, the Fading Light");
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Silvercoat Lion");
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Gisela, the Broken Blade");
|
||||
castSpell(4, PhaseStep.PRECOMBAT_MAIN, playerB, "Vanish into Memory", "Brisela, Voice of Nightmares");
|
||||
castSpell(4, PhaseStep.PRECOMBAT_MAIN, playerB, "Vanish into Memory", "Brisela, Voice of Nightmares", true);
|
||||
castSpell(4, PhaseStep.PRECOMBAT_MAIN, playerB, "Silvercoat Lion");
|
||||
|
||||
setStopAt(4, PhaseStep.BEGIN_COMBAT);
|
||||
|
@ -127,10 +127,11 @@ public class MeldTest extends CardTestPlayerBase {
|
|||
// If you do, discard cards equal to that creature's toughness.
|
||||
addCard(Zone.HAND, playerB, "Vanish into Memory", 1); // Instant {2}{W}{U}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Bruna, the Fading Light");
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Silvercoat Lion");
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Gisela, the Broken Blade");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Bruna, the Fading Light", true);
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Silvercoat Lion", true);
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Gisela, the Broken Blade", true);
|
||||
castSpell(4, PhaseStep.PRECOMBAT_MAIN, playerB, "Vanish into Memory", "Brisela, Voice of Nightmares");
|
||||
waitStackResolved(4, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(4, PhaseStep.PRECOMBAT_MAIN, playerB, "Silvercoat Lion");
|
||||
|
||||
// End step turn 7 the meld takes place again
|
||||
|
|
|
@ -40,7 +40,7 @@ public class ModularTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Arcbound Bruiser");
|
||||
addCard(Zone.HAND, playerA, "Arcbound Hybrid");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Arcbound Bruiser");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Arcbound Bruiser", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Arcbound Hybrid");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
@ -61,8 +61,8 @@ public class ModularTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Arcbound Hybrid");
|
||||
addCard(Zone.HAND, playerA, "Lightning Bolt");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Arcbound Bruiser");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Arcbound Hybrid");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Arcbound Bruiser", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Arcbound Hybrid", true);
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", "Arcbound Bruiser");
|
||||
setStopAt(3, PhaseStep.BEGIN_COMBAT);
|
||||
setChoice(playerA, true);
|
||||
|
@ -143,21 +143,18 @@ public class ModularTest extends CardTestPlayerBase {
|
|||
// put three -1/-1 counters on lancer, which leaves it with one +1/+1
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Puncture Blast", "Arcbound Lancer");
|
||||
setChoice(playerA, true, 2);
|
||||
checkStackSize("stack1", 1, PhaseStep.PRECOMBAT_MAIN, playerA, 1);
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
||||
// kill lancer with one +1/+1 counter on it
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Flame Slash", "Arcbound Lancer");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN, true);
|
||||
checkStackSize("stack2", 1, PhaseStep.PRECOMBAT_MAIN, playerA, 1);
|
||||
|
||||
// in response to modular trigger, return lancer to the battlefield
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Makeshift Mannequin", "Arcbound Lancer");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Makeshift Mannequin", "Arcbound Lancer", "When it dies");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN, true);
|
||||
checkStackSize("stack3", 1, PhaseStep.PRECOMBAT_MAIN, playerA, 2);
|
||||
|
||||
// kill lancer again with original modular trigger on the stack
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Murder", "Arcbound Lancer");
|
||||
checkStackSize("stack4", 1, PhaseStep.PRECOMBAT_MAIN, playerA, 2);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Murder", "Arcbound Lancer", "When it dies");
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
|
|
@ -417,6 +417,7 @@ public class MorphTest extends CardTestPlayerBase {
|
|||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Birchlore Rangers");
|
||||
setChoice(playerA, true); // cast it face down as 2/2 creature
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Swords to Plowshares", "");
|
||||
|
||||
|
@ -456,6 +457,7 @@ public class MorphTest extends CardTestPlayerBase {
|
|||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Ashcloud Phoenix");
|
||||
setChoice(playerA, true); // cast it face down as 2/2 creature
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Lightning Bolt", EmptyNames.FACE_DOWN_CREATURE.toString());
|
||||
|
||||
|
@ -661,7 +663,7 @@ public class MorphTest extends CardTestPlayerBase {
|
|||
try {
|
||||
execute();
|
||||
} catch (Throwable e) {
|
||||
if (!e.getMessage().contains("Can't find available command - activate:Cast Rattleclaw Mystic (use checkPlayableAbility for \"non available\" checks)")) {
|
||||
if (!e.getMessage().contains("Cast Rattleclaw Mystic")) {
|
||||
Assert.fail("Should have gotten an error about not being able to cast Rattleclaw, but got:\n" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
@ -899,6 +901,7 @@ public class MorphTest extends CardTestPlayerBase {
|
|||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Quicksilver Dragon");
|
||||
setChoice(playerA, true); // cast it face down as 2/2 creature
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Lightning Bolt", EmptyNames.FACE_DOWN_CREATURE.toString());
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ public class PhasingTest extends CardTestPlayerBase {
|
|||
// {R}: Enchanted creature gets +1/+0 until end of turn.
|
||||
addCard(Zone.HAND, playerA, "Firebreathing", 1); // {R}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Tolarian Drake");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Tolarian Drake", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Firebreathing", "Tolarian Drake");
|
||||
|
||||
setStopAt(3, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
@ -83,7 +83,7 @@ public class PhasingTest extends CardTestPlayerBase {
|
|||
// {R}: Enchanted creature gets +1/+0 until end of turn.
|
||||
addCard(Zone.HAND, playerA, "Firebreathing", 1); // {R}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Tolarian Drake");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Tolarian Drake", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Firebreathing", "Tolarian Drake");
|
||||
|
||||
setStopAt(5, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
|
|
@ -60,7 +60,7 @@ public class SoulbondKeywordTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Trusted Forcemage", 2);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Forest", 6);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Trusted Forcemage");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Trusted Forcemage", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Trusted Forcemage");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
@ -188,6 +188,7 @@ public class SoulbondKeywordTest extends CardTestPlayerBase {
|
|||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Trusted Forcemage");
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Act of Treason", "Trusted Forcemage");
|
||||
waitStackResolved(2, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Elite Vanguard");
|
||||
|
||||
setStopAt(2, PhaseStep.BEGIN_COMBAT);
|
||||
|
@ -216,6 +217,7 @@ public class SoulbondKeywordTest extends CardTestPlayerBase {
|
|||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Trusted Forcemage");
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Act of Treason", "Trusted Forcemage");
|
||||
waitStackResolved(2, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Elite Vanguard");
|
||||
|
||||
setStopAt(3, PhaseStep.PRECOMBAT_MAIN); // Effect of "Act of Treason" will end here
|
||||
|
@ -261,6 +263,7 @@ public class SoulbondKeywordTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Blinkmoth Nexus", 1);
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}: ");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Trusted Forcemage");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
@ -302,6 +305,7 @@ public class SoulbondKeywordTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Blinkmoth Nexus", 1);
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}: ");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Trusted Forcemage");
|
||||
|
||||
setStopAt(2, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
@ -330,8 +334,8 @@ public class SoulbondKeywordTest extends CardTestPlayerBase {
|
|||
|
||||
addCard(Zone.HAND, playerA, "Lightning Bolt", 1);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Trusted Forcemage");
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Lightning Bolt", "Elite Vanguard");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Trusted Forcemage", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", "Elite Vanguard");
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Phantasmal Bear");
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
|
|
|
@ -243,13 +243,13 @@ public class StormTest extends CardTestPlayerBase {
|
|||
// Storm
|
||||
addCard(Zone.HAND, playerA, "Mind's Desire", 1); // {4}{U}{U}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Wheel of Fortune");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mox Emerald");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Turnabout");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Wheel of Fortune", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mox Emerald", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Turnabout", true);
|
||||
setChoice(playerA, "Land");
|
||||
setChoice(playerA, false);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Yawgmoth's Will");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Palinchron");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Yawgmoth's Will", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Palinchron", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mind's Desire");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
@ -264,7 +264,5 @@ public class StormTest extends CardTestPlayerBase {
|
|||
assertExileCount("Mind's Desire", 1);
|
||||
|
||||
assertExileCount(playerA, 8); // 6 from Mind's Desire and the Desire and the Yawgmoth's Will
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ public class SurgeTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Lightning Bolt");
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion");
|
||||
|
||||
// Create a tokenonto the battlefield that's a copy of target creature you control.
|
||||
// Create a token that's a copy of target creature you control.
|
||||
// Flashback {5}{U}{U}(You may cast this card from your graveyard for its flashback cost. Then exile it.)
|
||||
addCard(Zone.HAND, playerB, "Cackling Counterpart");
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Island", 3);
|
||||
|
@ -53,6 +53,7 @@ public class SurgeTest extends CardTestPlayerBase {
|
|||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerB);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Cackling Counterpart", "Silvercoat Lion");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Crush of Tentacles with surge");
|
||||
|
||||
|
@ -81,6 +82,7 @@ public class SurgeTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Lightning Bolt");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerB);
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Tyrant of Valakut");
|
||||
addTarget(playerA, playerB);
|
||||
|
||||
|
@ -106,6 +108,7 @@ public class SurgeTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1, true);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerB);
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Containment Membrane", "Silvercoat Lion");
|
||||
|
||||
setStopAt(2, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package org.mage.test.cards.abilities.keywords;
|
||||
|
||||
import mage.cards.s.SpringOfEternalPeace;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.Zone;
|
||||
|
@ -28,10 +29,11 @@ public class TransformTest extends CardTestPlayerBase {
|
|||
// {G}{G}, Sacrifice Rootrunner: Put target land on top of its owner's library.
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Rootrunner"); // {2}{G}{G}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Nissa, Vastwood Seer");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Nissa, Vastwood Seer", true);
|
||||
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Forest");
|
||||
|
||||
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "{G}{G}", "Swamp");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "+1: Reveal");
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
|
@ -167,6 +169,7 @@ public class TransformTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Island", 9);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Startled Awake", playerB);
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{3}{U}{U}");
|
||||
|
||||
|
@ -189,6 +192,7 @@ public class TransformTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Maskwood Nexus");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Startled Awake", playerB);
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{3}{U}{U}");
|
||||
|
||||
|
@ -396,8 +400,8 @@ public class TransformTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Forest", 2);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Plains", 3);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Huntmaster of the Fells");
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Huntmaster of the Fells", true);
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion", true);
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion");
|
||||
setStopAt(4, PhaseStep.PRECOMBAT_MAIN);
|
||||
execute();
|
||||
|
|
|
@ -141,6 +141,7 @@ public class UndyingTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerB, "Anafenza, the Foremost");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Butcher Ghoul");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Lightning Bolt", "Butcher Ghoul");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
|
|
@ -27,7 +27,7 @@ public class LoseAbilityByEquipmentTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Cobbled Wings"); // gives Flying
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Magebane Armor");
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Cobbled Wings");
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Cobbled Wings", true);
|
||||
activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Equip {1}", "Silvercoat Lion"); // give Flying
|
||||
activateAbility(3, PhaseStep.POSTCOMBAT_MAIN, playerA, "Equip {2}", "Silvercoat Lion"); // lose Flying
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ public class LoseAbilityTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Air Elemental");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Grounded", "Elite Vanguard");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Grounded", "Air Elemental");
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Grounded", "Air Elemental");
|
||||
|
||||
setStopAt(2, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
@ -53,7 +53,7 @@ public class LoseAbilityTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Drake Umbra");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Grounded", "Air Elemental");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Drake Umbra", "Air Elemental");
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Drake Umbra", "Air Elemental");
|
||||
|
||||
setStopAt(2, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
@ -81,7 +81,9 @@ public class LoseAbilityTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Drake Umbra", 2);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Drake Umbra", "Air Elemental");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Drake Umbra", "Air Elemental");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Grounded", "Air Elemental");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
|
|
@ -78,7 +78,7 @@ public class CounterspellTest extends CardTestPlayerBase {
|
|||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerB);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Memory Lapse", "Lightning Bolt");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Twincast", "Memory Lapse");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Twincast", "Memory Lapse", "Memory Lapse");
|
||||
|
||||
setChoice(playerA, true); // change the target
|
||||
addTarget(playerA, "Memory Lapse");
|
||||
|
@ -112,7 +112,7 @@ public class CounterspellTest extends CardTestPlayerBase {
|
|||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerB);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Counterspell", "Lightning Bolt");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Twincast", "Counterspell");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Twincast", "Counterspell", "Counterspell");
|
||||
|
||||
setChoice(playerA, true); // change the target
|
||||
addTarget(playerA, "Counterspell");
|
||||
|
@ -146,7 +146,7 @@ public class CounterspellTest extends CardTestPlayerBase {
|
|||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerB);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Dissipate", "Lightning Bolt");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Twincast", "Dissipate");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Twincast", "Dissipate", "Dissipate");
|
||||
|
||||
setChoice(playerA, true); // change the target
|
||||
addTarget(playerA, "Dissipate");
|
||||
|
|
|
@ -47,7 +47,7 @@ public class ForceOfWillTest extends CardTestPlayerBase {
|
|||
}
|
||||
|
||||
/**
|
||||
* Test that Force of Will can'be played with alternate casting costs
|
||||
* Test that Force of Will can't be played with alternate casting costs
|
||||
* if no blue card is in hand and not enough mana available
|
||||
*/
|
||||
@Test
|
||||
|
@ -55,7 +55,7 @@ public class ForceOfWillTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Thoughtseize");
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1);
|
||||
|
||||
// No Red cards in hand
|
||||
// No other Blue cards in hand
|
||||
addCard(Zone.HAND, playerB, "Force of Will");
|
||||
addCard(Zone.HAND, playerB, "Fireball", 2);
|
||||
|
||||
|
@ -75,15 +75,9 @@ public class ForceOfWillTest extends CardTestPlayerBase {
|
|||
execute();
|
||||
Assert.fail("must throw exception on execute");
|
||||
} catch (Throwable e) {
|
||||
if (!e.getMessage().contains("Can't find available command - activate:Cast Force of Will$target=Thoughtseize")) {
|
||||
Assert.fail("must throw error about bad targets, but got:\n" + e.getMessage());
|
||||
if (!e.getMessage().contains("Cast Force of Will$target=Thoughtseize")) {
|
||||
Assert.fail("must throw error about not being able to cast Force of Will, but got:\n" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
assertLife(playerA, 18);
|
||||
assertLife(playerB, 20); // losing 1 from Force of Will
|
||||
|
||||
assertHandCount(playerB, 2); // 1 Fireball 1 Force of Will
|
||||
assertGraveyardCount(playerB, 1); // 1 Fireball discarded because of Thoughseize
|
||||
}
|
||||
}
|
|
@ -85,17 +85,17 @@ public class SecondGuessTest extends CardTestPlayerBase {
|
|||
*/
|
||||
@Test
|
||||
public void testOverallCount() {
|
||||
addCard(Zone.HAND, playerA, "Second Guess");
|
||||
addCard(Zone.HAND, playerA, "Lightning Bolt");
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Mountain");
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Island", 2);
|
||||
addCard(Zone.HAND, playerA, "Second Guess");
|
||||
|
||||
addCard(Zone.HAND, playerB, "Shock");
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Mountain");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerB);
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Shock", playerA);
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Second Guess", "Shock");
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Second Guess", "Shock", "Shock");
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
|
|
@ -24,7 +24,7 @@ public class ExileAndReturnTest extends CardTestPlayerBase {
|
|||
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Tawnos's Coffin");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Tawnos's Coffin", true);
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{3}, {T}", "Silvercoat Lion");
|
||||
|
||||
|
@ -80,8 +80,9 @@ public class ExileAndReturnTest extends CardTestPlayerBase {
|
|||
|
||||
// Whenever an Aura becomes attached to Bramble Elemental, put two 1/1 green Saproling creature tokens onto the battlefield.
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Bramble Elemental"); // Creature 4/4
|
||||
// Put a +1/+1 counter on target creature.
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Forest", 5);
|
||||
// Put a +1/+1 counter on target creature.
|
||||
addCard(Zone.HAND, playerB, "Battlegrowth"); // Instant {G}
|
||||
// Enchant creature (Target a creature as you cast this. This card enters the battlefield attached to that creature.)
|
||||
// Enchanted creature gets +1/+1 for each Forest you control.
|
||||
|
@ -91,10 +92,12 @@ public class ExileAndReturnTest extends CardTestPlayerBase {
|
|||
// Enchanted creature has reach. (It can block creatures with flying.)
|
||||
addCard(Zone.HAND, playerB, "Frog Tongue"); // Enchantment Aura {G}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Tawnos's Coffin");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Tawnos's Coffin", true);
|
||||
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Battlegrowth", "Bramble Elemental");
|
||||
waitStackResolved(2, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Blanchwood Armor", "Bramble Elemental");
|
||||
waitStackResolved(2, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Frog Tongue", "Bramble Elemental");
|
||||
activateAbility(2, PhaseStep.POSTCOMBAT_MAIN, playerA, "{3}, {T}", "Bramble Elemental");
|
||||
|
||||
|
@ -130,7 +133,7 @@ public class ExileAndReturnTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerB, "Disenchant");
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Tawnos's Coffin");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Tawnos's Coffin", true);
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{3}, {T}", "Silvercoat Lion");
|
||||
|
||||
|
@ -145,6 +148,5 @@ public class ExileAndReturnTest extends CardTestPlayerBase {
|
|||
assertGraveyardCount(playerA, "Tawnos's Coffin", 1);
|
||||
|
||||
assertPermanentCount(playerB, "Silvercoat Lion", 1);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,34 +8,41 @@ import org.junit.Test;
|
|||
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||
|
||||
/**
|
||||
* {@link mage.cards.a.AuratouchedMage Auratouched Mage}
|
||||
* Creature — Human Wizard 3/3
|
||||
* {5}{W}
|
||||
*
|
||||
* When Auratouched Mage enters the battlefield, search your library for an Aura card that could enchant it.
|
||||
* If Auratouched Mage is still on the battlefield, put that Aura card onto the battlefield attached to it.
|
||||
* Otherwise, reveal the Aura card and put it into your hand.
|
||||
* Then shuffle.
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public class AuratouchedMageTest extends CardTestPlayerBase {
|
||||
|
||||
/**
|
||||
* Auratouched Mage Creature — Human Wizard 3/3, 5W When Auratouched Mage
|
||||
* enters the battlefield, search your library for an Aura card that could
|
||||
* enchant it. If Auratouched Mage is still on the battlefield, put that
|
||||
* Aura card onto the battlefield attached to it. Otherwise, reveal the Aura
|
||||
* card and put it into your hand. Then shuffle your library.
|
||||
* If Auramage's type is changed in the time between it entering the battlefield and its ETB ability resolving, you
|
||||
* must be able to search for an Aura that can legally target it with whatever types it has at the ability resolves.
|
||||
*
|
||||
* Relevant Ruling:
|
||||
* Any Aura card you find must be able to enchant Auratouched Mage as it currently exists,
|
||||
* or as it most recently existed on the battlefield if it’s no longer on the battlefield.
|
||||
* If an effect has made the Mage an artifact, for example, you could search for an Aura with “enchant artifact.”
|
||||
* (2005-10-01)
|
||||
*/
|
||||
|
||||
//If someone knows the way to elegantly handle the test mechanism in regards to no valid targets, please modify. The test works fine in practice.
|
||||
@Ignore
|
||||
@Test
|
||||
public void testAuratouchedMageEffectHasMadeIntoTypeArtifact() {
|
||||
//Any Aura card you find must be able to enchant Auratouched Mage as it currently exists, or as it most recently existed on the battlefield if it's no
|
||||
//longer on the battlefield. If an effect has made the Mage an artifact, for example, you could search for an Aura with “enchant artifact.”
|
||||
//Expected result: An effect has made Auratouched Mage into an artifact upon entering the battlefield. An aura that only works on artifacts should work.
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Plains", 7);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Island", 7);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Plains", 1);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Island", 8);
|
||||
addCard(Zone.HAND, playerA, "Auratouched Mage"); //5W cost
|
||||
addCard(Zone.HAND, playerA, "Argent Mutation"); //2U cost. Target is an artifact until end of turn
|
||||
addCard(Zone.LIBRARY, playerA, "Relic Ward"); //Only enchants an artifact permanent
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Auratouched Mage");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Argent Mutation", "Auratouched Mage");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN, 1); // Wait for Auratouched Mage to ETB
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Argent Mutation", "Auratouched Mage"); // Turn it into an artifact before its ETB ability resolves
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
||||
|
@ -43,9 +50,11 @@ public class AuratouchedMageTest extends CardTestPlayerBase {
|
|||
|
||||
assertPermanentCount(playerA, "Auratouched Mage", 1);
|
||||
assertPermanentCount(playerA, "Relic Ward", 1);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Auratouched Mage's ETB ability resolves with it alive, so Aura should be equipped to it.
|
||||
*/
|
||||
@Test
|
||||
public void testGainsLegalAura() {
|
||||
// Expected result: Brainwash gets placed on Auratouched Mage
|
||||
|
@ -61,21 +70,22 @@ public class AuratouchedMageTest extends CardTestPlayerBase {
|
|||
|
||||
assertPermanentCount(playerA, "Auratouched Mage", 1);
|
||||
assertPermanentCount(playerA, "Brainwash", 1);
|
||||
|
||||
}
|
||||
|
||||
//If someone knows the way to elegantly handle the test mechanism in regards to no valid targets, please modify. The test works fine in practice.
|
||||
/**
|
||||
* Auratouched Mage's ETB ability resolves, but they're dead, so the legal aura (Brainwash) gets put into Auratouched Mage's controller's hand.
|
||||
*/
|
||||
@Test
|
||||
public void testAuratouchedMageNotOnBattlefield() {
|
||||
// Expected result: Auratouched Mage is exiled immediately after entering the battlefield, the legal aura (Brainwash) gets put into controller's hand
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Plains", 7);
|
||||
addCard(Zone.HAND, playerA, "Auratouched Mage");
|
||||
addCard(Zone.HAND, playerA, "Swords to Plowshares"); //exiles Auratouched Mage
|
||||
addCard(Zone.LIBRARY, playerA, "Brainwash"); //valid aura for Auratouched Mage
|
||||
addCard(Zone.LIBRARY, playerA, "Brainwash"); // valid aura for Auratouched Mage
|
||||
addCard(Zone.LIBRARY, playerA, "Animate Wall"); //not a valid aura for the Auratouched Mage
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Auratouched Mage");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Swords to Plowshares", "Auratouched Mage");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN, 1); // Wait for the Auratouched Mage to enter
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Swords to Plowshares", "Auratouched Mage"); // It's ETB is still on the stack
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
||||
|
@ -83,8 +93,7 @@ public class AuratouchedMageTest extends CardTestPlayerBase {
|
|||
|
||||
assertPermanentCount(playerA, "Auratouched Mage", 0);
|
||||
assertPermanentCount(playerA, "Brainwash", 0);
|
||||
assertHandCount(playerA, "Brainwash", 1);
|
||||
assertHandCount(playerA, "Brainwash", 1); // In hand since Auratouched Mage died before ability resolved
|
||||
assertLibraryCount(playerA, "Animate Wall", 1);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,7 +69,7 @@ public class ChorusOfTheConclaveTest extends CardTestPlayerBase {
|
|||
// Creature spells you cast cost {1} less to cast for each creature you control with a +1/+1 counter on it.
|
||||
addCard(Zone.HAND, playerA, "Hamza, Guardian of Arashin"); // {4}{G}{W}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Goblin Roughrider");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Goblin Roughrider", true);
|
||||
setChoice(playerA, true);
|
||||
setChoice(playerA, "X=1");
|
||||
|
||||
|
@ -78,6 +78,7 @@ public class ChorusOfTheConclaveTest extends CardTestPlayerBase {
|
|||
setChoice(playerA, "X=1");
|
||||
|
||||
playLand(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Mountain");
|
||||
waitStackResolved(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Akki Drillmaster");
|
||||
setChoice(playerA, true);
|
||||
setChoice(playerA, "X=1");
|
||||
|
|
|
@ -133,6 +133,7 @@ public class EndTurnEffectTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerB, "Disenchant"); //Instant {1}{W}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Sundial of the Infinite");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Disenchant", "Sundial of the Infinite");
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1},", TestPlayer.NO_TARGET, "Disenchant");
|
||||
|
@ -146,6 +147,5 @@ public class EndTurnEffectTest extends CardTestPlayerBase {
|
|||
|
||||
assertHandCount(playerA, 7); // Discard to maximum hand size
|
||||
assertHandCount(playerB, 1); // 1 card drawn at start of 2nd turn
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ public class GainAbilitiesTest extends CardTestPlayerBase {
|
|||
|
||||
// attach all
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "@attach.1", "@bear");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "@attach.2", "@bear");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
checkAbility("after", 1, PhaseStep.PRECOMBAT_MAIN, playerA, "@bear", VigilanceAbility.class, true);
|
||||
|
@ -50,9 +51,8 @@ public class GainAbilitiesTest extends CardTestPlayerBase {
|
|||
|
||||
// attach all
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "@attach.1", "@bear");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "@attach.2", "@bear");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
//checkAbility("after", 1, PhaseStep.PRECOMBAT_MAIN, playerA, "@bear", VigilanceAbility.class, true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "@attach.2", "@bear");
|
||||
|
||||
setStrictChooseMode(true);
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
|
|
@ -103,7 +103,7 @@ public class LimitedCountedActivationsTest extends CardTestPlayerBase {
|
|||
|
||||
activateAbility(1, PhaseStep.UPKEEP, playerA, "{R}: ");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Terror", "Dragon Whelp");
|
||||
castSpell(1, PhaseStep.UPKEEP, playerB, "Terror", "Dragon Whelp");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Reanimate", "Dragon Whelp");
|
||||
castSpell(1, PhaseStep.BEGIN_COMBAT, playerA, "Unnatural Speed", "Dragon Whelp");
|
||||
|
||||
|
@ -149,9 +149,11 @@ public class LimitedCountedActivationsTest extends CardTestPlayerBase {
|
|||
activateAbility(1, PhaseStep.UPKEEP, playerA, "{R}: ");
|
||||
activateAbility(1, PhaseStep.UPKEEP, playerA, "{R}: ");
|
||||
activateAbility(1, PhaseStep.UPKEEP, playerA, "{R}: ");
|
||||
waitStackResolved(1, PhaseStep.UPKEEP);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Terror", "Dragon Whelp");
|
||||
castSpell(1, PhaseStep.UPKEEP, playerB, "Terror", "Dragon Whelp");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Reanimate", "Dragon Whelp");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.BEGIN_COMBAT, playerA, "Unnatural Speed", "Dragon Whelp");
|
||||
|
||||
activateAbility(1, PhaseStep.DECLARE_ATTACKERS, playerA, "{R}: ");
|
||||
|
|
|
@ -23,7 +23,7 @@ public class AlchemistsRefugeTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Elite Vanguard");
|
||||
|
||||
activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerA, "{G}{U}, {T}:");
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerA, "Elite Vanguard");
|
||||
castSpell(2, PhaseStep.BEGIN_COMBAT, playerA, "Elite Vanguard");
|
||||
|
||||
setStopAt(2, PhaseStep.BEGIN_COMBAT);
|
||||
execute();
|
||||
|
|
|
@ -25,7 +25,7 @@ public class CastAsInstantTest extends CardTestPlayerBase {
|
|||
|
||||
addCard(Zone.HAND, playerA, "Silvercoat Lion", 2);
|
||||
|
||||
castSpell(1, PhaseStep.UPKEEP, playerB, "Quicken");
|
||||
castSpell(1, PhaseStep.UPKEEP, playerB, "Quicken", true);
|
||||
castSpell(1, PhaseStep.UPKEEP, playerB, "Witness the End", playerA);
|
||||
|
||||
setStopAt(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
|
|
@ -46,7 +46,7 @@ public class PlayFromNonHandZoneTest extends CardTestPlayerBaseWithAIHelps {
|
|||
try {
|
||||
execute();
|
||||
} catch (Throwable e) {
|
||||
if (!e.getMessage().contains("Player PlayerA must have 0 actions but found 1")) {
|
||||
if (!e.getMessage().contains("Cast Worldheart Phoenix")) {
|
||||
Assert.fail("Must have thrown error about not being able to cast Worldheart Phoenix, but got:\n" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
@ -102,8 +102,8 @@ public class PlayFromNonHandZoneTest extends CardTestPlayerBaseWithAIHelps {
|
|||
checkPlayableAbility("Can't cast Silvercoat", 2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Cast Silvercoat", false);
|
||||
|
||||
// CAN cast from exile
|
||||
castSpell(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Abzan Banner");
|
||||
castSpell(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Dragon Grip", "Narset, Enlightened Master");
|
||||
castSpell(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Abzan Banner", true);
|
||||
castSpell(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Dragon Grip", "Narset, Enlightened Master", true);
|
||||
castSpell(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Peach Garden Oath");
|
||||
|
||||
setStopAt(2, PhaseStep.END_TURN);
|
||||
|
@ -245,9 +245,10 @@ public class PlayFromNonHandZoneTest extends CardTestPlayerBaseWithAIHelps {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Forest", 1);
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{2}{W}{U}{B}{R}{G}: Exile");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
||||
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mountain");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Karn's Temporal Sundering");
|
||||
addTarget(playerA, playerA);
|
||||
addTarget(playerA, "Silvercoat Lion");
|
||||
|
@ -291,9 +292,11 @@ public class PlayFromNonHandZoneTest extends CardTestPlayerBaseWithAIHelps {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Forest", 1);
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{2}{W}{U}{B}{R}{G}: Exile");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
||||
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mountain");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Karn's Temporal Sundering");
|
||||
addTarget(playerA, playerA);
|
||||
addTarget(playerA, "Golos, Tireless Pilgrim"); // Return to hand
|
||||
|
@ -341,7 +344,7 @@ public class PlayFromNonHandZoneTest extends CardTestPlayerBaseWithAIHelps {
|
|||
|
||||
attack(2, playerB, "Fallen Shinobi");
|
||||
|
||||
castSpell(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Tormenting Voice");
|
||||
castSpell(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Tormenting Voice", true);
|
||||
setChoice(playerB, "Pillarfield Ox"); // Discord for Tormenting Voice
|
||||
|
||||
castSpell(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Demon of Catastrophes");
|
||||
|
@ -391,7 +394,7 @@ public class PlayFromNonHandZoneTest extends CardTestPlayerBaseWithAIHelps {
|
|||
|
||||
attack(2, playerB, "Fallen Shinobi");
|
||||
|
||||
castSpell(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Angelic Purge");
|
||||
castSpell(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Angelic Purge", true);
|
||||
setChoice(playerB, "Silvercoat Lion"); // Sacrifice for Purge
|
||||
addTarget(playerB, "Amulet of Kroog"); // Exile with Purge
|
||||
|
||||
|
@ -451,7 +454,7 @@ public class PlayFromNonHandZoneTest extends CardTestPlayerBaseWithAIHelps {
|
|||
|
||||
// cast purge from exile
|
||||
checkPlayableAbility("after exile - can play purge", 2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Cast Angelic Purge", true);
|
||||
castSpell(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Angelic Purge");
|
||||
castSpell(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Angelic Purge", true);
|
||||
setChoice(playerB, "Silvercoat Lion"); // sacrifice cost
|
||||
addTarget(playerB, "Amulet of Kroog"); // exile target
|
||||
|
||||
|
|
|
@ -204,7 +204,7 @@ public class PlayTopCardFromLibraryTest extends CardTestPlayerBase {
|
|||
addCard(Zone.GRAVEYARD, playerA, "Balduvian Bears", 1);
|
||||
|
||||
// prepare mind
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mind's Desire");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mind's Desire", true);
|
||||
|
||||
// Return target creature card with converted mana cost 3 or less from your graveyard to the battlefield.
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Revival", "Balduvian Bears"); // {W/B}{W/B} = 2 life
|
||||
|
|
|
@ -98,7 +98,7 @@ public class SpendOtherManaTest extends CardTestPlayerBase {
|
|||
// -7: You gain X life and draw X cards, where X is the number of lands you control.
|
||||
addCard(Zone.LIBRARY, playerA, "Nissa, Voice of Zendikar"); // {1}{G}{G}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Dark Petition");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Dark Petition", true);
|
||||
addTarget(playerA, "Nissa, Voice of Zendikar");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Nissa, Voice of Zendikar");
|
||||
|
|
|
@ -29,14 +29,15 @@ public class JacesPhantasmTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Jace's Phantasm");
|
||||
addCard(Zone.HAND, playerA, "Mind Sculpt", 3);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mind Sculpt", playerB);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mind Sculpt", playerB);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mind Sculpt", playerA);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mind Sculpt", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mind Sculpt", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mind Sculpt", true);
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Jace's Phantasm");
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
assertGraveyardCount(playerB, 21);
|
||||
assertPowerToughness(playerA, "Jace's Phantasm", 5, 5);
|
||||
}
|
||||
|
||||
|
@ -47,15 +48,18 @@ public class JacesPhantasmTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Mind Sculpt", 3);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Jace's Phantasm");
|
||||
castSpell(3, PhaseStep.POSTCOMBAT_MAIN, playerA, "Mind Sculpt", playerB);
|
||||
castSpell(3, PhaseStep.POSTCOMBAT_MAIN, playerA, "Mind Sculpt", playerB);
|
||||
castSpell(3, PhaseStep.POSTCOMBAT_MAIN, playerA, "Mind Sculpt", playerA);
|
||||
|
||||
castSpell(3, PhaseStep.POSTCOMBAT_MAIN, playerA, "Mind Sculpt");
|
||||
waitStackResolved(3, PhaseStep.POSTCOMBAT_MAIN);
|
||||
castSpell(3, PhaseStep.POSTCOMBAT_MAIN, playerA, "Mind Sculpt");
|
||||
waitStackResolved(3, PhaseStep.POSTCOMBAT_MAIN);
|
||||
castSpell(3, PhaseStep.POSTCOMBAT_MAIN, playerA, "Mind Sculpt", true);
|
||||
|
||||
setStopAt(3, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
assertGraveyardCount(playerB, 14);
|
||||
assertPowerToughness(playerA, "Jace's Phantasm", 5, 5);
|
||||
// assertGraveyardCount(playerB, 21);
|
||||
// assertPowerToughness(playerA, "Jace's Phantasm", 5, 5);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
package org.mage.test.cards.conditional;
|
||||
|
||||
import com.sun.org.apache.bcel.internal.generic.POP;
|
||||
import mage.abilities.keyword.FirstStrikeAbility;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.constants.ManaType;
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.Zone;
|
||||
import mage.counters.CounterType;
|
||||
|
@ -112,7 +114,7 @@ public class ManaWasSpentToCastTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Jaded Sell-Sword");
|
||||
addCard(Zone.HAND, playerA, "Strike It Rich", 1);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Strike It Rich");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Strike It Rich", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Jaded Sell-Sword");
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
|
@ -175,7 +177,7 @@ public class ManaWasSpentToCastTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Pyretic Ritual");
|
||||
addCard(Zone.HAND, playerA, "Gray Ogre");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Pyretic Ritual");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Pyretic Ritual", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Gray Ogre");
|
||||
|
||||
setStrictChooseMode(true);
|
||||
|
@ -200,6 +202,7 @@ public class ManaWasSpentToCastTest extends CardTestPlayerBase {
|
|||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{2}, {T}:");
|
||||
setChoice(playerA, true);
|
||||
setChoice(playerA, true);
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Gray Ogre");
|
||||
|
||||
setStrictChooseMode(true);
|
||||
|
@ -222,9 +225,9 @@ public class ManaWasSpentToCastTest extends CardTestPlayerBase {
|
|||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Gray Ogre");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mana Drain", "Gray Ogre");
|
||||
|
||||
waitStackResolved(1, PhaseStep.POSTCOMBAT_MAIN); // Let the Mana Drain delayed triggered ability resolve
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Sliver Construct");
|
||||
|
||||
setStrictChooseMode(true);
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
|
@ -251,6 +254,7 @@ public class ManaWasSpentToCastTest extends CardTestPlayerBase {
|
|||
setChoice(playerA, true);
|
||||
addTarget(playerA, "Gray Ogre");
|
||||
|
||||
waitStackResolved(1, PhaseStep.POSTCOMBAT_MAIN); // Let the Mana Drain delayed triggered ability resolve
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Sliver Construct");
|
||||
|
||||
setStrictChooseMode(true);
|
||||
|
|
|
@ -28,6 +28,7 @@ public class AngelsTombTest extends CardTestPlayerBase {
|
|||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Llanowar Elves");
|
||||
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Unsummon", "Angel's Tomb");
|
||||
waitStackResolved(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Angel's Tomb");
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
|
|
|
@ -25,6 +25,8 @@ public class BecomesCreatureTest extends CardTestPlayerBase {
|
|||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Chimeric Mass");
|
||||
setChoice(playerA, "X=3");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}:");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
@ -46,6 +48,8 @@ public class BecomesCreatureTest extends CardTestPlayerBase {
|
|||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Chimeric Mass");
|
||||
setChoice(playerA, "X=3");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}:");
|
||||
|
||||
setStopAt(2, PhaseStep.BEGIN_COMBAT);
|
||||
|
|
|
@ -2,6 +2,7 @@ package org.mage.test.cards.continuous;
|
|||
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.Zone;
|
||||
import mage.players.Player;
|
||||
import org.junit.Test;
|
||||
import org.mage.test.player.TestPlayer;
|
||||
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||
|
@ -19,6 +20,7 @@ public class BoostEnchantedTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Firebreathing"); // {R} Enchantment - Aura
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Firebreathing", "Silvercoat Lion");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{R}: Enchanted creature");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
@ -51,6 +53,7 @@ public class BoostEnchantedTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerB, "Boomerang"); // {U}{U} Instant
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Firebreathing", "Silvercoat Lion");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Boomerang", "Firebreathing");
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{R}: Enchanted creature", TestPlayer.NO_TARGET, "Boomerang");
|
||||
|
||||
|
@ -66,7 +69,6 @@ public class BoostEnchantedTest extends CardTestPlayerBase {
|
|||
* If the aura moves between activation and resolution, the new enchanted
|
||||
* creature should be boosted, not the old one.
|
||||
*/
|
||||
|
||||
@Test
|
||||
public void testFirebreathingWithAuraGraft() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2);
|
||||
|
@ -80,8 +82,9 @@ public class BoostEnchantedTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerB, "Aura Graft"); // {1}{U} Instant
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Firebreathing", "Silvercoat Lion");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN, 1);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{R}: Enchanted creature");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Aura Graft", "Firebreathing");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Aura Graft", "Firebreathing", "{R}: Enchanted");
|
||||
setChoice(playerB, "Pillarfield Ox");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
@ -91,7 +94,5 @@ public class BoostEnchantedTest extends CardTestPlayerBase {
|
|||
assertPermanentCount(playerB, "Firebreathing", 1);
|
||||
assertPowerToughness(playerA, "Silvercoat Lion", 2, 2);
|
||||
assertPowerToughness(playerB, "Pillarfield Ox", 3, 4);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -77,7 +77,7 @@ public class ChangelingTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, woodlandChangeling, 1);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Forest", 10);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, mimic);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, mimic, true);
|
||||
setChoice(playerA, "Sliver");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, woodlandChangeling);
|
||||
|
|
|
@ -22,12 +22,11 @@ public class ChiefOfTheFoundryTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Chief of the Foundry");
|
||||
addCard(Zone.HAND, playerA, "Chief of the Foundry");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Chief of the Foundry");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Chief of the Foundry", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Chief of the Foundry");
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
execute();
|
||||
|
||||
assertPowerToughness(playerA, "Chief of the Foundry", 3, 4, Filter.ComparisonScope.All);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -265,14 +265,15 @@ public class CommandersCastTest extends CardTestCommander4PlayersWithAIHelps {
|
|||
execute();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reported bug: https://github.com/magefree/mage/issues/5121
|
||||
* Exiling your commander from your graveyard should give you the option to put it in command zone
|
||||
* We were playing in a restarted-by-Karn game (if that mattered), and a player who exiled their
|
||||
* commander from graveyard via Delve was not given the opportunity to place it in the command zone.
|
||||
* Instead, it went directly to the exiled zone.
|
||||
*/
|
||||
@Test
|
||||
public void test_ExileWithDelvePayAndReturn() {
|
||||
// https://github.com/magefree/mage/issues/5121
|
||||
// Exiling your commander from your graveyard should give you the option to put it in command zone
|
||||
// We were playing in a restarted-by-Karn game (if that mattered), and a player who exiled their
|
||||
// commander from graveyard via Delve was not given the opportunity to place it in the command zone.
|
||||
// Instead, it went directly to the exiled zone.
|
||||
|
||||
// disable auto-payment for delve test
|
||||
disableManaAutoPayment(playerA);
|
||||
|
||||
|
@ -298,6 +299,7 @@ public class CommandersCastTest extends CardTestCommander4PlayersWithAIHelps {
|
|||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", "Balduvian Bears");
|
||||
setChoice(playerA, "Red"); // pay
|
||||
setChoice(playerA, false); // leave in graveyard
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
||||
// use commander as delve pay
|
||||
activateManaAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Add {U}", 5);
|
||||
|
|
|
@ -32,8 +32,8 @@ public class DaxosTheReturnedTest extends CardTestPlayerBase {
|
|||
// Whenever an opponent draws a card, Underworld Dreams deals 1 damage to that player.
|
||||
addCard(Zone.HAND, playerA, "Underworld Dreams", 2); // {B}{B}{B}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Underworld Dreams");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Underworld Dreams");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Underworld Dreams", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Underworld Dreams", true);
|
||||
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{1}{W}{B}");
|
||||
setStopAt(2, PhaseStep.PRECOMBAT_MAIN);
|
||||
execute();
|
||||
|
|
|
@ -33,7 +33,7 @@ public class DependentEffectsTest extends CardTestPlayerBase {
|
|||
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Plains", 2);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Opalescence");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Opalescence",true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Enchanted Evening");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
|
|
@ -13,9 +13,6 @@ import org.mage.test.serverside.base.CardTestPlayerBase;
|
|||
*/
|
||||
public class InfestTest extends CardTestPlayerBase {
|
||||
|
||||
/**
|
||||
* Tests creatures for Flying gained from Wonder ability when all conditions were met
|
||||
*/
|
||||
@Test
|
||||
public void testMassBoostEffectLocked() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 3);
|
||||
|
@ -26,9 +23,9 @@ public class InfestTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Grizzly Bears");
|
||||
addCard(Zone.HAND, playerA, "Grizzly Bears");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Infest");
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Grizzly Bears");
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Grizzly Bears");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Infest", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Grizzly Bears", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Grizzly Bears");
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
@ -38,7 +35,4 @@ public class InfestTest extends CardTestPlayerBase {
|
|||
assertGraveyardCount(playerA, "Elite Vanguard", 2);
|
||||
assertPermanentCount(playerA, "Grizzly Bears", 2);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -5,13 +5,14 @@ import mage.constants.Zone;
|
|||
import org.junit.Test;
|
||||
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||
|
||||
/**
|
||||
* {@link mage.cards.i.IrencragFeat Irencrag Feat}
|
||||
* Sorcery
|
||||
* {1}{R}{R}{R}
|
||||
* Add seven {R}. You can cast only one more spell this turn.
|
||||
*/
|
||||
public class IrencragFeatTest extends CardTestPlayerBase {
|
||||
|
||||
/*
|
||||
Irencrag Feat
|
||||
Add seven {R}. You can cast only one more spell this turn.
|
||||
*/
|
||||
|
||||
@Test
|
||||
public void castFirst() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 10);
|
||||
|
@ -78,6 +79,8 @@ public class IrencragFeatTest extends CardTestPlayerBase {
|
|||
|
||||
@Test
|
||||
public void castThirdOnStack() {
|
||||
// You may cast sorcery spell as though they had flash
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Wizards of Thay");
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 10);
|
||||
addCard(Zone.HAND, playerA, "Irencrag Feat", 1);
|
||||
addCard(Zone.HAND, playerA, "Lightning Bolt", 4);
|
||||
|
@ -89,7 +92,6 @@ public class IrencragFeatTest extends CardTestPlayerBase {
|
|||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerB);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerB);
|
||||
|
||||
setStrictChooseMode(true);
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
execute();
|
||||
|
||||
|
@ -108,6 +110,7 @@ public class IrencragFeatTest extends CardTestPlayerBase {
|
|||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerB);
|
||||
checkPlayableAbility("can cast before feat 2", 1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cast Lightning Bolt", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerB);
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
||||
// feat
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Irencrag Feat");
|
||||
|
@ -134,9 +137,9 @@ public class IrencragFeatTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Dwarven Trader", 4);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Irencrag Feat");
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Dwarven Trader");
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Dwarven Trader");
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Dwarven Trader");
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Dwarven Trader", true);
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Dwarven Trader", true);
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Dwarven Trader", true);
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Dwarven Trader");
|
||||
|
||||
setStrictChooseMode(true);
|
||||
|
|
|
@ -16,13 +16,17 @@ import org.mage.test.serverside.base.CardTestPlayerBase;
|
|||
*/
|
||||
public class LayerTests extends CardTestPlayerBase {
|
||||
|
||||
/**
|
||||
* Conspiracy -> Opalescence -> Enchanted Evening
|
||||
* Conspiracy is dependent on Opalescence
|
||||
* Opalescence is dependent on Enchanted Evening
|
||||
*
|
||||
* So, the effects should be applied as follows:
|
||||
* Enchanted Evening -> Opalescence -> Conspiracy
|
||||
*/
|
||||
@Test
|
||||
public void testMultipleLayeredDependency() {
|
||||
//Conspiracy->Opalescence->Enchanted Evening
|
||||
//Conspiracy is dependent on Opalescence
|
||||
//Opalescence is dependent on Enchanted Evening
|
||||
//So, the effects should be applied as follows:
|
||||
//Enchanted Evening->Opalescence->Conspiracy
|
||||
|
||||
|
||||
addCard(Zone.HAND, playerA, "Conspiracy"); // creatures get chosen subtype
|
||||
addCard(Zone.HAND, playerA, "Opalescence"); // enchantments become creatures P/T equal to CMC
|
||||
|
@ -33,9 +37,9 @@ public class LayerTests extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Island", 5);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Glorious Anthem", 1); // keep lands alive // all creatures +1/+1
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Conspiracy");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Conspiracy", true);
|
||||
setChoice(playerA, "Advisor");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Opalescence");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Opalescence", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Enchanted Evening");
|
||||
|
||||
setStrictChooseMode(true);
|
||||
|
@ -49,18 +53,15 @@ public class LayerTests extends CardTestPlayerBase {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* Reported bug:
|
||||
* This came up in a recent EDH game and we had no idea how to progress.
|
||||
* Player A cast a Humility, then a March of the Machines, and finally a Mycosynth Lattice.
|
||||
* Does the game get stuck in an endless loop of each card gaining and losing its respective creature-ness and abilities?
|
||||
* Answer: No, they all die
|
||||
*/
|
||||
@Test
|
||||
public void testMycosynthLatticeAndMarchOfTheMachinesAndHumility() {
|
||||
// example from Reddit
|
||||
/*
|
||||
This came up in a recent EDH game and we had no idea how to progress.
|
||||
Player A cast a Humility, then a March of the Machines, and finally
|
||||
a Mycosynth Lattice.
|
||||
Does the game get stuck in an endless loop of each card gaining and
|
||||
losing its respective creature-ness and abilities?
|
||||
Answer: No, they all die
|
||||
*/
|
||||
|
||||
addCard(Zone.HAND, playerA, "Mycosynth Lattice"); // all permanents are artifacts
|
||||
addCard(Zone.HAND, playerA, "March of the Machines"); // artifacts become creatures
|
||||
addCard(Zone.HAND, playerA, "Humility"); // all creatures lose abilities and P/T is 1/1
|
||||
|
@ -69,8 +70,8 @@ public class LayerTests extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Plains", 10);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Island", 10);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Humility");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "March of the Machines");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Humility", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "March of the Machines", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mycosynth Lattice");
|
||||
|
||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
|
@ -81,7 +82,6 @@ public class LayerTests extends CardTestPlayerBase {
|
|||
assertPermanentCount(playerA, "March of the Machines", 0);
|
||||
assertPermanentCount(playerA, "Mycosynth Lattice", 0);
|
||||
assertPermanentCount(playerA, "Island", 0);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -151,7 +151,7 @@ public class LayerTests extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Island", 2);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Animate Land", "Urborg, Tomb of Yawgmoth");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Ovinize", "Urborg, Tomb of Yawgmoth");
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Ovinize", "Urborg, Tomb of Yawgmoth");
|
||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
execute();
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ public class SerraAscendantTest extends CardTestPlayerBase {
|
|||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Wild Nacatl");
|
||||
|
||||
playLand(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Plains");
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Martyr of Sands");
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Martyr of Sands", true);
|
||||
activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}, You may reveal X white cards from your hand");
|
||||
setChoice(playerA, "Silvercoat Lion");
|
||||
setChoice(playerA, "Silvercoat Lion");
|
||||
|
|
|
@ -28,14 +28,15 @@ public class SplitSecondTest extends CardTestPlayerBase {
|
|||
|
||||
Assert.fail("must throw exception on execute");
|
||||
} catch (Throwable e) {
|
||||
if (!e.getMessage().contains("Player PlayerA must have 0 actions but found 1")) {
|
||||
if (!e.getMessage().contains("Cast Counterspell$target=Sudden Shock")) {
|
||||
Assert.fail("Should have thrown error about trying to use Counterspell, but got:\n" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
assertHandCount(playerA, "Counterspell", 1);
|
||||
assertGraveyardCount(playerA, "Sudden Shock", 1);
|
||||
assertLife(playerB, 20 - 2);
|
||||
// TODO: Re-enable when checkPlayableAbility can be used instead of try-catch
|
||||
// assertHandCount(playerA, "Counterspell", 1);
|
||||
// assertGraveyardCount(playerA, "Sudden Shock", 1);
|
||||
// assertLife(playerB, 20 - 2);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -9,6 +9,11 @@ import org.junit.Test;
|
|||
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||
|
||||
/**
|
||||
* {@link mage.cards.s.SwarmSurge Swarm Surge}
|
||||
* {2}{B}
|
||||
* Devoid
|
||||
* Creatures you control get +2/+0 until end of turn.
|
||||
* Colorless creatures you control also gain first strike until end of turn.
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
|
@ -23,12 +28,9 @@ public class SwarmSurgeTest extends CardTestPlayerBase {
|
|||
// When Birthing Hulk enters the battlefield, put two 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have "Sacrifice this creature: Add {C}."
|
||||
// {1}{C}: Regenerate Birthing Hulk.
|
||||
addCard(Zone.HAND, playerA, "Birthing Hulk"); // {6}{G} 5/4
|
||||
// Devoid
|
||||
// Creatures you control get +2/+0 until end of turn.
|
||||
// Colorless creatures you control also gain first strike until end of turn.
|
||||
addCard(Zone.HAND, playerA, "Swarm Surge"); // {2}{B}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Birthing Hulk");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Birthing Hulk", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Swarm Surge");
|
||||
|
||||
attack(1, playerA, "Silvercoat Lion");
|
||||
|
|
|
@ -26,7 +26,7 @@ public class WardenOfTheFirstTreeTest extends CardTestPlayerBase {
|
|||
// {3}{W/B}{W/B}{W/B}: If Warden of the First Tree is a Spirit, put five +1/+1 counters on it.
|
||||
addCard(Zone.HAND, playerA, "Warden of the First Tree", 2); // {G}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Warden of the First Tree");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Warden of the First Tree", true);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}{W/B}:");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
@ -48,7 +48,7 @@ public class WardenOfTheFirstTreeTest extends CardTestPlayerBase {
|
|||
// {3}{W/B}{W/B}{W/B}: If Warden of the First Tree is a Spirit, put five +1/+1 counters on it.
|
||||
addCard(Zone.HAND, playerA, "Warden of the First Tree", 2); // {G}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Warden of the First Tree");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Warden of the First Tree", true);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}{W/B}:");
|
||||
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{2}{W/B}{W/B}:");
|
||||
|
||||
|
@ -72,7 +72,7 @@ public class WardenOfTheFirstTreeTest extends CardTestPlayerBase {
|
|||
// {3}{W/B}{W/B}{W/B}: If Warden of the First Tree is a Spirit, put five +1/+1 counters on it.
|
||||
addCard(Zone.HAND, playerA, "Warden of the First Tree", 2); // {G}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Warden of the First Tree");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Warden of the First Tree", true);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}{W/B}:");
|
||||
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{2}{W/B}{W/B}:");
|
||||
|
||||
|
@ -104,7 +104,7 @@ public class WardenOfTheFirstTreeTest extends CardTestPlayerBase {
|
|||
// {3}{W/B}{W/B}{W/B}: If Warden of the First Tree is a Spirit, put five +1/+1 counters on it.
|
||||
addCard(Zone.HAND, playerA, "Warden of the First Tree", 2); // {G}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Warden of the First Tree");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Warden of the First Tree", true);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}{W/B}:");
|
||||
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{2}{W/B}{W/B}:");
|
||||
|
||||
|
|
|
@ -28,9 +28,10 @@ public class PlayCardsFromGraveyardTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerB, "Mountain");
|
||||
addCard(Zone.HAND, playerB, "Lightning Bolt");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Yawgmoth's Will");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Reviving Dose");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Yawgmoth's Will", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Reviving Dose", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Lightning Bolt", "Silvercoat Lion");
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
|
|
@ -52,10 +52,11 @@ public class CastOtherPlayersCardFromExileTest extends CardTestPlayerBase {
|
|||
|
||||
// setStrictChooseMode(true);
|
||||
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Bottle Gnomes");
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Bottle Gnomes", true);
|
||||
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Sacrifice");
|
||||
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Wildwood Rebirth", "Bottle Gnomes");
|
||||
waitStackResolved(2, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Bottle Gnomes");
|
||||
|
||||
setStopAt(2, PhaseStep.BEGIN_COMBAT);
|
||||
|
@ -86,6 +87,7 @@ public class CastOtherPlayersCardFromExileTest extends CardTestPlayerBase {
|
|||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Bottle Gnomes");
|
||||
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Saving Grasp", "Bottle Gnomes");
|
||||
waitStackResolved(2, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Bottle Gnomes");
|
||||
|
||||
setStopAt(2, PhaseStep.BEGIN_COMBAT);
|
||||
|
|
|
@ -26,6 +26,7 @@ public class DebtOfLoyaltyTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerB, "Metallic Sliver"); // 1/1
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Debt of Loyalty", "Metallic Sliver");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Tremor");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
|
|
@ -91,7 +91,7 @@ public class ExileAndReturnUnderYourControl extends CardTestPlayerBase {
|
|||
|
||||
setStrictChooseMode(true);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Master of Pearls");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Master of Pearls", true);
|
||||
setChoice(playerA, true); // cast it face down as 2/2 creature
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Villainous Wealth", playerB);
|
||||
|
|
|
@ -62,7 +62,7 @@ public class GainControlTargetEffectTest extends CardTestPlayerBase {
|
|||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{2}, {T}: Gain control of target creature with power less than or equal to the number of Islands you control for as long as {this} remains tapped.", "Glen Elendra Archmage");
|
||||
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Lightning Strike", playerA);
|
||||
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{U}, Sacrifice {this}: Counter target noncreature spell.", "Lightning Strike");
|
||||
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{U}, Sacrifice {this}: Counter target noncreature spell.", "Lightning Strike", "Lightning Strike");
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
@ -117,7 +117,7 @@ public class GainControlTargetEffectTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerB, "Plains", 2);
|
||||
addCard(Zone.HAND, playerB, "Silvercoat Lion", 1);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Steel Golem");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Steel Golem", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Donate", playerB);
|
||||
addTarget(playerA, "Steel Golem");
|
||||
|
||||
|
|
|
@ -176,7 +176,7 @@ public class GontiLordOfLuxuryEffectTest extends CardTestPlayerBase {
|
|||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Gonti, Lord of Luxury");
|
||||
// Player B is autochosen since only option
|
||||
setChoice(playerA, "Ob Nixilis Reignited");
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Ob Nixilis Reignited");
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Ob Nixilis Reignited", true);
|
||||
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "-3:", "Dross Crocodile");
|
||||
|
||||
attack(2, playerB, "Dross Crocodile", "Ob Nixilis Reignited");
|
||||
|
@ -197,6 +197,5 @@ public class GontiLordOfLuxuryEffectTest extends CardTestPlayerBase {
|
|||
|
||||
assertHandCount(playerB, "Ob Nixilis Reignited", 0);
|
||||
assertPermanentCount(playerB, "Ob Nixilis Reignited", 1);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@ public class ItThatBetraysTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerB, "It That Betrays");
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}, Pay 1 life, Sacrifice");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerB, "{T}, Pay 1 life, Sacrifice");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
|
|
@ -29,9 +29,9 @@ public class WelcomeToTheFoldTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerB, "Jace, Vryn's Prodigy", 1); // 0/2
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Elite Vanguard", 1); // 2/1
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Welcome to the Fold");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Welcome to the Fold", true);
|
||||
addTarget(playerA, "Arashin Cleric"); // does not gain control
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Welcome to the Fold");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Welcome to the Fold", true);
|
||||
addTarget(playerA, "Jace, Vryn's Prodigy"); // gains control
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Welcome to the Fold");
|
||||
addTarget(playerA, "Elite Vanguard"); // gains control
|
||||
|
|
|
@ -64,7 +64,7 @@ public class CleverImpersonatorTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Balduvian Bears", 1);
|
||||
addCard(Zone.HAND, playerB, "Balduvian Bears", 1);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Clever Impersonator");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Clever Impersonator", true);
|
||||
setChoice(playerA, true); // make copy
|
||||
setChoice(playerA, "Liliana, Defiant Necromancer"); // copy target
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "+2: Each player discards a card");
|
||||
|
@ -157,8 +157,9 @@ public class CleverImpersonatorTest extends CardTestPlayerBase {
|
|||
|
||||
}
|
||||
|
||||
/*
|
||||
* Reported bug: could not use Clever Impersonator to copy Dawn's Reflection
|
||||
/**
|
||||
* Reported bug:
|
||||
* Could not use Clever Impersonator to copy Dawn's Reflection
|
||||
*/
|
||||
@Test
|
||||
public void dawnsReflectionCopiedByImpersonator() {
|
||||
|
@ -181,10 +182,10 @@ public class CleverImpersonatorTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Forest", 6);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, dReflection, "Forest"); // enchant a forest
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, impersonator);
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, impersonator);
|
||||
setChoice(playerA, dReflection); // have Impersonator enter as copy of Dawn's Reflection
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
assertHandCount(playerA, dReflection, 0);
|
||||
|
@ -206,14 +207,22 @@ public class CleverImpersonatorTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerB, "Dragon Appeasement");
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Island", 5);
|
||||
|
||||
setStrictChooseMode(true);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Kindred Discovery"); // Construct token auto-chosen
|
||||
setChoice(playerA, "Thopter");
|
||||
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Clever Impersonator");
|
||||
setChoice(playerB, "Yes");
|
||||
setChoice(playerB, "Kindred Discovery");
|
||||
setChoice(playerB, "Thopter");
|
||||
|
||||
waitStackResolved(2, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Ornithopter");
|
||||
waitStackResolved(2, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Ornithopter");
|
||||
waitStackResolved(2, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Memnite");
|
||||
|
||||
setStopAt(2, PhaseStep.END_COMBAT);
|
||||
|
@ -221,5 +230,4 @@ public class CleverImpersonatorTest extends CardTestPlayerBase {
|
|||
|
||||
assertHandCount(playerB, 2);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -69,9 +69,10 @@ public class CopyCreatureCardToTokenImplTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerB, "Thrashing Brontodon"); // Creature {1}{G}{G}
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Forest", 4);
|
||||
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Thrashing Brontodon");
|
||||
activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "{1}, Sacrifice");
|
||||
// Alpha Myr is auto-chosen since only valid target
|
||||
setStrictChooseMode(true);
|
||||
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Thrashing Brontodon", true);
|
||||
activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "{1}, Sacrifice", "Alpha Myr");
|
||||
|
||||
setStopAt(2, PhaseStep.BEGIN_COMBAT);
|
||||
execute();
|
||||
|
@ -84,5 +85,4 @@ public class CopyCreatureCardToTokenImplTest extends CardTestPlayerBase {
|
|||
assertPermanentCount(playerA, "Thrashing Brontodon", 1);
|
||||
assertType("Thrashing Brontodon", CardType.ARTIFACT, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -33,6 +33,7 @@ public class EldraziMimicTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerB, "Swamp", 2);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Thought Harvester");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Terror", "Thought Harvester");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
|
|
@ -145,7 +145,7 @@ public class EssenceOfTheWildCopyTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Silvercoat Lion", 1);
|
||||
|
||||
// apply -1/-1 effect (+2: Put a -1/-1 counter on up to one target creature.)
|
||||
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "+2:", "Essence of the Wild");
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "+2:", "Essence of the Wild");
|
||||
|
||||
// copy
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Silvercoat Lion");
|
||||
|
|
|
@ -102,7 +102,7 @@ public class EssenceOfTheWildTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Silvercoat Lion", 1);
|
||||
|
||||
// apply -1/-1 effect (+2: Put a -1/-1 counter on up to one target creature.)
|
||||
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "+2:", "Essence of the Wild");
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "+2:", "Essence of the Wild");
|
||||
|
||||
// copy
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Silvercoat Lion");
|
||||
|
|
|
@ -32,9 +32,11 @@ public class HelmOfTheHostTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Helm of the Host", 1);
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "0: Until end of turn");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Equip");
|
||||
|
||||
activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "0: Until end of turn");
|
||||
waitStackResolved(3, PhaseStep.PRECOMBAT_MAIN);
|
||||
activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "0: Until end of turn");
|
||||
|
||||
attack(3, playerA, "Gideon of the Trials");
|
||||
|
@ -50,5 +52,4 @@ public class HelmOfTheHostTest extends CardTestPlayerBase {
|
|||
assertLife(playerB, 12);
|
||||
assertLife(playerA, 20);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ public class InfiniteReflectionTest extends CardTestPlayerBase {
|
|||
// Nontoken creatures you control enter the battlefield as a copy of enchanted creature.
|
||||
addCard(Zone.HAND, playerA, "Infinite Reflection", 1); // {5}{U}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Infinite Reflection", "Silvercoat Lion");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Infinite Reflection", "Silvercoat Lion", true);
|
||||
// castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Nantuko Husk");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Reanimate", "Pillarfield Ox");
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
|
|
@ -134,7 +134,7 @@ public class KikiJikiMirrorBreakerTest extends CardTestPlayerBase {
|
|||
// You may have Body Double enter the battlefield as a copy of any creature card in a graveyard.
|
||||
addCard(Zone.HAND, playerB, "Body Double", 1); // {4}{U}
|
||||
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Body Double");
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Body Double", true);
|
||||
setChoice(playerB, "Silvercoat Lion");
|
||||
|
||||
activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "{T}: Create a token that's a copy of target nonlegendary creature you control, except it has haste. Sacrifice it at the beginning of the next end step.");
|
||||
|
|
|
@ -169,8 +169,9 @@ public class LazavDimirMastermindTest extends CardTestPlayerBase {
|
|||
skipInitShuffling();
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Target player mills a card.", playerB);
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Tribute to Hunger");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Tribute to Hunger");
|
||||
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Reanimate", "Lazav, Dimir Mastermind");
|
||||
|
||||
|
@ -213,7 +214,7 @@ public class LazavDimirMastermindTest extends CardTestPlayerBase {
|
|||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Target player mills a card.", playerB);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Rest in Peace");
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Rest in Peace");
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
|
|
@ -40,7 +40,7 @@ public class MimicVatTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1);
|
||||
|
||||
// clone the opponent's creature
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Clone");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Clone", true);
|
||||
setChoice(playerA, true); // use clone on etb
|
||||
setChoice(playerA, "Silvercoat Lion");
|
||||
|
||||
|
@ -77,7 +77,7 @@ public class MimicVatTest extends CardTestPlayerBase {
|
|||
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Phyrexian Metamorph");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Phyrexian Metamorph", true);
|
||||
setChoice(playerA, true);
|
||||
setChoice(playerA, "Silvercoat Lion");
|
||||
|
||||
|
|
|
@ -75,6 +75,7 @@ public class PhantasmalImageTest extends CardTestPlayerBase {
|
|||
|
||||
for (int i = 0; i < 12; i++) {
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Level up {1}");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
}
|
||||
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Phantasmal Image");
|
||||
|
@ -110,12 +111,11 @@ public class PhantasmalImageTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Phantasmal Image", 2);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Illusionary Servant");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Phantasmal Image", true);
|
||||
setChoice(playerA, "Illusionary Servant");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Phantasmal Image");
|
||||
setChoice(playerA, "Illusionary Servant-M10");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Phantasmal Image");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Phantasmal Image");
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ public class SplinterTwinTest extends CardTestPlayerBase {
|
|||
public void testCopyCreature() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 4);
|
||||
// Enchant creature
|
||||
// Enchanted creature has "{T}: Create a tokenthat's a copy of this creature onto the battlefield. That token has haste. Exile it at the beginning of the next end step."
|
||||
// Enchanted creature has "{T}: Create a token that's a copy of this creature onto the battlefield. That token has haste. Exile it at the beginning of the next end step."
|
||||
addCard(Zone.HAND, playerA, "Splinter Twin"); // {2}{R}{R}
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion");
|
||||
|
||||
|
@ -24,8 +24,9 @@ public class SplinterTwinTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerB, "Lightning Bolt");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Splinter Twin", "Silvercoat Lion");
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Create a token");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN, 1);
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Create a token");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Lightning Bolt", "Silvercoat Lion", "{T}: Create a token");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
@ -39,5 +40,4 @@ public class SplinterTwinTest extends CardTestPlayerBase {
|
|||
|
||||
assertPermanentCount(playerA, "Silvercoat Lion", 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ public class TheMimeoplasmTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1);
|
||||
|
||||
|
||||
castSpell(1,PhaseStep.PRECOMBAT_MAIN, playerA, "The Mimeoplasm");
|
||||
castSpell(1,PhaseStep.PRECOMBAT_MAIN, playerA, "The Mimeoplasm", true);
|
||||
setChoice(playerA, "Aven Riftwatcher");
|
||||
setChoice(playerA, "Silvercoat Lion");
|
||||
|
||||
|
|
|
@ -20,10 +20,11 @@ public class RemoveCounterCostTest extends CardTestPlayerBase {
|
|||
// {1}, Remove two +1/+1 counters from among creatures you control: Draw a card.
|
||||
addCard(Zone.HAND, playerA, "Novijen Sages");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Novijen Sages");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Novijen Sages", true);
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}, Remove two +1/+1 counters");
|
||||
setChoice(playerA, "X=2");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
execute();
|
||||
|
||||
|
|
|
@ -85,8 +85,8 @@ public class AdventureCardsTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Forest");
|
||||
addCard(Zone.HAND, playerA, "Curious Pair");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Treats to Share");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Curious Pair");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Treats to Share", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Curious Pair", true);
|
||||
|
||||
setStrictChooseMode(true);
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
@ -154,8 +154,8 @@ public class AdventureCardsTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Edgewall Innkeeper");
|
||||
addCard(Zone.HAND, playerA, "Curious Pair");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Treats to Share");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Curious Pair");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Treats to Share", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Curious Pair", true);
|
||||
|
||||
setStrictChooseMode(true);
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
@ -319,8 +319,9 @@ public class AdventureCardsTest extends CardTestPlayerBase {
|
|||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Psychic Intrusion", playerB);
|
||||
setChoice(playerA, "Curious Pair");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Treats to Share");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Treats to Share", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Curious Pair");
|
||||
|
||||
setStrictChooseMode(true);
|
||||
|
@ -361,8 +362,10 @@ public class AdventureCardsTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Rimrock Knight", 2);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Boulder Rush", "Eager Cadet");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Boulder Rush", "Eager Cadet");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Rimrock Knight");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Rimrock Knight", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Rimrock Knight");
|
||||
|
||||
setStrictChooseMode(true);
|
||||
|
|
|
@ -364,7 +364,7 @@ public class CastFromHandWithoutPayingManaCostTest extends CardTestPlayerBase {
|
|||
// Creature - 3/3 Swampwalk
|
||||
addCard(Zone.HAND, playerA, "Bog Wraith", 1); // Creature {3}{B} (3/3)
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Omniscience");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Omniscience", true);
|
||||
setChoice(playerA, true); // Pay alternative costs? ({W}{U}{B}{R}{G})
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Bog Wraith");
|
||||
|
|
|
@ -36,6 +36,7 @@ public class CastFromLibraryWithoutPayingManaCostTest extends CardTestPlayerBase
|
|||
|
||||
// Equip Sunforger to Storm Crow.
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Equip", "Storm Crow");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
// Unattach Sunforger to cast Utter End from library targeting Gray Ogre.
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{R}{W}, Unattach");
|
||||
addTarget(playerA, "Utter End");
|
||||
|
@ -46,6 +47,7 @@ public class CastFromLibraryWithoutPayingManaCostTest extends CardTestPlayerBase
|
|||
|
||||
// Equip Sunforger to Storm Crow again.
|
||||
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Equip", "Storm Crow");
|
||||
waitStackResolved(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
// Unattach Sunforger to cast Utter End from library targeting Hill Giant.
|
||||
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{R}{W}, Unattach");
|
||||
addTarget(playerA, "Utter End");
|
||||
|
@ -73,11 +75,12 @@ public class CastFromLibraryWithoutPayingManaCostTest extends CardTestPlayerBase
|
|||
// converted mana cost 4 or less and cast that card without paying its mana cost. Then shuffle your library.
|
||||
// Equip {3}
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Sunforger");
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Elixir of Immortality");
|
||||
// {2}, {T}: You gain 5 life. Shuffle Elixir of Immortality and your graveyard into their owner's library.
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Elixir of Immortality");
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Plains", 10);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 10);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 10);
|
||||
// Instant
|
||||
// Exile target nonland permanent.
|
||||
addCard(Zone.HAND, playerA, "Utter End");
|
||||
|
||||
|
@ -92,6 +95,7 @@ public class CastFromLibraryWithoutPayingManaCostTest extends CardTestPlayerBase
|
|||
|
||||
// Equip Sunforger to Storm Crow.
|
||||
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Equip", "Storm Crow");
|
||||
waitStackResolved(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
// Unattach Sunforger to cast Utter End from library targeting Hill Giant.
|
||||
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{R}{W}, Unattach");
|
||||
addTarget(playerA, "Utter End");
|
||||
|
@ -111,5 +115,4 @@ public class CastFromLibraryWithoutPayingManaCostTest extends CardTestPlayerBase
|
|||
// Check that Utter End is in the graveyard.
|
||||
assertGraveyardCount(playerA, "Utter End", 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -73,7 +73,7 @@ public class CostModificationTest extends CardTestPlayerBase {
|
|||
|
||||
Assert.fail("must throw exception on execute");
|
||||
} catch (Throwable e) {
|
||||
if (!e.getMessage().contains("Player PlayerB must have 0 actions but found 1")) {
|
||||
if (!e.getMessage().contains("Cast Gitaxian Probe$targetPlayer=PlayerA")) {
|
||||
Assert.fail("must throw error about having 0 actions, but got:\n" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
@ -121,7 +121,7 @@ public class CostModificationTest extends CardTestPlayerBase {
|
|||
|
||||
Assert.fail("must throw exception on execute");
|
||||
} catch (Throwable e) {
|
||||
if (!e.getMessage().contains("Player PlayerA must have 0 actions but found 1")) {
|
||||
if (!e.getMessage().contains("Cast Myr Superion")) {
|
||||
Assert.fail("must throw error about having 0 actions, but got:\n" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
@ -144,7 +144,7 @@ public class CostModificationTest extends CardTestPlayerBase {
|
|||
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Carnivorous Moss-Beast"); // 4/5
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Pyretic Ritual");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Pyretic Ritual", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Fated Conflagration", "Carnivorous Moss-Beast");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
@ -212,8 +212,8 @@ public class CostModificationTest extends CardTestPlayerBase {
|
|||
|
||||
addCard(Zone.HAND, playerA, "Zoetic Cavern");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion", true);
|
||||
|
||||
playLand(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Zoetic Cavern");
|
||||
setChoice(playerA, true);
|
||||
|
@ -247,7 +247,7 @@ public class CostModificationTest extends CardTestPlayerBase {
|
|||
|
||||
addCard(Zone.HAND, playerA, "Zoetic Cavern");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion");
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
|
@ -439,6 +439,7 @@ public class CostModificationTest extends CardTestPlayerBase {
|
|||
Assert.assertEquals("must have max possible X as 4", 4, cost.getMaxValue(ability, game));
|
||||
});
|
||||
|
||||
waitStackResolved(3, PhaseStep.PRECOMBAT_MAIN);
|
||||
// Huatli: make x cost -3 instead -4
|
||||
activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "-X: {this} deals X damage divided as you choose");
|
||||
setChoice(playerA, "X=4");
|
||||
|
@ -473,7 +474,7 @@ public class CostModificationTest extends CardTestPlayerBase {
|
|||
checkPlayableAbility("before", 1, PhaseStep.PRECOMBAT_MAIN, playerA, "-8:", false);
|
||||
|
||||
// prepare duplicates
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Spark Double");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Spark Double", true);
|
||||
setChoice(playerA, true); // copy
|
||||
setChoice(playerA, "Carth the Lion"); // copy target
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Spark Double");
|
||||
|
|
|
@ -90,9 +90,8 @@ public class CostReduceForEachTest extends CardTestPlayerBaseWithAIHelps {
|
|||
checkPlayableAbility("no cost reduction 1", 1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cast Khalni Hydra", false);
|
||||
|
||||
// prepare creatures for reduce
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Balduvian Bears");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Balduvian Bears");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN, playerA);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Balduvian Bears", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Balduvian Bears", true);
|
||||
checkPlayableAbility("no cost reduction 2", 1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cast Khalni Hydra", false);
|
||||
|
||||
// can cast on next turn
|
||||
|
@ -120,14 +119,12 @@ public class CostReduceForEachTest extends CardTestPlayerBaseWithAIHelps {
|
|||
|
||||
// prepare creatures for reduce
|
||||
activateManaAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Add {G}", 4);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Balduvian Bears", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Balduvian Bears");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Balduvian Bears");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN, playerA);
|
||||
checkPlayableAbility("no cost reduction 2", 1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cast Torgaar, Famine Incarnate", false);
|
||||
|
||||
// can cast on next turn
|
||||
checkPlayableAbility("must reduce", 3, PhaseStep.PRECOMBAT_MAIN, playerA, "Cast Torgaar, Famine Incarnate", true);
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Torgaar, Famine Incarnate");
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Torgaar, Famine Incarnate", true);
|
||||
setChoice(playerA, "X=2"); // two creatures sacrifice
|
||||
setChoice(playerA, "Balduvian Bears");
|
||||
setChoice(playerA, "Balduvian Bears");
|
||||
|
|
|
@ -28,7 +28,7 @@ public class HeartstoneTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerB, "Lightning Bolt");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Lightning Bolt", playerA);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}{U}, Tap two untapped Wizards you control: Copy target instant or sorcery spell. You may choose new targets for the copy.", "Lightning Bolt");
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}{U}", "Lightning Bolt", "Lightning Bolt");
|
||||
setChoice(playerA, true);
|
||||
addTarget(playerA, playerB);
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
|
|
@ -72,11 +72,12 @@ public class KaradorGhostChieftainTest extends CardTestPlayerBase {
|
|||
// During each of your turns, you may cast one creature card from your graveyard.
|
||||
addCard(Zone.HAND, playerA, "Karador, Ghost Chieftain");// {5}{B}{G}{W}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Karador, Ghost Chieftain");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Karador, Ghost Chieftain", true);
|
||||
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion");
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion", true);
|
||||
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Cloudshift", "Karador, Ghost Chieftain");
|
||||
waitStackResolved(3, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion");
|
||||
|
||||
|
@ -112,7 +113,7 @@ public class KaradorGhostChieftainTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Gisa and Geralf"); // CREATURE {2}{U}{B} (4/4)
|
||||
|
||||
// prepare spels with same AsThough effects and puts creature to graveyard
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Karador, Ghost Chieftain");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Karador, Ghost Chieftain", true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Gisa and Geralf");
|
||||
|
||||
// you play any creatures due to two approve objects
|
||||
|
@ -132,5 +133,4 @@ public class KaradorGhostChieftainTest extends CardTestPlayerBase {
|
|||
setStopAt(3, PhaseStep.BEGIN_COMBAT);
|
||||
execute();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@ public class MizzixOfTheIzmagnusTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Incinerate"); // {1}{R}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerB);
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Incinerate", playerB);
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
execute();
|
||||
|
@ -51,6 +52,7 @@ public class MizzixOfTheIzmagnusTest extends CardTestPlayerBase {
|
|||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Blaze", playerB);
|
||||
setChoice(playerA, "X=1");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Blaze", playerB);
|
||||
setChoice(playerA, "X=2");
|
||||
|
||||
|
@ -79,6 +81,7 @@ public class MizzixOfTheIzmagnusTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Seething Anger"); // {R} Buyback {3}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerB);
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Seething Anger", "Mizzix of the Izmagnus");
|
||||
setChoice(playerA, true);
|
||||
|
||||
|
@ -113,6 +116,7 @@ public class MizzixOfTheIzmagnusTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion");// 2/2
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Engulfing Flames", "Silvercoat Lion");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Flashback", "Silvercoat Lion");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
|
|
|
@ -100,7 +100,7 @@ public class ExcessDamageTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, bolt);
|
||||
|
||||
setStrictChooseMode(true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, bolt, gideon);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, bolt, gideon, true);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "0:");
|
||||
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, spill, gideon);
|
||||
|
|
|
@ -36,7 +36,7 @@ public class ConjureTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerA, "Plains", 6);
|
||||
addCard(Zone.HAND, playerA, trainer);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, trainer);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, trainer, true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, pegasus);
|
||||
|
||||
setStrictChooseMode(true);
|
||||
|
|
|
@ -54,9 +54,9 @@ public class EmblemsTest extends CardTestPlayerBase {
|
|||
addCounters(1, PhaseStep.UPKEEP, playerA, "Sorin, Lord of Innistrad", CounterType.LOYALTY, 1);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "-2: You get an emblem");
|
||||
activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "-2: You get an emblem");
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Elite Inquisitor");
|
||||
castSpell(3, PhaseStep.POSTCOMBAT_MAIN, playerA, "Elite Inquisitor");
|
||||
|
||||
setStopAt(3, PhaseStep.END_COMBAT);
|
||||
setStopAt(3, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
assertGraveyardCount(playerA, "Sorin, Lord of Innistrad", 1);
|
||||
|
|
|
@ -88,6 +88,7 @@ public class AnimateDeadTest extends CardTestPlayerBase {
|
|||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Animate Dead", "Eternal Witness");
|
||||
setChoice(playerA, "Yes");
|
||||
addTarget(playerA, "Silvercoat Lion");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Lightning Bolt", "Eternal Witness");
|
||||
|
||||
|
|
|
@ -62,6 +62,7 @@ public class ClassTest extends CardTestPlayerBase {
|
|||
addCard(Zone.BATTLEFIELD, playerA, merfolk);
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{2}{U}");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{4}{U}");
|
||||
|
||||
setStopAt(3, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
@ -88,7 +89,9 @@ public class ClassTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, forest, 2);
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{2}{G}");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, forest);
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, forest);
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
|
@ -108,8 +111,11 @@ public class ClassTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, wastes);
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{2}{G}");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, forest);
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, wastes);
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{4}{G}");
|
||||
addTarget(playerA, wastes);
|
||||
|
||||
|
|
|
@ -72,7 +72,7 @@ public class EnchantingGraveyardCardsTest extends CardTestPlayerBase {
|
|||
// Lightning Bolt deals 3 damage to any target.
|
||||
addCard(Zone.GRAVEYARD, playerB, "Lightning Bolt", 1); // Instant {R}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, SPELLWEAVER_VOLUTE, LIGHTNING_BOLT);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, SPELLWEAVER_VOLUTE, LIGHTNING_BOLT, true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cloak of Feathers", "Silvercoat Lion");
|
||||
setChoice(playerA, true); // play the L. Bold
|
||||
addTarget(playerA, playerB); // Add Target for the L. Bold
|
||||
|
@ -118,7 +118,7 @@ public class EnchantingGraveyardCardsTest extends CardTestPlayerBase {
|
|||
// Lightning Bolt deals 3 damage to any target.
|
||||
addCard(Zone.GRAVEYARD, playerB, "Lightning Bolt", 1); // Instant {R}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, SPELLWEAVER_VOLUTE, LIGHTNING_BOLT);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, SPELLWEAVER_VOLUTE, LIGHTNING_BOLT, true);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cloak of Feathers", "Silvercoat Lion");
|
||||
setChoice(playerA, true); // play the L. Bold
|
||||
addTarget(playerA, playerB); // Add Target for the L. Bold
|
||||
|
|
|
@ -23,6 +23,7 @@ public class ParadoxHazeTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Verdant Force", 1); // {5}{G}{G}{G}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Paradox Haze", playerA);
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Verdant Force");
|
||||
|
||||
setStopAt(3, PhaseStep.PRECOMBAT_MAIN);
|
||||
|
@ -48,7 +49,8 @@ public class ParadoxHazeTest extends CardTestPlayerBase {
|
|||
addCard(Zone.HAND, playerA, "Verdant Force", 1); // {5}{G}{G}{G}
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Paradox Haze", playerA);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Copy Enchantment");
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Copy Enchantment", true);
|
||||
setChoice(playerA, "Paradox Haze");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Verdant Force");
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue