From fdd65370917d92c0138207b61d3944006a497edd Mon Sep 17 00:00:00 2001 From: Devon Henegar Date: Mon, 29 Apr 2024 20:24:50 -0400 Subject: [PATCH] Add v2 Dunadan of Ithilien JSON and tests --- .../pc/setV02/setv02-Gondor-playtest.hjson | 34 +++- .../pc/vsets/set_v02/Card_V2_019_Tests.java | 166 +++++++++++++++++- 2 files changed, 185 insertions(+), 15 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/setV02/setv02-Gondor-playtest.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/setV02/setv02-Gondor-playtest.hjson index 2f38c36e6..202ee7d70 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/setV02/setv02-Gondor-playtest.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/setV02/setv02-Gondor-playtest.hjson @@ -262,17 +262,37 @@ signet: Frodo resistance: 6 keywords: Ranger - /*requires: { - + requires: { + type: canSpot + filter: ranger } effects: [ { - + type: activated + phase: skirmish + cost: { + type: discardFromHand + count: 1 + filter: choose(culture(gondor)) + forced: false + } + effect: { + type: wound + filter: choose(minion,inSkirmishAgainst(self),roaming) + memorize: chosenMinion + times: { + type: requires + requires: { + type: memoryMatches + memory: chosenMinion + filter: man + } + true: 2 + false: 1 + } + } } - { - - } - ]*/ + ] gametext: Ranger. To play, spot a ranger.
Skirmish: Discard a [Gondor] card from hand to wound a roaming minion skirmishing this companion. If that minion is a Man, wound it again. lore: "All had swords at their sides, and were clad in green and brown of varied hues, as if the better to walk unseen in the glades of Ithilien." promotext: "" diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v02/Card_V2_019_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v02/Card_V2_019_Tests.java index aa126ce18..0dd856b57 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v02/Card_V2_019_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v02/Card_V2_019_Tests.java @@ -19,6 +19,11 @@ public class Card_V2_019_Tests new HashMap<>() {{ put("card", "102_19"); + put("rangerComp", "1_96"); + put("gondorCardToChuck", "1_113"); + put("threeVitMan", "4_154"); + put("threeVitNonMan", "3_62"); + put("nonRoamingMinion", "1_233"); // put other cards in here as needed for the test case }}, GenericCardTestHelper.FellowshipSites, @@ -64,18 +69,163 @@ public class Card_V2_019_Tests assertEquals(Signet.FRODO, card.getBlueprint().getSignet()); } - // Uncomment any @Test markers below once this is ready to be used - //@Test - public void DunadanofIthilienTest1() throws DecisionResultInvalidException, CardNotFoundException { - //Pre-game setup - var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + @Test + public void dumpsAGondorCardToWoundRoamingNonManMinionSkirmishingHimOnce() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl card = scn.GetFreepsCard("card"); + PhysicalCardImpl rangerComp = scn.GetFreepsCard("rangerComp"); + PhysicalCardImpl gondorCardToChuck = scn.GetFreepsCard("gondorCardToChuck"); + PhysicalCardImpl threeVitNonMan = scn.GetShadowCard("threeVitNonMan"); + + scn.FreepsMoveCardToHand(card, rangerComp, gondorCardToChuck); + scn.ShadowMoveCardToHand(threeVitNonMan); scn.StartGame(); + scn.FreepsPlayCard(rangerComp); scn.FreepsPlayCard(card); - assertEquals(3, scn.GetTwilight()); + assertEquals(6, scn.GetTwilight()); + + scn.SkipToPhase(Phase.SHADOW); + + scn.ShadowPlayCard(threeVitNonMan); + + scn.SkipToPhase(Phase.ASSIGNMENT); + + scn.PassCurrentPhaseActions(); + scn.FreepsAssignToMinions(card, threeVitNonMan); + scn.FreepsResolveSkirmish(card); + + assertTrue(scn.FreepsActionAvailable(card)); + assertEquals(0, scn.GetWoundsOn(threeVitNonMan)); + assertEquals(1, scn.GetFreepsHandCount()); + + scn.FreepsUseCardAction(card); + + assertEquals(1, scn.GetWoundsOn(threeVitNonMan)); + assertEquals(0, scn.GetFreepsHandCount()); + } + + + @Test + public void dumpsAGondorCardToWoundRoamingManMinionSkirmishingHimTwice() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl card = scn.GetFreepsCard("card"); + PhysicalCardImpl rangerComp = scn.GetFreepsCard("rangerComp"); + PhysicalCardImpl gondorCardToChuck = scn.GetFreepsCard("gondorCardToChuck"); + PhysicalCardImpl threeVitMan = scn.GetShadowCard("threeVitMan"); + + scn.FreepsMoveCardToHand(card, rangerComp, gondorCardToChuck); + scn.ShadowMoveCardToHand(threeVitMan); + + scn.StartGame(); + scn.FreepsPlayCard(rangerComp); + scn.FreepsPlayCard(card); + + assertEquals(6, scn.GetTwilight()); + + scn.SkipToPhase(Phase.SHADOW); + + scn.ShadowPlayCard(threeVitMan); + + scn.SkipToPhase(Phase.ASSIGNMENT); + + scn.PassCurrentPhaseActions(); + scn.FreepsAssignToMinions(card, threeVitMan); + scn.FreepsResolveSkirmish(card); + + assertTrue(scn.FreepsActionAvailable(card)); + assertEquals(0, scn.GetWoundsOn(threeVitMan)); + assertEquals(1, scn.GetFreepsHandCount()); + + scn.FreepsUseCardAction(card); + + assertEquals(2, scn.GetWoundsOn(threeVitMan)); + assertEquals(0, scn.GetFreepsHandCount()); + } + + + @Test + public void dumpsAGondorCardForNoEffectAgainstNonRoamingMinion() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl card = scn.GetFreepsCard("card"); + PhysicalCardImpl rangerComp = scn.GetFreepsCard("rangerComp"); + PhysicalCardImpl gondorCardToChuck = scn.GetFreepsCard("gondorCardToChuck"); + PhysicalCardImpl nonRoamingMinion = scn.GetShadowCard("nonRoamingMinion"); + + scn.FreepsMoveCardToHand(card, rangerComp, gondorCardToChuck); + scn.ShadowMoveCardToHand(nonRoamingMinion); + + scn.StartGame(); + scn.FreepsPlayCard(rangerComp); + scn.FreepsPlayCard(card); + + assertEquals(6, scn.GetTwilight()); + + scn.SkipToPhase(Phase.SHADOW); + + scn.ShadowPlayCard(nonRoamingMinion); + + scn.SkipToPhase(Phase.ASSIGNMENT); + + scn.PassCurrentPhaseActions(); + scn.FreepsAssignToMinions(card, nonRoamingMinion); + scn.FreepsResolveSkirmish(card); + + assertTrue(scn.FreepsActionAvailable(card)); + assertEquals(0, scn.GetWoundsOn(nonRoamingMinion)); + assertEquals(1, scn.GetFreepsHandCount()); + + scn.FreepsUseCardAction(card); + + assertEquals(0, scn.GetWoundsOn(nonRoamingMinion)); + assertEquals(0, scn.GetFreepsHandCount()); + } + + + + @Test + public void dumpsAGondorCardForNoEffectWhenRoamingMinionIsSkirmishingOtherCompanion() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl card = scn.GetFreepsCard("card"); + PhysicalCardImpl rangerComp = scn.GetFreepsCard("rangerComp"); + PhysicalCardImpl gondorCardToChuck = scn.GetFreepsCard("gondorCardToChuck"); + PhysicalCardImpl threeVitMan = scn.GetShadowCard("threeVitMan"); + + scn.FreepsMoveCardToHand(card, rangerComp, gondorCardToChuck); + scn.ShadowMoveCardToHand(threeVitMan); + + scn.StartGame(); + scn.FreepsPlayCard(rangerComp); + scn.FreepsPlayCard(card); + + assertEquals(6, scn.GetTwilight()); + + scn.SkipToPhase(Phase.SHADOW); + + scn.ShadowPlayCard(threeVitMan); + + scn.SkipToPhase(Phase.ASSIGNMENT); + + scn.PassCurrentPhaseActions(); + scn.FreepsAssignToMinions(rangerComp, threeVitMan); + scn.FreepsResolveSkirmish(rangerComp); + + assertTrue(scn.FreepsActionAvailable(card)); + assertEquals(0, scn.GetWoundsOn(threeVitMan)); + assertEquals(1, scn.GetFreepsHandCount()); + + scn.FreepsUseCardAction(card); + + assertEquals(0, scn.GetFreepsHandCount()); } }