mirror of
https://github.com/correl/mage.git
synced 2024-11-28 19:19:55 +00:00
- Added another complex layer test to LayerTests unit test
This commit is contained in:
parent
fd40085e4f
commit
29a4fbc27a
1 changed files with 82 additions and 31 deletions
|
@ -1,7 +1,6 @@
|
||||||
|
|
||||||
|
|
||||||
package org.mage.test.cards.continuous;
|
package org.mage.test.cards.continuous;
|
||||||
|
|
||||||
|
import mage.ObjectColor;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.PhaseStep;
|
import mage.constants.PhaseStep;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
|
@ -16,7 +15,7 @@ import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||||
* @author jeffwadsworth
|
* @author jeffwadsworth
|
||||||
*/
|
*/
|
||||||
public class LayerTests extends CardTestPlayerBase {
|
public class LayerTests extends CardTestPlayerBase {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testMultipleLayeredDependency() {
|
public void testMultipleLayeredDependency() {
|
||||||
//Conspiracy->Opalescence->Enchanted Evening
|
//Conspiracy->Opalescence->Enchanted Evening
|
||||||
|
@ -24,33 +23,33 @@ public class LayerTests extends CardTestPlayerBase {
|
||||||
//Opalescence is dependent on Enchanted Evening
|
//Opalescence is dependent on Enchanted Evening
|
||||||
//So, the effects should be applied as follows:
|
//So, the effects should be applied as follows:
|
||||||
//Enchanted Evening->Opalescence->Conspiracy
|
//Enchanted Evening->Opalescence->Conspiracy
|
||||||
|
|
||||||
addCard(Zone.HAND, playerA, "Conspiracy"); // creatures get chosen subtype
|
addCard(Zone.HAND, playerA, "Conspiracy"); // creatures get chosen subtype
|
||||||
addCard(Zone.HAND, playerA, "Opalescence"); // enchantments become creatures P/T equal to CMC
|
addCard(Zone.HAND, playerA, "Opalescence"); // enchantments become creatures P/T equal to CMC
|
||||||
addCard(Zone.HAND, playerA, "Enchanted Evening"); // all permanents become enchantments
|
addCard(Zone.HAND, playerA, "Enchanted Evening"); // all permanents become enchantments
|
||||||
|
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5);
|
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5);
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Plains", 5);
|
addCard(Zone.BATTLEFIELD, playerA, "Plains", 5);
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Island", 5);
|
addCard(Zone.BATTLEFIELD, playerA, "Island", 5);
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Glorious Anthem", 1); // keep lands alive // all creatures +1/+1
|
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");
|
||||||
setChoice(playerA, "Advisor");
|
setChoice(playerA, "Advisor");
|
||||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Opalescence");
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Opalescence");
|
||||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Enchanted Evening");
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Enchanted Evening");
|
||||||
|
|
||||||
setStrictChooseMode(true);
|
setStrictChooseMode(true);
|
||||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||||
execute();
|
execute();
|
||||||
assertAllCommandsUsed();
|
assertAllCommandsUsed();
|
||||||
|
|
||||||
assertType("Swamp", CardType.LAND, SubType.ADVISOR); // Subtype changed with Conspiracy
|
assertType("Swamp", CardType.LAND, SubType.ADVISOR); // Subtype changed with Conspiracy
|
||||||
assertPowerToughness(playerA, "Swamp", 1, 1); // boosted with Glorious Anthem
|
assertPowerToughness(playerA, "Swamp", 1, 1); // boosted with Glorious Anthem
|
||||||
assertType("Enchanted Evening", CardType.ENCHANTMENT, SubType.ADVISOR); // Subtype changed with Conspiracy
|
assertType("Enchanted Evening", CardType.ENCHANTMENT, SubType.ADVISOR); // Subtype changed with Conspiracy
|
||||||
assertPowerToughness(playerA, "Enchanted Evening", 6, 6); // boosted with Glorious Anthem
|
assertPowerToughness(playerA, "Enchanted Evening", 6, 6); // boosted with Glorious Anthem
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testMycosynthLatticeAndMarchOfTheMachinesAndHumility() {
|
public void testMycosynthLatticeAndMarchOfTheMachinesAndHumility() {
|
||||||
// example from Reddit
|
// example from Reddit
|
||||||
|
@ -61,32 +60,32 @@ public class LayerTests extends CardTestPlayerBase {
|
||||||
Does the game get stuck in an endless loop of each card gaining and
|
Does the game get stuck in an endless loop of each card gaining and
|
||||||
losing its respective creature-ness and abilities?
|
losing its respective creature-ness and abilities?
|
||||||
Answer: No, they all die
|
Answer: No, they all die
|
||||||
*/
|
*/
|
||||||
|
|
||||||
addCard(Zone.HAND, playerA, "Mycosynth Lattice"); // all permanents are artifacts
|
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, "March of the Machines"); // artifacts become creatures
|
||||||
addCard(Zone.HAND, playerA, "Humility"); // all creatures lose abilities and P/T is 1/1
|
addCard(Zone.HAND, playerA, "Humility"); // all creatures lose abilities and P/T is 1/1
|
||||||
|
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 10);
|
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 10);
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Plains", 10);
|
addCard(Zone.BATTLEFIELD, playerA, "Plains", 10);
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Island", 10);
|
addCard(Zone.BATTLEFIELD, playerA, "Island", 10);
|
||||||
|
|
||||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Humility");
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Humility");
|
||||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "March of the Machines");
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "March of the Machines");
|
||||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mycosynth Lattice");
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mycosynth Lattice");
|
||||||
|
|
||||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||||
execute();
|
execute();
|
||||||
assertAllCommandsUsed();
|
assertAllCommandsUsed();
|
||||||
|
|
||||||
// everything dies
|
// everything dies
|
||||||
assertPermanentCount(playerA, "Humility", 0);
|
assertPermanentCount(playerA, "Humility", 0);
|
||||||
assertPermanentCount(playerA, "March of the Machines", 0);
|
assertPermanentCount(playerA, "March of the Machines", 0);
|
||||||
assertPermanentCount(playerA, "Mycosynth Lattice", 0);
|
assertPermanentCount(playerA, "Mycosynth Lattice", 0);
|
||||||
assertPermanentCount(playerA, "Island", 0);
|
assertPermanentCount(playerA, "Island", 0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testBloodMoon_UrborgTombOfYawgmothInteraction() {
|
public void testBloodMoon_UrborgTombOfYawgmothInteraction() {
|
||||||
// Blood Moon : Nonbasic lands are Mountains.
|
// Blood Moon : Nonbasic lands are Mountains.
|
||||||
|
@ -95,7 +94,7 @@ public class LayerTests extends CardTestPlayerBase {
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Blood Moon");
|
addCard(Zone.BATTLEFIELD, playerA, "Blood Moon");
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Urborg, Tomb of Yawgmoth", 1); // non-basic land
|
addCard(Zone.BATTLEFIELD, playerA, "Urborg, Tomb of Yawgmoth", 1); // non-basic land
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Plains", 1);
|
addCard(Zone.BATTLEFIELD, playerA, "Plains", 1);
|
||||||
|
|
||||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||||
execute();
|
execute();
|
||||||
|
|
||||||
|
@ -112,35 +111,35 @@ public class LayerTests extends CardTestPlayerBase {
|
||||||
/*In play there is a Grizzly Bears which has already been Giant Growthed,
|
/*In play there is a Grizzly Bears which has already been Giant Growthed,
|
||||||
a Bog Wraith enchanted by a Lignify, and Figure of Destiny with its 3rd ability activated.
|
a Bog Wraith enchanted by a Lignify, and Figure of Destiny with its 3rd ability activated.
|
||||||
I then cast a Mirrorweave targeting the Figure of Destiny. What does each creature look like?
|
I then cast a Mirrorweave targeting the Figure of Destiny. What does each creature look like?
|
||||||
*/
|
*/
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Grizzly Bears", 1);
|
addCard(Zone.BATTLEFIELD, playerA, "Grizzly Bears", 1);
|
||||||
addCard(Zone.HAND, playerA, "Giant Growth", 1);
|
addCard(Zone.HAND, playerA, "Giant Growth", 1);
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Bog Wraith", 1);
|
addCard(Zone.BATTLEFIELD, playerA, "Bog Wraith", 1);
|
||||||
addCard(Zone.HAND, playerA, "Lignify", 1);
|
addCard(Zone.HAND, playerA, "Lignify", 1);
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Figure of Destiny", 1);
|
addCard(Zone.BATTLEFIELD, playerA, "Figure of Destiny", 1);
|
||||||
addCard(Zone.HAND, playerA, "Mirrorweave", 1);
|
addCard(Zone.HAND, playerA, "Mirrorweave", 1);
|
||||||
|
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Forest", 20);
|
addCard(Zone.BATTLEFIELD, playerA, "Forest", 20);
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Island", 20);
|
addCard(Zone.BATTLEFIELD, playerA, "Island", 20);
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Plains", 20);
|
addCard(Zone.BATTLEFIELD, playerA, "Plains", 20);
|
||||||
|
|
||||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Giant Growth", "Grizzly Bears");
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Giant Growth", "Grizzly Bears");
|
||||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lignify", "Bog Wrath");
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lignify", "Bog Wrath");
|
||||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{R/W}:");
|
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{R/W}:");
|
||||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{R/W}{R/W}{R/W}:");
|
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{R/W}{R/W}{R/W}:");
|
||||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{R/W}{R/W}{R/W}{R/W}{R/W}{R/W}:");
|
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{R/W}{R/W}{R/W}{R/W}{R/W}{R/W}:");
|
||||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mirrorweave", "Figure of Destiny");
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mirrorweave", "Figure of Destiny");
|
||||||
|
|
||||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||||
execute();
|
execute();
|
||||||
|
|
||||||
assertPermanentCount(playerA, "Figure of Destiny", 3);
|
assertPermanentCount(playerA, "Figure of Destiny", 3);
|
||||||
assertPowerToughness(playerA, "Figure of Destiny", 4, 4, Filter.ComparisonScope.All);
|
assertPowerToughness(playerA, "Figure of Destiny", 4, 4, Filter.ComparisonScope.All);
|
||||||
assertPowerToughness(playerA, "Figure of Destiny", 8, 8, Filter.ComparisonScope.All);
|
assertPowerToughness(playerA, "Figure of Destiny", 8, 8, Filter.ComparisonScope.All);
|
||||||
assertPowerToughness(playerA, "Figure of Destiny", 0, 4, Filter.ComparisonScope.All);
|
assertPowerToughness(playerA, "Figure of Destiny", 0, 4, Filter.ComparisonScope.All);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUrborgWithAnimateLandAndOvinize() {
|
public void testUrborgWithAnimateLandAndOvinize() {
|
||||||
// Animate Land: target land is a 3/3 until end of turn and is still a land.
|
// Animate Land: target land is a 3/3 until end of turn and is still a land.
|
||||||
|
@ -152,7 +151,7 @@ public class LayerTests extends CardTestPlayerBase {
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Urborg, Tomb of Yawgmoth", 1);
|
addCard(Zone.BATTLEFIELD, playerA, "Urborg, Tomb of Yawgmoth", 1);
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Forest", 1);
|
addCard(Zone.BATTLEFIELD, playerA, "Forest", 1);
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Island", 2);
|
addCard(Zone.BATTLEFIELD, playerA, "Island", 2);
|
||||||
|
|
||||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Animate Land", "Urborg, Tomb of Yawgmoth");
|
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.PRECOMBAT_MAIN, playerA, "Ovinize", "Urborg, Tomb of Yawgmoth");
|
||||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||||
|
@ -172,25 +171,77 @@ public class LayerTests extends CardTestPlayerBase {
|
||||||
one of his Hypnotist's abilities, targeting the Mimic. Aiden attacks with the Mimic, and
|
one of his Hypnotist's abilities, targeting the Mimic. Aiden attacks with the Mimic, and
|
||||||
casts Inside Out before the damage step. Once Inside Out resolves, Nick activates the ability
|
casts Inside Out before the damage step. Once Inside Out resolves, Nick activates the ability
|
||||||
of his other Hypnotist. How much damage will the Mimic deal?
|
of his other Hypnotist. How much damage will the Mimic deal?
|
||||||
*/
|
*/
|
||||||
addCard(Zone.HAND, playerA, "Scourge of the Nobilis", 1);
|
addCard(Zone.HAND, playerA, "Scourge of the Nobilis", 1);
|
||||||
addCard(Zone.HAND, playerA, "Inside Out", 1);
|
addCard(Zone.HAND, playerA, "Inside Out", 1);
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Battlegate Mimic", 1);
|
addCard(Zone.BATTLEFIELD, playerA, "Battlegate Mimic", 1);
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 8);
|
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 8);
|
||||||
addCard(Zone.BATTLEFIELD, playerA, "Island", 8);
|
addCard(Zone.BATTLEFIELD, playerA, "Island", 8);
|
||||||
|
|
||||||
addCard(Zone.BATTLEFIELD, playerB, "Wilderness Hypnotist", 2);
|
addCard(Zone.BATTLEFIELD, playerB, "Wilderness Hypnotist", 2);
|
||||||
|
|
||||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Scourge of the Nobilis", "Battlegate Mimic");
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Scourge of the Nobilis", "Battlegate Mimic");
|
||||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerB, "{T}:", "Battlegate Mimic");
|
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerB, "{T}:", "Battlegate Mimic");
|
||||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Inside Out", "Battlegate Mimic");
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Inside Out", "Battlegate Mimic");
|
||||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerB, "{T}:", "Battlegate Mimic");
|
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerB, "{T}:", "Battlegate Mimic");
|
||||||
|
|
||||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||||
execute();
|
execute();
|
||||||
|
|
||||||
assertPowerToughness(playerA, "Battlegate Mimic", 4, 2);
|
assertPowerToughness(playerA, "Battlegate Mimic", 4, 2);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testExampleFromReddit2021() {
|
||||||
|
// Life and Limb, Humility, and Yavimaya, Cradle of Growth
|
||||||
|
// Result: all lands (including Yavimaya) will be 1/1 green Forest
|
||||||
|
// lands and Saproling creatures in addition to their other types,
|
||||||
|
// and have no abilities.
|
||||||
|
|
||||||
|
/*
|
||||||
|
All Forests and all Saprolings are 1/1 green Saproling creatures
|
||||||
|
and Forest lands in addition to their other types. (They're affected by summoning sickness.)
|
||||||
|
*/
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, "Life and Limb", 1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
All creatures lose all abilities and have base power and toughness 1/1.
|
||||||
|
*/
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, "Humility", 1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Each land is a Forest in addition to its other land types.
|
||||||
|
*/
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, "Yavimaya, Cradle of Growth", 1);
|
||||||
|
|
||||||
|
// added some lands to the battlefield
|
||||||
|
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, "Plains", 1);
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1);
|
||||||
|
addCard(Zone.BATTLEFIELD, playerB, "Island", 1);
|
||||||
|
|
||||||
|
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||||
|
execute();
|
||||||
|
|
||||||
|
// all lands are forests in addition to other types
|
||||||
|
assertType("Plains", CardType.CREATURE, SubType.FOREST);
|
||||||
|
assertType("Swamp", CardType.CREATURE, SubType.FOREST);
|
||||||
|
assertType("Island", CardType.CREATURE, SubType.FOREST);
|
||||||
|
assertType("Yavimaya, Cradle of Growth", CardType.CREATURE, SubType.FOREST);
|
||||||
|
|
||||||
|
// all lands are 1/1 Saproling creatures
|
||||||
|
assertPowerToughness(playerA, "Plains", 1, 1);
|
||||||
|
assertPowerToughness(playerA, "Swamp", 1, 1);
|
||||||
|
assertPowerToughness(playerB, "Island", 1, 1);
|
||||||
|
assertPowerToughness(playerA, "Yavimaya, Cradle of Growth", 1, 1);
|
||||||
|
|
||||||
|
// all lands are green
|
||||||
|
assertColor(playerA, "Plains", ObjectColor.GREEN, true);
|
||||||
|
assertColor(playerA, "Swamp", ObjectColor.GREEN, true);
|
||||||
|
assertColor(playerB, "Island", ObjectColor.GREEN, true);
|
||||||
|
assertColor(playerA, "Yavimaya, Cradle of Growth", ObjectColor.GREEN, true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue