From 20865c4c3e9245533410b01fbcd290dc1801b846 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Sun, 31 Mar 2024 14:33:36 -0400 Subject: [PATCH] [OTJ] add test for saddled this turn --- .../cards/abilities/keywords/SaddleTest.java | 66 +++++++++++++++++++ .../SaddledSourceThisTurnPredicate.java | 2 + .../watchers/common/SaddledMountWatcher.java | 1 + 3 files changed, 69 insertions(+) diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/SaddleTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/SaddleTest.java index e251ed7ca6e..855082b3938 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/SaddleTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/SaddleTest.java @@ -47,6 +47,7 @@ public class SaddleTest extends CardTestPlayerBase { setChoice(playerA, bear); activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Saddle"); + attack(1, playerA, charger, playerB); setStrictChooseMode(true); @@ -64,4 +65,69 @@ public class SaddleTest extends CardTestPlayerBase { assertSaddled(charger, false); } + + private static final String possum = "Rambling Possum"; + private static final String lion = "Silvercoat Lion"; + + @Test + public void testSaddledThisTurn() { + addCard(Zone.BATTLEFIELD, playerA, possum); + addCard(Zone.BATTLEFIELD, playerA, bear); + addCard(Zone.BATTLEFIELD, playerA, lion); + + setChoice(playerA, bear); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Saddle"); + + setStrictChooseMode(true); + setStopAt(1, PhaseStep.PRECOMBAT_MAIN); + execute(); + + attack(1, playerA, possum, playerB); + setChoice(playerA, bear); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertPermanentCount(playerA, bear, 0); + assertHandCount(playerA, bear, 1); + assertTapped(lion, false); + assertTapped(possum, true); + assertSaddled(possum, true); + assertLife(playerB, 20 - 3 - 1); + } + + @Test + public void testSaddledThisTurnFail() { + addCard(Zone.BATTLEFIELD, playerA, possum); + addCard(Zone.BATTLEFIELD, playerA, bear); + addCard(Zone.BATTLEFIELD, playerA, lion); + + setChoice(playerA, bear); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Saddle"); + + setStrictChooseMode(true); + setStopAt(1, PhaseStep.PRECOMBAT_MAIN); + execute(); + + attack(1, playerA, possum, playerB); + setChoice(playerA, lion); + + setStopAt(1, PhaseStep.END_TURN); + try { + execute(); + } catch (AssertionError e) { + Assert.assertEquals( + "Lion can't be targeted", + "Missing CHOICE def for turn 1, step DECLARE_ATTACKERS, PlayerA\n" + + "Object: PermanentCard: Rambling Possum;\n" + + "Target: TargetPermanent: Select creatures that saddled it this turn (selected 0)", + e.getMessage() + ); + } + + assertTapped(bear, true); + assertTapped(lion, false); + assertTapped(possum, true); + assertSaddled(possum, true); + } } diff --git a/Mage/src/main/java/mage/filter/predicate/permanent/SaddledSourceThisTurnPredicate.java b/Mage/src/main/java/mage/filter/predicate/permanent/SaddledSourceThisTurnPredicate.java index ba5121621c4..497a70dd568 100644 --- a/Mage/src/main/java/mage/filter/predicate/permanent/SaddledSourceThisTurnPredicate.java +++ b/Mage/src/main/java/mage/filter/predicate/permanent/SaddledSourceThisTurnPredicate.java @@ -7,6 +7,8 @@ import mage.game.permanent.Permanent; import mage.watchers.common.SaddledMountWatcher; /** + * requires SaddledMountWatcher + * * @author TheElk801 */ public enum SaddledSourceThisTurnPredicate implements ObjectSourcePlayerPredicate { diff --git a/Mage/src/main/java/mage/watchers/common/SaddledMountWatcher.java b/Mage/src/main/java/mage/watchers/common/SaddledMountWatcher.java index 25fb33825c0..cbc6c0859df 100644 --- a/Mage/src/main/java/mage/watchers/common/SaddledMountWatcher.java +++ b/Mage/src/main/java/mage/watchers/common/SaddledMountWatcher.java @@ -14,6 +14,7 @@ import java.util.*; */ public class SaddledMountWatcher extends Watcher { + // key: the mount, value: set of creatures which saddled private final Map> saddleMap = new HashMap<>(); public SaddledMountWatcher() {