package org.mage.test.cards.copy; import mage.abilities.keyword.DeathtouchAbility; import mage.abilities.keyword.FlyingAbility; import mage.constants.PhaseStep; import mage.constants.Zone; import mage.game.permanent.Permanent; import org.junit.Assert; import org.junit.Test; import org.mage.test.serverside.base.CardTestPlayerBase; /** * * Lazav, Dimir Mastermind * * Legendary Creature — Shapeshifter 3/3, UUBB * Hexproof * Whenever a creature card is put into an opponent's graveyard from anywhere, you may have * Lazav, Dimir Mastermind become a copy of that card except its name is still * Lazav, Dimir Mastermind, it's legendary in addition to its other types, and * it gains hexproof and this ability. * * @author LevelX2 */ public class LazavDimirMastermindTest extends CardTestPlayerBase { /** * Tests copy simple creature */ @Test public void testCopySimpleCreature() { addCard(Zone.BATTLEFIELD, playerA, "Lazav, Dimir Mastermind", 1); // Codex Shredder - Artifact // {T}: Target player puts the top card of his or her library into his or her graveyard. // {5}, {T}, Sacrifice Codex Shredder: Return target card from your graveyard to your hand. addCard(Zone.BATTLEFIELD, playerA, "Codex Shredder", 1); // Flying 3/2 addCard(Zone.LIBRARY, playerB, "Assault Griffin",5); skipInitShuffling(); activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Target player puts the top card of his or her library into his or her graveyard.", playerB); setStopAt(1, PhaseStep.END_TURN); execute(); assertPermanentCount(playerA, "Lazav, Dimir Mastermind", 1); assertPowerToughness(playerA, "Lazav, Dimir Mastermind", 3, 2); Permanent lazav = getPermanent("Lazav, Dimir Mastermind", playerA.getId()); Assert.assertTrue(lazav.getSubtype(currentGame).contains("Griffin")); Assert.assertTrue("Lazav, Dimir Mastermind must have flying",lazav.getAbilities().contains(FlyingAbility.getInstance())); } /** * Tests copy card with static abilitiy gaining ability to other permanents */ @Test public void testRatsHaveDeathtouch() { addCard(Zone.BATTLEFIELD, playerA, "Lazav, Dimir Mastermind", 1); addCard(Zone.BATTLEFIELD, playerA, "Gutter Skulk", 1); addCard(Zone.BATTLEFIELD, playerA, "Codex Shredder", 1); // Whenever another nontoken creature dies, you may put a 1/1 black Rat creature token onto the battlefield. // Rats you control have deathtouch. addCard(Zone.LIBRARY, playerB, "Ogre Slumlord",5); skipInitShuffling(); activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Target player puts the top card of his or her library into his or her graveyard.", playerB); setStopAt(1, PhaseStep.END_TURN); execute(); assertPermanentCount(playerA, "Lazav, Dimir Mastermind", 1); assertPowerToughness(playerA, "Lazav, Dimir Mastermind", 3, 3); Permanent lazav = getPermanent("Lazav, Dimir Mastermind", playerA.getId()); Assert.assertTrue(lazav.getSubtype(currentGame).contains("Ogre")); Assert.assertTrue(lazav.getSubtype(currentGame).contains("Rogue")); Permanent gutterSkulk = getPermanent("Gutter Skulk", playerA.getId()); Assert.assertTrue("Gutter Skulk should have deathtouch but hasn't", gutterSkulk.getAbilities().contains(DeathtouchAbility.getInstance())); } /** * Tests copy Nightveil Specter * * Nightveil Specter * Creature — Specter 2/3, {U/B}{U/B}{U/B} * Flying * Whenever Nightveil Specter deals combat damage to a player, that player exiles the top card of his or her library. * You may play cards exiled with Nightveil Specter. * */ @Test public void testCopyNightveilSpecter() { addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); addCard(Zone.BATTLEFIELD, playerA, "Lazav, Dimir Mastermind", 1); addCard(Zone.BATTLEFIELD, playerA, "Codex Shredder", 1); addCard(Zone.LIBRARY, playerB, "Silvercoat Lion",2); addCard(Zone.LIBRARY, playerB, "Nightveil Specter",1); skipInitShuffling(); activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Target player puts the top card of his or her library into his or her graveyard.", playerB); attack(3, playerA, "Lazav, Dimir Mastermind"); castSpell(3, PhaseStep.POSTCOMBAT_MAIN, playerA, "Silvercoat Lion"); setStopAt(3, PhaseStep.END_TURN); execute(); assertPermanentCount(playerA, "Lazav, Dimir Mastermind", 1); assertPowerToughness(playerA, "Lazav, Dimir Mastermind", 2, 3); Permanent lazav = getPermanent("Lazav, Dimir Mastermind", playerA.getId()); Assert.assertTrue(lazav.getAbilities().contains(FlyingAbility.getInstance())); Assert.assertTrue(lazav.getSubtype(currentGame).contains("Specter")); Assert.assertTrue(lazav.isLegendary()); assertPermanentCount(playerA, "Silvercoat Lion", 1); assertPowerToughness(playerA, "Silvercoat Lion", 2, 2); } @Test public void testCopyMultipleTimes() { addCard(Zone.BATTLEFIELD, playerA, "Lazav, Dimir Mastermind", 1); addCard(Zone.BATTLEFIELD, playerA, "Codex Shredder", 1); addCard(Zone.LIBRARY, playerB, "Silvercoat Lion",2); addCard(Zone.LIBRARY, playerB, "Nightveil Specter",1); skipInitShuffling(); // Lazav becomes a Nightveil Specter activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Target player puts the top card of his or her library into his or her graveyard.", playerB); // Lazav becomes a Silvercoat Lion activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Target player puts the top card of his or her library into his or her graveyard.", playerB); setStopAt(3, PhaseStep.END_TURN); execute(); assertPermanentCount(playerA, "Lazav, Dimir Mastermind", 1); assertPowerToughness(playerA, "Lazav, Dimir Mastermind", 2, 2); Permanent lazav = getPermanent("Lazav, Dimir Mastermind", playerA.getId()); Assert.assertTrue(lazav.getSubtype(currentGame).contains("Cat")); Assert.assertTrue(lazav.isLegendary()); } /** * Tests old copy is discarded after reanmiation of Lazav */ @Test public void testCopyAfterReanimation() { addCard(Zone.BATTLEFIELD, playerA ,"Swamp"); // Put target creature card from a graveyard onto the battlefield under your control. You lose life equal to its converted mana cost. addCard(Zone.HAND, playerA ,"Reanimate"); addCard(Zone.BATTLEFIELD, playerA, "Lazav, Dimir Mastermind", 1); // Codex Shredder - Artifact // {T}: Target player puts the top card of his or her library into his or her graveyard. // {5}, {T}, Sacrifice Codex Shredder: Return target card from your graveyard to your hand. addCard(Zone.BATTLEFIELD, playerA, "Codex Shredder", 1); addCard(Zone.BATTLEFIELD, playerB ,"Swamp", 3); // Flying 3/2 addCard(Zone.LIBRARY, playerB, "Assault Griffin",1); // Target opponent sacrifices a creature. You gain life equal to that creature's toughness. addCard(Zone.HAND, playerB ,"Tribute to Hunger"); skipInitShuffling(); activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Target player puts the top card of his or her library into his or her graveyard.", playerB); castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Tribute to Hunger"); castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Reanimate", "Lazav, Dimir Mastermind"); setStopAt(1, PhaseStep.END_TURN); execute(); assertGraveyardCount(playerB, "Tribute to Hunger", 1); assertGraveyardCount(playerA, "Reanimate", 1); assertLife(playerA, 16); // -4 from Reanmiate assertLife(playerB, 22); // +3 from Tribute to Hunger because Lazav is 3/2 assertPermanentCount(playerA, "Lazav, Dimir Mastermind", 1); assertPowerToughness(playerA, "Lazav, Dimir Mastermind", 3, 3); Permanent lazav = getPermanent("Lazav, Dimir Mastermind", playerA.getId()); Assert.assertFalse(lazav.getSubtype(currentGame).contains("Griffin")); // no Griffin type Assert.assertFalse("Lazav, Dimir Mastermind must have flying",lazav.getAbilities().contains(FlyingAbility.getInstance())); } /** * Tests if Lazav remains a copy of the creature after it is exiled */ @Test public void testCopyCreatureExiled() { addCard(Zone.BATTLEFIELD, playerA, "Lazav, Dimir Mastermind", 1); // Codex Shredder - Artifact // {T}: Target player puts the top card of his or her library into his or her graveyard. // {5}, {T}, Sacrifice Codex Shredder: Return target card from your graveyard to your hand. addCard(Zone.BATTLEFIELD, playerA, "Codex Shredder", 1); addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); addCard(Zone.HAND, playerA, "Rest in Peace", 1); // Flying 3/2 addCard(Zone.LIBRARY, playerB, "Assault Griffin",5); skipInitShuffling(); activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Target player puts the top card of his or her library into his or her graveyard.", playerB); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Rest in Peace"); setStopAt(1, PhaseStep.END_TURN); execute(); assertPermanentCount(playerA, "Lazav, Dimir Mastermind", 1); assertPowerToughness(playerA, "Lazav, Dimir Mastermind", 3, 2); Permanent lazav = getPermanent("Lazav, Dimir Mastermind", playerA.getId()); Assert.assertTrue(lazav.getSubtype(currentGame).contains("Griffin")); Assert.assertTrue("Lazav, Dimir Mastermind must have flying",lazav.getAbilities().contains(FlyingAbility.getInstance())); } }