mirror of
https://github.com/correl/mage.git
synced 2024-12-25 11:11:16 +00:00
Merge pull request #5911 from jgray1206/hapatra_fix
add unit test for hapatra vizier of poisons + fix issue #5886
This commit is contained in:
commit
5f61692198
3 changed files with 45 additions and 1 deletions
|
@ -14,6 +14,7 @@ import mage.constants.SubType;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.filter.FilterPermanent;
|
import mage.filter.FilterPermanent;
|
||||||
|
import mage.filter.predicate.mageobject.CardTypePredicate;
|
||||||
import mage.filter.predicate.mageobject.ColorPredicate;
|
import mage.filter.predicate.mageobject.ColorPredicate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -26,6 +27,7 @@ public final class CorrosiveMentor extends CardImpl {
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(new ColorPredicate(ObjectColor.BLACK));
|
filter.add(new ColorPredicate(ObjectColor.BLACK));
|
||||||
|
filter.add(new CardTypePredicate(CardType.CREATURE));
|
||||||
}
|
}
|
||||||
|
|
||||||
public CorrosiveMentor(UUID ownerId, CardSetInfo setInfo) {
|
public CorrosiveMentor(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
|
|
@ -98,4 +98,39 @@ public class HapatraVizierOfPoisonsTest extends CardTestPlayerBase {
|
||||||
assertPermanentCount(playerA, "Snake", 1);
|
assertPermanentCount(playerA, "Snake", 1);
|
||||||
assertAbility(playerA, "Snake", DeathtouchAbility.getInstance(), true);
|
assertAbility(playerA, "Snake", DeathtouchAbility.getInstance(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Testing fix for issue #5886
|
||||||
|
* Tokens with wither/infect that deal damage were not triggering Hapatra's snake creating ability
|
||||||
|
* @author jgray1206
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testTokensWithInfectTriggerHapatra() {
|
||||||
|
String concordantCrossroads = "Concordant Crossroads"; //All creatures have haste
|
||||||
|
String krakenHatchling = "Kraken Hatchling"; //Arbitrary creature to defend
|
||||||
|
String triumphOfTheHordes = "Triumph of the Hordes"; //Creatures you control gain infect
|
||||||
|
String sprout = "Sprout"; //Create a 1/1 Saproling creature token
|
||||||
|
|
||||||
|
addCard(Zone.HAND, playerA, sprout, 1);
|
||||||
|
addCard(Zone.HAND, playerA, triumphOfTheHordes, 1);
|
||||||
|
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, "Forest", 6);
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, hapatra, 1);
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, concordantCrossroads, 1);
|
||||||
|
addCard(Zone.BATTLEFIELD, playerB, krakenHatchling, 1);
|
||||||
|
|
||||||
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, sprout);
|
||||||
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, triumphOfTheHordes);
|
||||||
|
|
||||||
|
attack(1, playerA, "Saproling");
|
||||||
|
block(1, playerB, krakenHatchling, "Saproling");
|
||||||
|
setStopAt(1, PhaseStep.END_COMBAT);
|
||||||
|
setStrictChooseMode(true);
|
||||||
|
execute();
|
||||||
|
|
||||||
|
assertPowerToughness(playerB, krakenHatchling, -2, 2);
|
||||||
|
assertCounterCount(playerB, krakenHatchling, CounterType.M1M1, 2);
|
||||||
|
assertPermanentCount(playerA, "Snake", 1); //Should have triggered when Saproling added -1/-1 counter
|
||||||
|
assertAllCommandsUsed();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import mage.MageObjectReference;
|
||||||
import mage.ObjectColor;
|
import mage.ObjectColor;
|
||||||
import mage.abilities.Abilities;
|
import mage.abilities.Abilities;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.SpellAbility;
|
||||||
import mage.abilities.effects.ContinuousEffect;
|
import mage.abilities.effects.ContinuousEffect;
|
||||||
import mage.abilities.effects.Effect;
|
import mage.abilities.effects.Effect;
|
||||||
import mage.abilities.effects.RestrictionEffect;
|
import mage.abilities.effects.RestrictionEffect;
|
||||||
|
@ -888,7 +889,13 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
|
||||||
}
|
}
|
||||||
for (MarkedDamageInfo mdi : markedDamage) {
|
for (MarkedDamageInfo mdi : markedDamage) {
|
||||||
Ability source = null;
|
Ability source = null;
|
||||||
if (mdi.sourceObject instanceof Permanent) {
|
if (mdi.sourceObject instanceof PermanentToken) {
|
||||||
|
/* Tokens dont have a spellAbility. We must make a phony one as the source so the events in addCounters
|
||||||
|
* can trace the source back to an object/controller.
|
||||||
|
*/
|
||||||
|
source = new SpellAbility(null, ((PermanentToken) mdi.sourceObject).name);
|
||||||
|
source.setSourceId(((PermanentToken) mdi.sourceObject).objectId);
|
||||||
|
} else if (mdi.sourceObject instanceof Permanent) {
|
||||||
source = ((Permanent) mdi.sourceObject).getSpellAbility();
|
source = ((Permanent) mdi.sourceObject).getSpellAbility();
|
||||||
}
|
}
|
||||||
addCounters(mdi.counter, source, game);
|
addCounters(mdi.counter, source, game);
|
||||||
|
|
Loading…
Reference in a new issue