Restored some lost V1 unit tests from errata

This commit is contained in:
Christian 'ketura' McCarty
2025-04-29 01:56:09 -05:00
parent 28c6ddffbc
commit a3d987aafa
4 changed files with 386 additions and 64 deletions

View File

@@ -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));
}
}

View File

@@ -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());
// }
}

View File

@@ -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());
}
}

View File

@@ -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
);
@@ -41,13 +57,10 @@ public class Card_V1_061_Tests
* 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());
}
}