From bb9dd1600e0f4f08a0091344aa0f8885acd6e339 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 30 Jan 2016 01:14:17 +0100 Subject: [PATCH] Added some tests and minor changes. --- .../src/mage/sets/innistrad/GhostQuarter.java | 4 +- .../mage/sets/khansoftarkir/AbzanCharm.java | 7 +- .../oathofthegatewatch/ZendikarResurgent.java | 6 +- .../sets/timespiral/FlagstonesOfTrokair.java | 8 +- .../test/cards/copy/DeceiverOfFormTest.java | 78 +++++++++++++++++++ .../dies/FlagstonesOfTrokairTest.java | 74 ++++++++++++++++++ 6 files changed, 164 insertions(+), 13 deletions(-) create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/copy/DeceiverOfFormTest.java create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/FlagstonesOfTrokairTest.java diff --git a/Mage.Sets/src/mage/sets/innistrad/GhostQuarter.java b/Mage.Sets/src/mage/sets/innistrad/GhostQuarter.java index 4b9c6107dff..b765642f37f 100644 --- a/Mage.Sets/src/mage/sets/innistrad/GhostQuarter.java +++ b/Mage.Sets/src/mage/sets/innistrad/GhostQuarter.java @@ -58,9 +58,9 @@ public class GhostQuarter extends CardImpl { super(ownerId, 240, "Ghost Quarter", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); this.expansionSetCode = "ISD"; - // {tap}: Add {C} to your mana pool. + // {T}: Add {C} to your mana pool. this.addAbility(new ColorlessManaAbility()); - // {tap}, Sacrifice Ghost Quarter: Destroy target land. Its controller may search his or her library for a basic land card, put it onto the battlefield, then shuffle his or her library. + // {T}, Sacrifice Ghost Quarter: Destroy target land. Its controller may search his or her library for a basic land card, put it onto the battlefield, then shuffle his or her library. SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); ability.addTarget(new TargetLandPermanent()); diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/AbzanCharm.java b/Mage.Sets/src/mage/sets/khansoftarkir/AbzanCharm.java index 23f53bab6bc..eb43747db92 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/AbzanCharm.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/AbzanCharm.java @@ -49,20 +49,19 @@ import mage.target.common.TargetCreaturePermanentAmount; */ public class AbzanCharm extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with power 3 or greater"); + private static final FilterCreaturePermanent FILTER = new FilterCreaturePermanent("creature with power 3 or greater"); static { - filter.add(new PowerPredicate(Filter.ComparisonType.GreaterThan, 2)); + FILTER.add(new PowerPredicate(Filter.ComparisonType.GreaterThan, 2)); } public AbzanCharm(UUID ownerId) { super(ownerId, 161, "Abzan Charm", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{W}{B}{G}"); this.expansionSetCode = "KTK"; - // Choose one - // *Exile target creature with power 3 or greater - this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(FILTER)); this.getSpellAbility().addEffect(new ExileTargetEffect()); // *You draw two cards and you lose 2 life diff --git a/Mage.Sets/src/mage/sets/oathofthegatewatch/ZendikarResurgent.java b/Mage.Sets/src/mage/sets/oathofthegatewatch/ZendikarResurgent.java index 55312a06467..edccc7e3cb9 100644 --- a/Mage.Sets/src/mage/sets/oathofthegatewatch/ZendikarResurgent.java +++ b/Mage.Sets/src/mage/sets/oathofthegatewatch/ZendikarResurgent.java @@ -46,10 +46,10 @@ import mage.filter.predicate.mageobject.CardTypePredicate; */ public class ZendikarResurgent extends CardImpl { - private static final FilterSpell filter = new FilterSpell("a creature spell"); + private static final FilterSpell FILTER = new FilterSpell("a creature spell"); static { - filter.add(new CardTypePredicate(CardType.CREATURE)); + FILTER.add(new CardTypePredicate(CardType.CREATURE)); } public ZendikarResurgent(UUID ownerId) { @@ -65,7 +65,7 @@ public class ZendikarResurgent extends CardImpl { SetTargetPointer.PERMANENT)); // Whenever you cast a creature spell, draw a card. - this.addAbility(new SpellCastControllerTriggeredAbility(new DrawCardSourceControllerEffect(1), filter, false)); + this.addAbility(new SpellCastControllerTriggeredAbility(new DrawCardSourceControllerEffect(1), FILTER, false)); } public ZendikarResurgent(final ZendikarResurgent card) { diff --git a/Mage.Sets/src/mage/sets/timespiral/FlagstonesOfTrokair.java b/Mage.Sets/src/mage/sets/timespiral/FlagstonesOfTrokair.java index 33b5ef80eff..179dcd298ed 100644 --- a/Mage.Sets/src/mage/sets/timespiral/FlagstonesOfTrokair.java +++ b/Mage.Sets/src/mage/sets/timespiral/FlagstonesOfTrokair.java @@ -44,10 +44,10 @@ import mage.target.common.TargetCardInLibrary; */ public class FlagstonesOfTrokair extends CardImpl { - private static final FilterLandCard filter = new FilterLandCard("Plains card"); + private static final FilterLandCard FILTER = new FilterLandCard("Plains card"); static { - filter.add(new SubtypePredicate("Plains")); + FILTER.add(new SubtypePredicate("Plains")); } public FlagstonesOfTrokair(UUID ownerId) { @@ -57,9 +57,9 @@ public class FlagstonesOfTrokair extends CardImpl { // {tap}: Add {W} to your mana pool. this.addAbility(new WhiteManaAbility()); - + // When Flagstones of Trokair is put into a graveyard from the battlefield, you may search your library for a Plains card and put it onto the battlefield tapped. If you do, shuffle your library. - this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), true, true), true)); + this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(FILTER), true, true), true)); } public FlagstonesOfTrokair(final FlagstonesOfTrokair card) { diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/copy/DeceiverOfFormTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/copy/DeceiverOfFormTest.java new file mode 100644 index 00000000000..0102fa66f03 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/copy/DeceiverOfFormTest.java @@ -0,0 +1,78 @@ +/* + * 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.copy; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.filter.Filter; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + * + * + */ +public class DeceiverOfFormTest extends CardTestPlayerBase { + + /** + * When creatures copy the revealed creature, they do not return to their + * original state at the end of turn + * + */ + @Test + public void testCopyEndsEndOfTurn() { + // Vigilance + addCard(Zone.LIBRARY, playerA, "Affa Protector", 1); // 1/4 + // At the beginning of combat on your turn, reveal the top card of your library. + // If a creature card is revealed this way, you may have creatures you control other than Deceiver of Form becomes copies of that card until end of turn. + // You may put that card on the bottom of your library. + addCard(Zone.BATTLEFIELD, playerA, "Deceiver of Form", 1); + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 3); + + attack(1, playerA, "Deceiver of Form"); + attack(1, playerA, "Affa Protector"); + attack(1, playerA, "Affa Protector"); + attack(1, playerA, "Affa Protector"); + + skipInitShuffling(); + + setStopAt(2, PhaseStep.PRECOMBAT_MAIN); + execute(); + + assertPermanentCount(playerA, "Deceiver of Form", 1); + assertPermanentCount(playerA, "Silvercoat Lion", 3); + assertPowerToughness(playerA, "Silvercoat Lion", 2, 2, Filter.ComparisonScope.All); + + assertLife(playerA, 20); // +2 from Robber + assertLife(playerB, 9); + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/FlagstonesOfTrokairTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/FlagstonesOfTrokairTest.java new file mode 100644 index 00000000000..95e20764a57 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/FlagstonesOfTrokairTest.java @@ -0,0 +1,74 @@ +/* + * 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.triggers.dies; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class FlagstonesOfTrokairTest extends CardTestPlayerBase { + + /** + * If a flagstones of trokair enchated with spreading seas that is then + * ghostquartered. Should only fetch 1 land, but instead got 2. + */ + @Test + public void testDontTriggerIfIsland() { + addCard(Zone.BATTLEFIELD, playerA, "Island", 2); + // Enchant land + // When Spreading Seas enters the battlefield, draw a card. + // Enchanted land is an Island. + addCard(Zone.HAND, playerA, "Spreading Seas", 1); // Enchantment Aura - {1}{U} + // {tap}: Add {W} to your mana pool. + // When Flagstones of Trokair is put into a graveyard from the battlefield, you may search your library for a Plains card and put it onto the battlefield tapped. If you do, shuffle your library. + addCard(Zone.BATTLEFIELD, playerA, "Flagstones of Trokair", 1); + addCard(Zone.LIBRARY, playerA, "Plains", 5); + // {T}: Add {C} to your mana pool. + // {T}, Sacrifice Ghost Quarter: Destroy target land. Its controller may search his or her library for a basic land card, put it onto the battlefield, then shuffle his or her library. + addCard(Zone.BATTLEFIELD, playerB, "Ghost Quarter", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Spreading Seas", "Flagstones of Trokair"); + + activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "{T}, Sacrifice", "Flagstones of Trokair"); + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertGraveyardCount(playerB, "Ghost Quarter", 1); + assertGraveyardCount(playerA, "Flagstones of Trokair", 1); + assertGraveyardCount(playerA, "Spreading Seas", 1); + + assertPermanentCount(playerA, 3); + + } + +}