From a3f787b17087e8999758b6d2aa9e1ae056f8b92e Mon Sep 17 00:00:00 2001 From: Susucre <34709007+Susucre@users.noreply.github.com> Date: Mon, 18 Sep 2023 02:18:46 +0200 Subject: [PATCH] test framework: allow direct addEmblem (#11164) --- .../test/cards/emblems/AddEmblemTest.java | 64 +++++++++++++++++++ .../base/impl/CardTestPlayerAPIImpl.java | 13 ++++ 2 files changed, 77 insertions(+) create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/emblems/AddEmblemTest.java diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/emblems/AddEmblemTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/emblems/AddEmblemTest.java new file mode 100644 index 000000000000..cce9772fcb26 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/emblems/AddEmblemTest.java @@ -0,0 +1,64 @@ +package org.mage.test.cards.emblems; + +import mage.abilities.keyword.FlyingAbility; +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.game.command.Emblem; +import mage.game.command.emblems.ChandraTorchOfDefianceEmblem; +import mage.game.command.emblems.ElspethSunsChampionEmblem; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * @author Susucr + */ +public class AddEmblemTest extends CardTestPlayerBase { + + /** + * Emblem + * Creatures you control get +2/+2 and have flying. + */ + private static final Emblem elspethSunChampionEmblem = new ElspethSunsChampionEmblem(); + + /** + * Emblem + * Whenever you cast a spell, this emblem deals 5 damage to any target. + */ + private static final Emblem chandraTorchOfDefianceEmblem = new ChandraTorchOfDefianceEmblem(); + + @Test + public void test_ElpethSunChampionEmblem() { + setStrictChooseMode(true); + + addEmblem(playerA, elspethSunChampionEmblem); + addCard(Zone.BATTLEFIELD, playerA, "Grizzly Bears"); // 2/2 vanilla + + setStopAt(1, PhaseStep.UPKEEP); + execute(); + + assertPowerToughness(playerA, "Grizzly Bears", 2 + 2, 2 + 2); + assertAbility(playerA, "Grizzly Bears", FlyingAbility.getInstance(), true); + assertCommandZoneCount(playerA, elspethSunChampionEmblem.getName(), 1); + } + + @Test + public void test_ChandraTorchOfDefianceEmblem() { + setStrictChooseMode(true); + + addEmblem(playerA, chandraTorchOfDefianceEmblem); + addCard(Zone.HAND, playerA, "Memnite", 2); // 1/1 for {0} vanilla + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Memnite"); + addTarget(playerA, playerB); // emblem trigger + waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN, playerA); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Memnite"); + addTarget(playerA, playerB); // emblem trigger + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Memnite", 2); + assertLife(playerB, 20 - 5 - 5); + assertCommandZoneCount(playerA, chandraTorchOfDefianceEmblem.getName(), 1); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java index a24ee16c3622..a636118d61f1 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java @@ -18,6 +18,7 @@ import mage.filter.predicate.mageobject.NamePredicate; import mage.game.*; import mage.game.command.CommandObject; +import mage.game.command.Emblem; import mage.game.match.MatchOptions; import mage.game.permanent.Permanent; import mage.game.permanent.PermanentCard; @@ -703,6 +704,18 @@ public void addPlane(Player player, Planes plane) { assertTrue("Can't put plane to game: " + plane.getClassName(), SystemUtil.putPlaneToGame(currentGame, player, plane.getClassName())); } + public void addEmblem(Player player, Emblem emblem) { + Emblem newEmblem = emblem.copy(); + newEmblem.setControllerId(player.getId()); + newEmblem.assignNewId(); + newEmblem.getAbilities().newId(); + for (Ability ability : newEmblem.getAbilities()) { + ability.setSourceId(newEmblem.getId()); + } + + currentGame.getState().addCommandObject(newEmblem); + } + /** * Returns card list container for specified game zone and player. *