From f564c522a30215bc70a50df991bdfc4425452e12 Mon Sep 17 00:00:00 2001 From: John Gray <16478281+jgray1206@users.noreply.github.com> Date: Sat, 6 Jul 2019 11:27:23 -0400 Subject: [PATCH] added chandras embercat unit tests + fix for issue #5880 --- .../src/mage/cards/c/ChandrasEmbercat.java | 26 +++++- .../test/cards/mana/ChandrasEmbercatTest.java | 93 +++++++++++++++++++ .../PlaneswalkerCastManaCondition.java | 33 +++++++ 3 files changed, 148 insertions(+), 4 deletions(-) create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/mana/ChandrasEmbercatTest.java create mode 100644 Mage/src/main/java/mage/abilities/mana/conditional/PlaneswalkerCastManaCondition.java diff --git a/Mage.Sets/src/mage/cards/c/ChandrasEmbercat.java b/Mage.Sets/src/mage/cards/c/ChandrasEmbercat.java index 91ad8661d2..e5f9e25542 100644 --- a/Mage.Sets/src/mage/cards/c/ChandrasEmbercat.java +++ b/Mage.Sets/src/mage/cards/c/ChandrasEmbercat.java @@ -9,10 +9,12 @@ import mage.abilities.costs.common.TapSourceCost; import mage.abilities.mana.ConditionalColoredManaAbility; import mage.abilities.mana.builder.ConditionalManaBuilder; import mage.abilities.mana.conditional.CreatureCastManaCondition; +import mage.abilities.mana.conditional.PlaneswalkerCastManaCondition; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; +import mage.filter.Filter; import mage.game.Game; import java.util.UUID; @@ -60,7 +62,7 @@ class ChandrasEmbercatManaBuilder extends ConditionalManaBuilder { } } -class ChandrasEmbercatManaCondition extends CreatureCastManaCondition { +class ChandrasEmbercatElementalManaCondition extends CreatureCastManaCondition { @Override public boolean apply(Game game, Ability source) { @@ -71,8 +73,22 @@ class ChandrasEmbercatManaCondition extends CreatureCastManaCondition { if (object == null) { return false; } - return object.hasSubtype(SubType.ELEMENTAL, game) - || (object.hasSubtype(SubType.CHANDRA, game) && object.isPlaneswalker()); + return object.hasSubtype(SubType.ELEMENTAL, game); + } +} + +class ChandrasEmbercatPlaneswalkerManaCondition extends PlaneswalkerCastManaCondition { + + @Override + public boolean apply(Game game, Ability source) { + if (!super.apply(game, source)) { + return false; + } + MageObject object = game.getObject(source.getSourceId()); + if (object == null) { + return false; + } + return object.hasSubtype(SubType.CHANDRA, game); } } @@ -80,6 +96,8 @@ class ChandrasEmbercatConditionalMana extends ConditionalMana { ChandrasEmbercatConditionalMana(Mana mana) { super(mana); - addCondition(new ChandrasEmbercatManaCondition()); + setComparisonScope(Filter.ComparisonScope.Any); + addCondition(new ChandrasEmbercatElementalManaCondition()); + addCondition(new ChandrasEmbercatPlaneswalkerManaCondition()); } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/mana/ChandrasEmbercatTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/mana/ChandrasEmbercatTest.java new file mode 100644 index 0000000000..f702737f64 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/mana/ChandrasEmbercatTest.java @@ -0,0 +1,93 @@ +package org.mage.test.cards.mana; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * Added this test class to test issue #5880. + * https://github.com/magefree/mage/issues/5880 + * + * Chandra's Embercat's effect could not be used on Chandra planeswalkers. + * + * Card Type: Creature — Elemental Cat + * P/T: 2 / 2 + * Description: T: Add R. Spend this mana only to cast an Elemental spell or a Chandra planeswalker spell. + * @author jgray1206 + */ +public class ChandrasEmbercatTest extends CardTestPlayerBase { + + // Make sure we can use the mana to cast elementals + @Test + public void testCanCastElementalWithMana() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 1); + addCard(Zone.BATTLEFIELD, playerA, "Chandra's Embercat", 1); + + //An elemental creature that costs {1}{R} + addCard(Zone.HAND, playerA, "Chandra's Embercat", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Chandra's Embercat"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Chandra's Embercat", 2); + + } + + // Make sure we can use the mana to cast Chandra Planeswalkers + @Test + public void testCanCastChandraPlaneswalkerWithMana() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 3); + addCard(Zone.BATTLEFIELD, playerA, "Chandra's Embercat", 1); + + //A Chandra Planeswalker that costs {3}{R} + addCard(Zone.HAND, playerA, "Chandra, Novice Pyromancer", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Chandra, Novice Pyromancer"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Chandra, Novice Pyromancer", 1); + + } + + // Make sure we cant use the mana to cast non-Chandra Planeswalkers + @Test + public void testCantCastNonChandraPlaneswalkerWithMana() { + addCard(Zone.BATTLEFIELD, playerA, "Island", 3); + addCard(Zone.BATTLEFIELD, playerA, "Chandra's Embercat", 1); + + //A non-Chandra planeswalker that costs {2}{U}{U} + addCard(Zone.HAND, playerA, "Jace, the Mind Sculptor", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Jace, the Mind Sculptor"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Jace, the Mind Sculptor", 0); + + } + + // Make sure we cant use the mana to cast non-Elemental creatures + @Test + public void testCantCastNonElementalCreatureWithMana() { + addCard(Zone.BATTLEFIELD, playerA, "Island", 1); + addCard(Zone.BATTLEFIELD, playerA, "Chandra's Embercat", 1); + + //A non-elemental creature that costs {1}{R} + addCard(Zone.HAND, playerA, "Raptor Hatchling", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Raptor Hatchling"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Raptor Hatchling", 0); + + } + +} diff --git a/Mage/src/main/java/mage/abilities/mana/conditional/PlaneswalkerCastManaCondition.java b/Mage/src/main/java/mage/abilities/mana/conditional/PlaneswalkerCastManaCondition.java new file mode 100644 index 0000000000..25509560e5 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/mana/conditional/PlaneswalkerCastManaCondition.java @@ -0,0 +1,33 @@ + +package mage.abilities.mana.conditional; + +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.SpellAbility; +import mage.abilities.condition.Condition; +import mage.abilities.costs.Cost; +import mage.game.Game; + +import java.util.UUID; + +/** + * @author jgray1206 + */ +public class PlaneswalkerCastManaCondition extends ManaCondition implements Condition { + + @Override + public boolean apply(Game game, Ability source) { + if (source instanceof SpellAbility) { + MageObject object = game.getObject(source.getSourceId()); + if (object != null && object.isPlaneswalker()) { + return true; + } + } + return false; + } + + @Override + public boolean apply(Game game, Ability source, UUID originalId, Cost costToPay) { + return apply(game, source); + } +}