package org.mage.test.cards.abilities.activated; import mage.abilities.keyword.IndestructibleAbility; import mage.abilities.keyword.LifelinkAbility; import mage.constants.PhaseStep; import mage.constants.Zone; import mage.counters.CounterType; import mage.game.permanent.Permanent; import org.junit.Assert; import org.junit.Test; import org.mage.test.serverside.base.CardTestPlayerBase; /** * @author noxx */ public class LevelUpAbilityTest extends CardTestPlayerBase { /** * Tests creature without any level up counter */ @Test public void testFirstLevel() { addCard(Zone.BATTLEFIELD, playerA, "Transcendent Master"); addCard(Zone.BATTLEFIELD, playerA, "Plains", 15); setStopAt(2, PhaseStep.END_TURN); execute(); Permanent master = getPermanent("Transcendent Master", playerA.getId()); Assert.assertTrue(master.getCounters(currentGame).isEmpty()); Assert.assertEquals(3, master.getPower().getValue()); Assert.assertEquals(3, master.getToughness().getValue()); Assert.assertFalse(master.getAbilities().contains(LifelinkAbility.getInstance())); Assert.assertFalse(master.getAbilities().contains(IndestructibleAbility.getInstance())); } /** * Tests that putting level up counters really makes effect */ @Test public void testFirstLevelWithOneCounter() { addCard(Zone.BATTLEFIELD, playerA, "Transcendent Master"); addCard(Zone.BATTLEFIELD, playerA, "Plains", 15); activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Level up {1}"); setStopAt(2, PhaseStep.END_TURN); execute(); Permanent master = getPermanent("Transcendent Master", playerA.getId()); Assert.assertEquals(1, master.getCounters(currentGame).getCount(CounterType.LEVEL)); Assert.assertEquals(3, master.getPower().getValue()); Assert.assertEquals(3, master.getToughness().getValue()); Assert.assertFalse(master.getAbilities().contains(LifelinkAbility.getInstance())); Assert.assertFalse(master.getAbilities().contains(IndestructibleAbility.getInstance())); } /** * Tests second level that gives Lifelink as well as 6/6 */ @Test public void testSecondLevel() { addCard(Zone.BATTLEFIELD, playerA, "Transcendent Master"); addCard(Zone.BATTLEFIELD, playerA, "Plains", 15); for (int i = 0; i < 6; i++) { activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Level up {1}"); } setStopAt(2, PhaseStep.END_TURN); execute(); Permanent master = getPermanent("Transcendent Master", playerA.getId()); Assert.assertEquals(6, master.getCounters(currentGame).getCount(CounterType.LEVEL)); Assert.assertEquals(6, master.getPower().getValue()); Assert.assertEquals(6, master.getToughness().getValue()); // since now Lifelink will appear Assert.assertTrue(master.getAbilities().contains(LifelinkAbility.getInstance())); // but still no Indestructible Assert.assertFalse(master.getAbilities().contains(IndestructibleAbility.getInstance())); } /** * Tests third level that gives both Lifelink and Indestructible as well as 9/9 */ @Test public void testThirdLevel() { addCard(Zone.BATTLEFIELD, playerA, "Transcendent Master"); addCard(Zone.BATTLEFIELD, playerA, "Plains", 15); for (int i = 0; i < 12; i++) { activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Level up {1}"); } setStopAt(2, PhaseStep.END_TURN); execute(); Permanent master = getPermanent("Transcendent Master", playerA.getId()); Assert.assertEquals(12, master.getCounters(currentGame).getCount(CounterType.LEVEL)); Assert.assertEquals("Power different", 9, master.getPower().getValue()); Assert.assertEquals("Toughness different", 9, master.getToughness().getValue()); Assert.assertTrue(master.getAbilities().contains(LifelinkAbility.getInstance())); Assert.assertTrue(master.getAbilities().containsRule(IndestructibleAbility.getInstance())); } /** * Tests that extra counters won't make any effect over third level */ @Test public void testExtraCounters() { addCard(Zone.BATTLEFIELD, playerA, "Transcendent Master"); addCard(Zone.BATTLEFIELD, playerA, "Plains", 15); for (int i = 0; i < 15; i++) { activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Level up {1}"); } setStopAt(2, PhaseStep.END_TURN); execute(); Permanent master = getPermanent("Transcendent Master", playerA.getId()); Assert.assertEquals(15, master.getCounters(currentGame).getCount(CounterType.LEVEL)); Assert.assertEquals("Power different", 9, master.getPower().getValue()); Assert.assertEquals("Toughness different", 9, master.getToughness().getValue()); Assert.assertTrue(master.getAbilities().contains(LifelinkAbility.getInstance())); Assert.assertTrue(master.getAbilities().containsRule(IndestructibleAbility.getInstance())); } }