package org.mage.test.cards.abilities.lose; 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; /** * * @author noxx */ public class LoseAbilityTest extends CardTestPlayerBase { @Test public void testLoseFlyingByEnchantCreature() { addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); addCard(Zone.HAND, playerA, "Grounded", 2); addCard(Zone.BATTLEFIELD, playerA, "Elite Vanguard"); addCard(Zone.BATTLEFIELD, playerA, "Air Elemental"); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Grounded", "Elite Vanguard"); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Grounded", "Air Elemental"); setStopAt(2, PhaseStep.END_TURN); execute(); assertLife(playerA, 20); assertLife(playerB, 20); Permanent eliteVanguard = getPermanent("Elite Vanguard", playerA.getId()); Assert.assertNotNull(eliteVanguard); Assert.assertFalse(eliteVanguard.getAbilities().contains(FlyingAbility.getInstance())); Permanent airElemental = getPermanent("Air Elemental", playerA.getId()); Assert.assertNotNull(airElemental); // should NOT have flying Assert.assertFalse(airElemental.getAbilities().contains(FlyingAbility.getInstance())); } /** * Tests that first losing ability and then gaining it will results in Flying existence */ @Test public void testLoseVsGainAbility() { addCard(Zone.BATTLEFIELD, playerA, "Air Elemental"); addCard(Zone.BATTLEFIELD, playerA, "Forest", 2); addCard(Zone.HAND, playerA, "Grounded"); addCard(Zone.BATTLEFIELD, playerA, "Island", 6); 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"); setStopAt(2, PhaseStep.END_TURN); execute(); assertLife(playerA, 20); assertLife(playerB, 20); Permanent airElemental = getPermanent("Air Elemental", playerA.getId()); Assert.assertNotNull(airElemental); Assert.assertTrue(airElemental.getAttachments().size() == 2); // should have flying Assert.assertTrue(airElemental.getAbilities().contains(FlyingAbility.getInstance())); } /** * Tests that first gaining multiple copies of ability and then losing it will results in Flying not existence */ @Test public void testMultiGainVsLoseAbility() { addCard(Zone.BATTLEFIELD, playerA, "Air Elemental"); addCard(Zone.BATTLEFIELD, playerA, "Forest", 10); addCard(Zone.HAND, playerA, "Grounded"); addCard(Zone.BATTLEFIELD, playerA, "Island", 10); addCard(Zone.HAND, playerA, "Drake Umbra", 2); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Drake Umbra", "Air Elemental"); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Drake Umbra", "Air Elemental"); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Grounded", "Air Elemental"); setStopAt(1, PhaseStep.BEGIN_COMBAT); execute(); assertLife(playerA, 20); assertLife(playerB, 20); Permanent airElemental = getPermanent("Air Elemental", playerA.getId()); Assert.assertNotNull(airElemental); Assert.assertEquals(3, airElemental.getAttachments().size()); // should NOT have flying Assert.assertFalse(airElemental.getAbilities().contains(FlyingAbility.getInstance())); } /** * Tests that gaining two times a triggered ability and losing one will result in only one triggering */ @Test public void testMultiGainTriggeredVsLoseAbility() { addCard(Zone.BATTLEFIELD, playerA, "Sublime Archangel",2); /* * Sublime Archangel English * Creature — Angel 4/3, 2WW * Flying * Exalted (Whenever a creature you control attacks alone, that creature gets +1/+1 until end of turn.) * Other creatures you control have exalted. (If a creature has multiple instances of exalted, each triggers separately.) */ addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); addCard(Zone.BATTLEFIELD, playerA, "Plains", 3); addCard(Zone.BATTLEFIELD, playerA, "Island", 3); addCard(Zone.HAND, playerA, "Turn to Frog"); addCard(Zone.BATTLEFIELD, playerB, "Island", 5); castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Turn to Frog", "Sublime Archangel"); attack(3, playerA, "Silvercoat Lion"); setStopAt(3, PhaseStep.END_COMBAT); execute(); assertLife(playerA, 20); assertLife(playerB, 16); } }