From a3d987aafa036b143837e6ed1c31b5cb515121b8 Mon Sep 17 00:00:00 2001 From: Christian 'ketura' McCarty Date: Tue, 29 Apr 2025 01:56:09 -0500 Subject: [PATCH] Restored some lost V1 unit tests from errata --- .../pc/vsets/set_v01/Card_V1_019_Tests.java | 142 ++++++++++++++-- .../pc/vsets/set_v01/Card_V1_052_Tests.java | 108 +++++++++++-- .../pc/vsets/set_v01/Card_V1_054_Tests.java | 49 ++++-- .../pc/vsets/set_v01/Card_V1_061_Tests.java | 151 +++++++++++++++--- 4 files changed, 386 insertions(+), 64 deletions(-) diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v01/Card_V1_019_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v01/Card_V1_019_Tests.java index b834db3e4..31c3e3583 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v01/Card_V1_019_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v01/Card_V1_019_Tests.java @@ -8,18 +8,23 @@ import org.junit.Test; import java.util.HashMap; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; public class Card_V1_019_Tests { protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException { return new GenericCardTestHelper( - new HashMap<>() - {{ - put("card", "101_19"); - // put other cards in here as needed for the test case + new HashMap<>() {{ + put("aragorn", "101_19"); + put("arwen", "1_30"); + put("elrond", "1_40"); + put("galadriel", "1_45"); + put("celeborn", "1_34"); + put("orophin", "1_56"); + put("defiance", "1_37"); + + put("runner", "1_178"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -49,7 +54,7 @@ public class Card_V1_019_Tests var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); + var card = scn.GetFreepsCard("aragorn"); assertEquals("Aragorn", card.getBlueprint().getTitle()); assertEquals("Estel", card.getBlueprint().getSubtitle()); @@ -65,18 +70,127 @@ public class Card_V1_019_Tests assertEquals(Signet.GANDALF, card.getBlueprint().getSignet()); } - // Uncomment any @Test markers below once this is ready to be used - //@Test - public void AragornTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void EstelDoesNotPlayElfIfPlayedInStartingFellowship() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + var aragorn = scn.GetFreepsCard("aragorn"); + + //scn.StartGame(); + assertTrue(scn.FreepsDecisionAvailable("Starting fellowship")); + scn.FreepsChooseCard(aragorn); + assertFalse(scn.FreepsHasOptionalTriggerAvailable()); + } + + @Test + public void EstelOnPlayTutorsAnElfOfCost2OrLess() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var aragorn = scn.GetFreepsCard("aragorn"); + var arwen = scn.GetFreepsCard("arwen"); + var elrond = scn.GetFreepsCard("elrond"); + var galadriel = scn.GetFreepsCard("galadriel"); + var celeborn = scn.GetFreepsCard("celeborn"); + var orophin = scn.GetFreepsCard("orophin"); + scn.FreepsMoveCardToHand(aragorn); scn.StartGame(); - scn.FreepsPlayCard(card); - assertEquals(4, scn.GetTwilight()); + scn.FreepsPlayCard(aragorn); + assertTrue(scn.FreepsHasOptionalTriggerAvailable()); + scn.FreepsAcceptOptionalTrigger(); + scn.FreepsDismissRevealedCards(); + + //Orophin, Celeborn, or Arwen, but not Elrond (4) or Galadriel (3) + assertTrue(scn.FreepsHasCardChoicesAvailable(orophin, celeborn, arwen)); + assertFalse(scn.FreepsHasCardChoicesAvailable(elrond, galadriel)); + assertEquals(3, scn.FreepsGetCardChoiceCount()); + assertEquals(Zone.DECK, orophin.getZone()); + assertEquals(0, scn.GetFreepsHandCount()); + assertEquals(7, scn.GetFreepsDeckCount()); + + scn.FreepsChooseCardBPFromSelection(orophin); + assertEquals(Zone.SUPPORT, orophin.getZone()); + } + + @Test + public void SkirmishAbilityCanDiscardsElvenCardToPumpAragorn() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var aragorn = scn.GetFreepsCard("aragorn"); + var defiance = scn.GetFreepsCard("defiance"); + var arwen = scn.GetFreepsCard("arwen"); + + scn.FreepsMoveCharToTable(aragorn); + scn.FreepsMoveCardToHand(defiance, arwen); + + var runner = scn.GetShadowCard("runner"); + + scn.ShadowMoveCharToTable(runner); + + scn.StartGame(); + + scn.SkipToAssignments(); + scn.FreepsAssignAndResolve(aragorn, runner); + + assertTrue(scn.FreepsActionAvailable(aragorn)); + assertEquals(Zone.HAND, defiance.getZone()); + assertEquals(Zone.HAND, arwen.getZone()); + assertEquals(8, scn.GetStrength(aragorn)); + + scn.FreepsUseCardAction(aragorn); + assertTrue(scn.FreepsDecisionAvailable("Choose cards from hand to discard")); + assertTrue(scn.FreepsHasCardChoicesAvailable(arwen, defiance)); + scn.FreepsChooseCard(defiance); + + assertEquals(Zone.DISCARD, defiance.getZone()); + assertEquals(Zone.HAND, arwen.getZone()); + + scn.FreepsChoose("strength"); + assertEquals(10, scn.GetStrength(aragorn)); + + } + + @Test + public void SkirmishAbilityCanDiscardsElvenCardToAddDamage() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var aragorn = scn.GetFreepsCard("aragorn"); + var defiance = scn.GetFreepsCard("defiance"); + var arwen = scn.GetFreepsCard("arwen"); + + scn.FreepsMoveCharToTable(aragorn); + scn.FreepsMoveCardToHand(defiance, arwen); + + var runner = scn.GetShadowCard("runner"); + + scn.ShadowMoveCharToTable(runner); + + scn.StartGame(); + + scn.SkipToAssignments(); + scn.FreepsAssignAndResolve(aragorn, runner); + + assertTrue(scn.FreepsActionAvailable(aragorn)); + assertEquals(Zone.HAND, defiance.getZone()); + assertEquals(Zone.HAND, arwen.getZone()); + assertFalse(scn.hasKeyword(aragorn, Keyword.DAMAGE)); + + scn.FreepsUseCardAction(aragorn); + assertTrue(scn.FreepsDecisionAvailable("Choose cards from hand to discard")); + assertTrue(scn.FreepsHasCardChoicesAvailable(arwen, defiance)); + scn.FreepsChooseCard(defiance); + + assertEquals(Zone.DISCARD, defiance.getZone()); + assertEquals(Zone.HAND, arwen.getZone()); + + scn.FreepsChoose("damage"); + assertTrue(scn.hasKeyword(aragorn, Keyword.DAMAGE)); + assertEquals(1, scn.GetKeywordCount(aragorn, Keyword.DAMAGE)); + } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v01/Card_V1_052_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v01/Card_V1_052_Tests.java index da4dcc46b..67e0015b5 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v01/Card_V1_052_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v01/Card_V1_052_Tests.java @@ -3,23 +3,22 @@ package com.gempukku.lotro.cards.unofficial.pc.vsets.set_v01; import com.gempukku.lotro.cards.GenericCardTestHelper; import com.gempukku.lotro.common.*; import com.gempukku.lotro.game.CardNotFoundException; -import com.gempukku.lotro.game.PhysicalCardImpl; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; import org.junit.Test; import java.util.HashMap; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; public class Card_V1_052_Tests { protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException { return new GenericCardTestHelper( - new HashMap<>() - {{ - put("card", "101_52"); - // put other cards in here as needed for the test case + new HashMap<>() {{ + put("merry", "101_52"); + put("shelob", "8_26"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -48,7 +47,7 @@ public class Card_V1_052_Tests var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); + var card = scn.GetFreepsCard("merry"); assertEquals("Merry", card.getBlueprint().getTitle()); assertEquals("Of Buckland", card.getBlueprint().getSubtitle()); @@ -64,18 +63,99 @@ public class Card_V1_052_Tests assertEquals(Signet.FRODO, card.getBlueprint().getSignet()); } - // Uncomment any @Test markers below once this is ready to be used - //@Test - public void MerryTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void MerryExertsTwiceToPreventMinionSkirmishing() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + var merry = scn.GetFreepsCard("merry"); + scn.FreepsMoveCharToTable(merry); + + var shelob = scn.GetShadowCard("shelob"); + scn.ShadowMoveCharToTable(shelob); scn.StartGame(); - scn.FreepsPlayCard(card); - assertEquals(1, scn.GetTwilight()); + scn.SkipToPhase(Phase.ASSIGNMENT); + assertEquals(0, scn.GetWoundsOn(merry)); + assertEquals(0, scn.GetWoundsOn(shelob)); + assertTrue(scn.FreepsActionAvailable(merry)); + + scn.FreepsUseCardAction(merry); + assertEquals(2, scn.GetWoundsOn(merry)); + scn.ShadowChooseNo(); + scn.ShadowPassCurrentPhaseAction(); + scn.FreepsPassCurrentPhaseAction(); + //immediately skips to the fierce skirmish + scn.PassCurrentPhaseActions(); + + assertEquals(Phase.REGROUP, scn.GetCurrentPhase()); } + + @Test + public void MinionCanExhaustToPreventAbility() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var merry = scn.GetFreepsCard("merry"); + scn.FreepsMoveCharToTable(merry); + + var shelob = scn.GetShadowCard("shelob"); + scn.ShadowMoveCharToTable(shelob); + + scn.StartGame(); + + scn.SkipToPhase(Phase.ASSIGNMENT); + assertEquals(0, scn.GetWoundsOn(merry)); + assertEquals(0, scn.GetWoundsOn(shelob)); + assertTrue(scn.FreepsActionAvailable(merry)); + + scn.FreepsUseCardAction(merry); + assertEquals(2, scn.GetWoundsOn(merry)); + assertTrue(scn.ShadowDecisionAvailable("Would you like to exhaust")); + + scn.ShadowChooseYes(); + assertEquals(7, scn.GetWoundsOn(shelob)); + + scn.ShadowPassCurrentPhaseAction(); + scn.FreepsPassCurrentPhaseAction(); + + assertTrue(scn.FreepsDecisionAvailable("Assign minions")); + } + +// @Test +// public void ExhaustedMinionCannotExertToPreventAbility() throws DecisionResultInvalidException, CardNotFoundException { +// //Pre-game setup +// var scn = GetScenario(); +// +// var merry = scn.GetFreepsCard("merry"); +// scn.FreepsMoveCharToTable(merry); +// +// var shelob = scn.GetShadowCard("shelob"); +// scn.ShadowMoveCharToTable(shelob); +// +// scn.StartGame(); +// +// scn.SkipToPhase(Phase.ASSIGNMENT); +// assertEquals(0, scn.GetWoundsOn(merry)); +// assertEquals(0, scn.GetWoundsOn(shelob)); +// assertTrue(scn.FreepsActionAvailable(merry)); +// +// scn.FreepsUseCardAction(merry); +// assertEquals(2, scn.GetWoundsOn(merry)); +// assertTrue(scn.ShadowDecisionAvailable("Would you like to exhaust")); +// +// scn.ShadowChooseYes(); +// assertEquals(7, scn.GetWoundsOn(shelob)); +// +// scn.PassAssignmentActions(); +// //Cheating to do it again during fierce +// scn.RemoveWoundsFromChar(merry, 2); +// +// assertTrue(scn.FreepsDecisionAvailable("Assign minions")); +// scn.FreepsDeclineAssignments(); +// scn.ShadowDeclineAssignments(); +// +// assertEquals(Phase.ASSIGNMENT, scn.GetCurrentPhase()); +// } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v01/Card_V1_054_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v01/Card_V1_054_Tests.java index df4867bf9..319a5ef6d 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v01/Card_V1_054_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v01/Card_V1_054_Tests.java @@ -3,23 +3,24 @@ package com.gempukku.lotro.cards.unofficial.pc.vsets.set_v01; import com.gempukku.lotro.cards.GenericCardTestHelper; import com.gempukku.lotro.common.*; import com.gempukku.lotro.game.CardNotFoundException; -import com.gempukku.lotro.game.PhysicalCardImpl; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; import org.junit.Test; import java.util.HashMap; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; public class Card_V1_054_Tests { protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException { return new GenericCardTestHelper( - new HashMap<>() - {{ - put("card", "101_54"); - // put other cards in here as needed for the test case + new HashMap<>() {{ + put("sam", "101_54"); + put("boromir", "1_97"); + + put("runner", "1_178"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -49,7 +50,7 @@ public class Card_V1_054_Tests var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); + var card = scn.GetFreepsCard("sam"); assertEquals("Sam", card.getBlueprint().getTitle()); assertEquals("Of Bagshot Row", card.getBlueprint().getSubtitle()); @@ -65,18 +66,38 @@ public class Card_V1_054_Tests assertEquals(Signet.FRODO, card.getBlueprint().getSignet()); } - // Uncomment any @Test markers below once this is ready to be used - //@Test - public void SamTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void EachTimeFrodoSignetWinsSkirmishTheyHeal() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + var sam = scn.GetFreepsCard("sam"); + var boromir = scn.GetFreepsCard("boromir"); + scn.FreepsMoveCharToTable(sam, boromir); + + var runner = scn.GetShadowCard("runner"); + scn.ShadowMoveCharToTable(runner); scn.StartGame(); - scn.FreepsPlayCard(card); - assertEquals(2, scn.GetTwilight()); + scn.AddWoundsToChar(boromir, 1); + + scn.SkipToPhase(Phase.ASSIGNMENT); + scn.PassCurrentPhaseActions(); + scn.FreepsAssignToMinions(boromir, runner); + scn.FreepsResolveSkirmish(boromir); + + assertEquals(1, scn.GetWoundsOn(boromir)); + assertEquals(0, scn.GetWoundsOn(sam)); + assertEquals(1, scn.GetBurdens()); //1 from the bidding + + scn.PassCurrentPhaseActions(); + assertTrue(scn.FreepsHasOptionalTriggerAvailable()); + scn.FreepsAcceptOptionalTrigger(); + + assertEquals(0, scn.GetWoundsOn(boromir)); + assertEquals(0, scn.GetWoundsOn(sam)); + assertEquals(1, scn.GetBurdens()); } + } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v01/Card_V1_061_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v01/Card_V1_061_Tests.java index 9db26bf64..e736c98fd 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v01/Card_V1_061_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v01/Card_V1_061_Tests.java @@ -1,10 +1,12 @@ package com.gempukku.lotro.cards.unofficial.pc.vsets.set_v01; import com.gempukku.lotro.cards.GenericCardTestHelper; -import com.gempukku.lotro.common.*; +import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.Keyword; +import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.game.CardNotFoundException; -import com.gempukku.lotro.game.PhysicalCardImpl; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; +import com.gempukku.lotro.logic.modifiers.MoveLimitModifier; import org.junit.Test; import java.util.HashMap; @@ -16,12 +18,26 @@ public class Card_V1_061_Tests protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException { return new GenericCardTestHelper( - new HashMap<>() - {{ - put("card", "101_61"); - // put other cards in here as needed for the test case + new HashMap<>() {{ + put("aragorn", "1_89"); + put("orophin", "1_56"); + put("uruviel", "1_67"); + put("pathfinder", "1_110"); + + put("runner", "1_178"); + + }}, + new HashMap<>() {{ + put("site1", "1_319"); + put("site2", "1_327"); + put("site3", "1_337"); + put("site4", "1_343"); + put("site5", "1_349"); + put("site6", "101_61"); + put("site7", "3_118"); //NOT Anduin Confluence! lol + put("site8", "1_356"); + put("site9", "1_360"); }}, - GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, GenericCardTestHelper.RulingRing ); @@ -34,20 +50,17 @@ public class Card_V1_061_Tests * Set: V1 * Name: Lorien Throne Room * Unique: False - * Side: - * Culture: + * Side: + * Culture: * Shadow Number: 3 * Type: Sanctuary - * Subtype: + * Subtype: * Site Number: 6 * Game Text: Forest. Sanctuary. Each time a companion exerts here, you may exert an [elven] ally to heal that companion (limit once per phase). - */ + */ var scn = GetScenario(); - - //Use this once you have set the deck up properly - //var card = scn.GetFreepsSite(6); - var card = scn.GetFreepsCard("card"); + var card = scn.GetFreepsSite(6); assertEquals("Lorien Throne Room", card.getBlueprint().getTitle()); assertNull(card.getBlueprint().getSubtitle()); @@ -59,18 +72,112 @@ public class Card_V1_061_Tests assertEquals(6, card.getBlueprint().getSiteNumber()); } - // Uncomment any @Test markers below once this is ready to be used - //@Test - public void LorienThroneRoomTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void WhenCompanionsExertAnElvenAllyMayExertToHealThatCompanion() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + var aragorn = scn.GetFreepsCard("aragorn"); + var orophin = scn.GetFreepsCard("orophin"); + scn.FreepsMoveCharToTable(aragorn, orophin); + + var runner = scn.GetShadowCard("runner"); + scn.ShadowMoveCardToHand(runner); + + //Max out the move limit so we don't have to juggle play back and forth + scn.ApplyAdHocModifier(new MoveLimitModifier(null, 10)); scn.StartGame(); - scn.FreepsPlayCard(card); - assertEquals(3, scn.GetTwilight()); + scn.SkipToSite(5); + + scn.ShadowMoveCharToTable(runner); + scn.FreepsPassCurrentPhaseAction(); + + assertEquals(6, scn.GetCurrentSiteNumber()); + assertEquals(scn.GetShadowSite(6), scn.GetCurrentSite()); + + scn.SkipToPhase(Phase.MANEUVER); + assertEquals(0, scn.GetWoundsOn(aragorn)); + scn.FreepsUseCardAction(aragorn); + assertEquals(1, scn.GetWoundsOn(aragorn)); + assertTrue(scn.FreepsHasOptionalTriggerAvailable()); + assertEquals(0, scn.GetWoundsOn(orophin)); + scn.FreepsAcceptOptionalTrigger(); + assertEquals(1, scn.GetWoundsOn(orophin)); + assertEquals(0, scn.GetWoundsOn(aragorn)); + + //Limit once per phase + scn.ShadowPassCurrentPhaseAction(); + assertEquals(0, scn.GetWoundsOn(aragorn)); + scn.FreepsUseCardAction(aragorn); + assertEquals(1, scn.GetWoundsOn(aragorn)); + assertFalse(scn.FreepsHasOptionalTriggerAvailable()); + } + + @Test + public void UruvielDoesNotCopyLorienThroneRoom() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var aragorn = scn.GetFreepsCard("aragorn"); + var uruviel = scn.GetFreepsCard("uruviel"); + var pathfinder = scn.GetFreepsCard("pathfinder"); + scn.FreepsMoveCharToTable(aragorn, uruviel); + scn.FreepsMoveCardToHand(pathfinder); + + var runner = scn.GetShadowCard("runner"); + scn.ShadowMoveCardToHand(runner); + + //Max out the move limit so we don't have to juggle play back and forth + scn.ApplyAdHocModifier(new MoveLimitModifier(null, 10)); + + scn.StartGame(); + + // 1 -> 3 + scn.SkipToPhase(Phase.REGROUP); + scn.PassCurrentPhaseActions(); + scn.ShadowDeclineReconciliation(); + scn.FreepsChooseToMove(); + + // 3 -> 4 + scn.SkipToPhase(Phase.REGROUP); + scn.PassCurrentPhaseActions(); + scn.ShadowDeclineReconciliation(); + scn.FreepsChooseToMove(); + + // 4 -> 5 + scn.SkipToPhase(Phase.REGROUP); + scn.PassCurrentPhaseActions(); + scn.ShadowDeclineReconciliation(); + scn.FreepsChooseToMove(); + + // 5 -> 6 + scn.SkipToPhase(Phase.REGROUP); + assertEquals(5, (long)scn.GetCurrentSite().getSiteNumber()); + scn.FreepsPlayCard(pathfinder); //ensure that it counts as "ours" + scn.ShadowPassCurrentPhaseAction(); + scn.FreepsPassCurrentPhaseAction(); + scn.ShadowDeclineReconciliation(); + scn.FreepsChooseToMove(); + assertEquals("Lorien Throne Room", scn.GetCurrentSite().getBlueprint().getTitle()); + + // 6 -> 7 + scn.SkipToPhase(Phase.REGROUP); + scn.PassCurrentPhaseActions(); + scn.ShadowDeclineReconciliation(); + scn.FreepsChooseToMove(); + assertEquals(7, (long)scn.GetCurrentSite().getSiteNumber()); + + scn.ShadowMoveCharToTable(runner); + + assertEquals(GenericCardTestHelper.P1, scn.GetFreepsSite(6).getOwner()); + assertEquals(7, scn.GetCurrentSite().getSiteNumber().intValue()); + + scn.SkipToPhase(Phase.MANEUVER); + assertEquals(0, scn.GetWoundsOn(aragorn)); + scn.FreepsUseCardAction(aragorn); + assertEquals(1, scn.GetWoundsOn(aragorn)); + assertFalse(scn.FreepsHasOptionalTriggerAvailable()); } }