mirror of
https://github.com/magefree/mage.git
synced 2025-12-23 20:11:59 -08:00
implement [M3C] Planar Nexus [MH3] Omo, Queen of Vesuva and [UNF] Nearby Planet ; introduce AllNonbasicLandTypes status (#12203)
This commit is contained in:
parent
3e18b58cac
commit
08c7d2ab8f
19 changed files with 659 additions and 5 deletions
|
|
@ -0,0 +1,89 @@
|
|||
package org.mage.test.cards.single.m3c;
|
||||
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.Zone;
|
||||
import mage.counters.CounterType;
|
||||
import org.junit.Test;
|
||||
import org.mage.test.player.TestPlayer;
|
||||
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||
|
||||
/**
|
||||
* @author Susucr
|
||||
*/
|
||||
public class OmoQueenOfVesuvaTest extends CardTestPlayerBase {
|
||||
|
||||
/**
|
||||
* {@link mage.cards.o.OmoQueenOfVesuva Omo, Queen of Vesuva} {2}{G/U}
|
||||
* Legendary Creature — Shapeshifter Noble
|
||||
* Whenever Omo, Queen of Vesuva enters the battlefield or attacks, put an everything counter on each of up to one target land and up to one target creature.
|
||||
* Each land with an everything counter on it is every land type in addition to its other types.
|
||||
* Each nonland creature with an everything counter on it is every creature type.
|
||||
* 1/5
|
||||
*/
|
||||
private static final String omo = "Omo, Queen of Vesuva";
|
||||
|
||||
@Test
|
||||
public void test_TronLand() {
|
||||
setStrictChooseMode(true);
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Forest", 3);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Urza's Tower");
|
||||
addCard(Zone.HAND, playerA, omo);
|
||||
addCard(Zone.HAND, playerA, "Abzan Banner");
|
||||
|
||||
activateManaAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Add {G}", 3);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, omo, true);
|
||||
addTarget(playerA, "Forest");
|
||||
addTarget(playerA, TestPlayer.TARGET_SKIP);
|
||||
|
||||
// Urza's Tower makes {3} mana
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Abzan Banner");
|
||||
|
||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
execute();
|
||||
|
||||
assertPermanentCount(playerA, "Abzan Banner", 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_IsForest() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Island", 3);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Coiling Woodworm", 1); // Coiling Woodworm’s power is equal to the number of Forests on the battlefield.
|
||||
addCard(Zone.HAND, playerA, omo);
|
||||
addCard(Zone.HAND, playerA, "Llanowar Elves");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, omo);
|
||||
addTarget(playerA, "Island");
|
||||
addTarget(playerA, TestPlayer.TARGET_SKIP);
|
||||
|
||||
setChoice(playerA, "Green"); // mana color to cast Llanowar Elves
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Llanowar Elves");
|
||||
|
||||
setStrictChooseMode(true);
|
||||
setStopAt(3, PhaseStep.POSTCOMBAT_MAIN);
|
||||
execute();
|
||||
|
||||
assertPowerToughness(playerA, "Coiling Woodworm", 1, 1);
|
||||
assertPermanentCount(playerA, "Llanowar Elves", 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_EveryCreatureSubType() {
|
||||
setStrictChooseMode(true);
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Island", 3);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Coiling Woodworm", 1); // Coiling Woodworm’s power is equal to the number of Forests on the battlefield.
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Imperious Perfect", 1); // Other Elves you control get +1/+1.
|
||||
addCard(Zone.HAND, playerA, omo);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, omo, true);
|
||||
addTarget(playerA, "Island");
|
||||
addTarget(playerA, "Coiling Woodworm");
|
||||
|
||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
execute();
|
||||
|
||||
assertCounterCount(playerA, "Coiling Woodworm", CounterType.EVERYTHING, 1);
|
||||
assertPowerToughness(playerA, "Coiling Woodworm", 2, 2); // 1 Forest, and is an Elf
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,112 @@
|
|||
package org.mage.test.cards.single.m3c;
|
||||
|
||||
import mage.abilities.keyword.TrampleAbility;
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.Zone;
|
||||
import org.junit.Test;
|
||||
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public class PlanarNexusTest extends CardTestPlayerBase {
|
||||
|
||||
private static final String nexus = "Planar Nexus";
|
||||
private static final String cloudpost = "Cloudpost";
|
||||
private static final String glimmerpost = "Glimmerpost";
|
||||
private static final String golem = "Stone Golem";
|
||||
|
||||
@Test
|
||||
public void testLocus() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, nexus);
|
||||
addCard(Zone.BATTLEFIELD, playerA, cloudpost);
|
||||
addCard(Zone.HAND, playerA, glimmerpost);
|
||||
addCard(Zone.HAND, playerA, golem);
|
||||
|
||||
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, glimmerpost);
|
||||
|
||||
setStrictChooseMode(true);
|
||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
execute();
|
||||
|
||||
assertLife(playerA, 20 + 3);
|
||||
|
||||
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, golem);
|
||||
setStopAt(3, PhaseStep.POSTCOMBAT_MAIN);
|
||||
execute();
|
||||
|
||||
assertPermanentCount(playerA, golem, 1);
|
||||
}
|
||||
|
||||
private static final String tower = "Urza's Tower";
|
||||
private static final String sentinel = "Gilded Sentinel";
|
||||
|
||||
@Test
|
||||
public void testTronLand() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, nexus);
|
||||
addCard(Zone.BATTLEFIELD, playerA, tower);
|
||||
addCard(Zone.HAND, playerA, sentinel);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, sentinel);
|
||||
|
||||
setStrictChooseMode(true);
|
||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
execute();
|
||||
|
||||
assertPermanentCount(playerA, sentinel, 1);
|
||||
}
|
||||
|
||||
private static final String seas = "Spreading Seas";
|
||||
|
||||
@Test
|
||||
public void testSpreadingSeas() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Island");
|
||||
addCard(Zone.BATTLEFIELD, playerA, nexus);
|
||||
addCard(Zone.HAND, playerA, seas);
|
||||
addCard(Zone.HAND, playerA, glimmerpost);
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, seas, nexus);
|
||||
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, glimmerpost);
|
||||
|
||||
setStrictChooseMode(true);
|
||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
execute();
|
||||
|
||||
assertLife(playerA, 20 + 1);
|
||||
}
|
||||
|
||||
private static final String vine = "Gatecreeper Vine";
|
||||
|
||||
@Test
|
||||
public void testGateSearch() {
|
||||
addCard(Zone.LIBRARY, playerA, nexus);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Forest", 2);
|
||||
addCard(Zone.HAND, playerA, vine);
|
||||
|
||||
setChoice(playerA, true);
|
||||
addTarget(playerA, nexus);
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, vine);
|
||||
|
||||
setStrictChooseMode(true);
|
||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
execute();
|
||||
|
||||
assertHandCount(playerA, nexus, 1);
|
||||
}
|
||||
|
||||
private static final String naga = "Sidewinder Naga";
|
||||
|
||||
@Test
|
||||
public void testDesertGraveyard() {
|
||||
addCard(Zone.GRAVEYARD, playerA, nexus);
|
||||
addCard(Zone.BATTLEFIELD, playerA, naga);
|
||||
|
||||
setStrictChooseMode(true);
|
||||
setStopAt(1, PhaseStep.PRECOMBAT_MAIN);
|
||||
execute();
|
||||
|
||||
assertPowerToughness(playerA, naga, 3 + 1, 2);
|
||||
assertAbility(playerA, naga, TrampleAbility.getInstance(), true);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue