/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package org.mage.test.cards.abilities.keywords;
import mage.abilities.keyword.InfectAbility;
import mage.constants.PhaseStep;
import mage.constants.Zone;
import mage.counters.CounterType;
import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase;
/**
*
* @author LevelX2
*/
public class InfectTest extends CardTestPlayerBase {
/**
*
* 702.89. Infect 702.89a Infect is a static ability. 702.89b Damage dealt
* to a player by a source with infect doesn’t cause that player to lose
* life. Rather, it causes the player to get that many poison counters. See
* rule 119.3. 702.89c Damage dealt to a creature by a source with infect
* isn’t marked on that creature. Rather, it causes that many -1/-1 counters
* to be put on that creature. See rule 119.3. 702.89d If a permanent leaves
* the battlefield before an effect causes it to deal damage, its last known
* information is used to determine whether it had infect. 702.89e The
* infect rules function no matter what zone an object with infect deals
* damage from. 702.89f Multiple instances of infect on the same object are
* redundant.
*
*/
@Test
public void testNormalUse() {
addCard(Zone.BATTLEFIELD, playerB, "Tine Shrike"); // 2/1 Infect
attack(2, playerB, "Tine Shrike");
setStopAt(2, PhaseStep.POSTCOMBAT_MAIN);
execute();
assertCounterCount(playerA, CounterType.POISON, 2);
assertLife(playerA, 20);
assertLife(playerB, 20);
}
@Test
public void testLoseInfectUse() {
// Creatures your opponents control lose infect.
addCard(Zone.BATTLEFIELD, playerA, "Melira, Sylvok Outcast");
addCard(Zone.BATTLEFIELD, playerB, "Tine Shrike"); // 2/1 Infect
attack(2, playerB, "Tine Shrike");
setStopAt(2, PhaseStep.POSTCOMBAT_MAIN);
execute();
assertCounterCount(playerA, CounterType.POISON, 0);
assertLife(playerA, 18);
assertLife(playerB, 20);
}
/**
* Inkmoth Nexus has no effect it he attacks becaus it has infect but there
* are no counters added
* http://www.mtgsalvation.com/forums/magic-fundamentals/magic-rulings/magic-rulings-archives/296553-melira-sylvok-outcast-vs-inkmoth-nexus
*/
@Test
public void testInkmothNexusLoseInfect() {
// Creatures your opponents control lose infect.
// Creatures you control can't have -1/-1 counters placed on them.
addCard(Zone.BATTLEFIELD, playerA, "Melira, Sylvok Outcast");
// Put a -1/-1 counter on target creature. When that creature dies this turn, its controller gets a poison counter.
addCard(Zone.HAND, playerA, "Virulent Wound"); // Instant {B}
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1);
addCard(Zone.BATTLEFIELD, playerB, "Plains", 1);
addCard(Zone.BATTLEFIELD, playerB, "Inkmoth Nexus");
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Virulent Wound", "Melira, Sylvok Outcast");
// {1}: Inkmoth Nexus becomes a 1/1 Blinkmoth artifact creature with flying and infect until end of turn. It's still a land.
// (It deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.)
activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "{1}: {this} becomes");
attack(2, playerB, "Inkmoth Nexus");
setStopAt(2, PhaseStep.POSTCOMBAT_MAIN);
execute();
assertGraveyardCount(playerA, "Virulent Wound", 1);
assertPowerToughness(playerA, "Melira, Sylvok Outcast", 2, 2);
assertTapped("Plains", true);
assertTapped("Inkmoth Nexus", true);
assertCounterCount(playerA, CounterType.POISON, 0);
assertLife(playerA, 20);
assertLife(playerB, 20);
}
@Test
public void testInkmothPumpedByBecomeImmense1() {
addCard(Zone.BATTLEFIELD, playerA, "Forest", 7);
// {1}: Inkmoth Nexus becomes a 1/1 Blinkmoth artifact creature with flying and infect until end of turn. It's still a land.
// (It deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.)
addCard(Zone.BATTLEFIELD, playerA, "Inkmoth Nexus");
// Become Immense - {5}{G} - Instant
// Delve (Each card you exile from your graveyard while casting this spell pays for 1.)
// Target creature gets +6/+6 until end of turn.
addCard(Zone.HAND, playerA, "Become Immense", 1);
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}: {this} becomes");
attack(1, playerA, "Inkmoth Nexus");
castSpell(1, PhaseStep.DECLARE_ATTACKERS, playerA, "Become Immense");
addTarget(playerA, "Inkmoth Nexus");
setStopAt(1, PhaseStep.END_COMBAT);
execute();
assertTapped("Inkmoth Nexus", true);
assertGraveyardCount(playerA, "Become Immense", 1);
assertCounterCount(playerB, CounterType.POISON, 7);
}
@Test
public void testInkmothPumpedByBecomeImmense2() {
addCard(Zone.BATTLEFIELD, playerA, "Forest", 7);
// {1}: Inkmoth Nexus becomes a 1/1 Blinkmoth artifact creature with flying and infect until end of turn. It's still a land.
// (It deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.)
addCard(Zone.BATTLEFIELD, playerA, "Inkmoth Nexus");
// Become Immense - {5}{G} - Instant
// Delve (Each card you exile from your graveyard while casting this spell pays for 1.)
// Target creature gets +6/+6 until end of turn.
addCard(Zone.HAND, playerA, "Become Immense", 1);
addCard(Zone.HAND, playerA, "Mutagenic Growth", 1); // {G} instant +2+2
addCard(Zone.HAND, playerA, "Might of Old Krosa", 1); // {G} instant +2+2
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}: {this} becomes");
attack(1, playerA, "Inkmoth Nexus");
castSpell(1, PhaseStep.DECLARE_ATTACKERS, playerA, "Mutagenic Growth");
addTarget(playerA, "Inkmoth Nexus");
castSpell(1, PhaseStep.DECLARE_ATTACKERS, playerA, "Might of Old Krosa");
addTarget(playerA, "Inkmoth Nexus");
// +5 poison
activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}: {this} becomes");
attack(3, playerA, "Inkmoth Nexus");
castSpell(3, PhaseStep.DECLARE_ATTACKERS, playerA, "Become Immense");
addTarget(playerA, "Inkmoth Nexus");
// +7 poison
setStopAt(3, PhaseStep.END_COMBAT);
execute();
assertTapped("Inkmoth Nexus", true);
assertGraveyardCount(playerA, "Become Immense", 1);
assertGraveyardCount(playerA, "Mutagenic Growth", 1);
assertGraveyardCount(playerA, "Might of Old Krosa", 1);
assertCounterCount(playerB, CounterType.POISON, 12);
}
/**
* Phyrexian Obliterator is enchanted with Corrupted Conscience and Enslave
*
* on upkeep Phyrexian Obliterator does 1 damage to its owner but this
* damage was NOT infect damage and it should have been
*/
@Test
public void GainedInfectByEnchantment() {
// Trample
// Whenever a source deals damage to Phyrexian Obliterator, that source's controller sacrifices that many permanents.
addCard(Zone.BATTLEFIELD, playerB, "Phyrexian Obliterator");
// Enchant creature
// You control enchanted creature.
// Enchanted creature has infect. (It deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.)
addCard(Zone.HAND, playerA, "Corrupted Conscience"); // Enchantment {3}{U}{U}
// Enchant creature
// You control enchanted creature.
// At the beginning of your upkeep, enchanted creature deals 1 damage to its owner.
addCard(Zone.HAND, playerA, "Enslave"); // Enchantment {4}{B}{B}
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 9);
addCard(Zone.BATTLEFIELD, playerA, "Island", 2);
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Corrupted Conscience", "Phyrexian Obliterator");
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Enslave", "Phyrexian Obliterator");
setStopAt(3, PhaseStep.POSTCOMBAT_MAIN);
execute();
assertPermanentCount(playerA, "Phyrexian Obliterator", 1);
assertPermanentCount(playerA, "Corrupted Conscience", 1);
assertPermanentCount(playerA, "Enslave", 1);
assertAbility(playerA, "Phyrexian Obliterator", InfectAbility.getInstance(), true);
assertLife(playerA, 20);
assertLife(playerB, 20);
assertCounterCount(playerB, CounterType.POISON, 1);
}
}