package org.mage.test.cards.single.emn; import mage.abilities.keyword.DefenderAbility; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.VigilanceAbility; 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; /** * * @author escplan9 (Derek Monturo - dmontur1 at gmail dot com) */ public class SoulSeparatorTest extends CardTestPlayerBase { @Test public void testBasicExileCreature() { // Soul Separator {3} Artifact // {5}, {T}, Sacrifice Soul Separator: Exile target creature card from your graveyard. // Create a token that's a copy of that card except it's 1/1, it's a Spirit in addition to its other types, and it has flying. // Create a black Zombie creature token onto the battlefield with power equal to that card's power and toughness equal that card's toughness. addCard(Zone.BATTLEFIELD, playerA, "Soul Separator"); addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5); addCard(Zone.GRAVEYARD, playerA, "Sylvan Advocate"); // 2/3 vigilance activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{5}"); addTarget(playerA, "Sylvan Advocate"); setStopAt(1, PhaseStep.BEGIN_COMBAT); execute(); assertGraveyardCount(playerA, "Soul Separator", 1); assertExileCount("Sylvan Advocate", 1); assertPermanentCount(playerA, "Sylvan Advocate", 1); assertPermanentCount(playerA, "Zombie", 1); assertPowerToughness(playerA, "Zombie", 2, 3); Permanent saToken = getPermanent("Sylvan Advocate", playerA); Assert.assertTrue(saToken.getAbilities().contains(FlyingAbility.getInstance())); Assert.assertTrue(saToken.getSubtype(currentGame).contains("Spirit")); Assert.assertTrue(saToken.getAbilities().contains(VigilanceAbility.getInstance())); assertPowerToughness(playerA, "Sylvan Advocate", 1, 1); } // Reported bug: Exiled Tree of Perdition with Soul Separator // The token copy when activated reduced the opponent's life total to 13 (tree toughness) instead of 1 (1/1 token) @Test public void testExileTreeOfPerdition() { // Soul Separator {3} Artifact // {5}, {T}, Sacrifice Soul Separator: Exile target creature card from your graveyard. // Create a token that's a copy of that card except it's 1/1, it's a Spirit in addition to its other types, and it has flying. // Create a black Zombie creature token onto the battlefield with power equal to that card's power and toughness equal that card's toughness. addCard(Zone.BATTLEFIELD, playerA, "Soul Separator"); addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5); // Tree of Perdition {3}{B} Creature - Defender (0/13) // {tap}: Exchange target opponent's life total with Tree of Perdition's toughness. addCard(Zone.GRAVEYARD, playerA, "Tree of Perdition"); activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{5}"); addTarget(playerA, "Tree of Perdition"); activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Exchange"); addTarget(playerA, playerB); setStopAt(3, PhaseStep.BEGIN_COMBAT); execute(); assertGraveyardCount(playerA, "Soul Separator", 1); assertExileCount("Tree of Perdition", 1); assertPermanentCount(playerA, "Tree of Perdition", 1); assertPermanentCount(playerA, "Zombie", 1); assertPowerToughness(playerA, "Zombie", 0, 13); Permanent treeToken = getPermanent("Tree of Perdition", playerA); Assert.assertTrue(treeToken.getAbilities().contains(FlyingAbility.getInstance())); Assert.assertTrue(treeToken.getSubtype(currentGame).contains("Spirit")); Assert.assertTrue(treeToken.getAbilities().contains(DefenderAbility.getInstance())); assertLife(playerA, 20); assertLife(playerB, 1); assertPowerToughness(playerA, "Tree of Perdition", 1, 20); } }