diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/GenericCardTestHelper.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/GenericCardTestHelper.java index a6a4372e9..44866c320 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/GenericCardTestHelper.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/GenericCardTestHelper.java @@ -34,7 +34,20 @@ public class GenericCardTestHelper extends AbstractAtTest { put("site9", "1_360"); }}; + public static final HashMap KingSites = new HashMap() {{ + put("site1", "7_330"); + put("site2", "7_335"); + put("site3", "8_117"); + put("site4", "7_342"); + put("site5", "7_345"); + put("site6", "7_350"); + put("site7", "8_120"); + put("site8", "10_120"); + put("site9", "7_360"); + }}; + public static final String FOTRFrodo = "1_290"; + public static final String GimliRB = "9_4"; public static final String FOTRRing = "1_2"; diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set02/Card_02_075_ErrataTests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set02/Card_02_075_ErrataTests.java new file mode 100644 index 000000000..97bd6497c --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set02/Card_02_075_ErrataTests.java @@ -0,0 +1,176 @@ +package com.gempukku.lotro.cards.unofficial.pc.errata.set02; + +import com.gempukku.lotro.cards.GenericCardTestHelper; +import com.gempukku.lotro.common.*; +import com.gempukku.lotro.filters.Filters; +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.KeywordModifier; +import com.gempukku.lotro.logic.modifiers.StrengthModifier; +import org.junit.Test; + +import java.util.HashMap; + +import static junit.framework.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class Card_02_075_ErrataTests +{ + protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException { + return new GenericCardTestHelper( + new HashMap() + {{ + put("ferny", "52_75"); + put("sam", "1_310"); + + put("nazgul1", "12_161"); + put("nazgul2", "12_161"); + + }}, + GenericCardTestHelper.KingSites, + GenericCardTestHelper.GimliRB, + GenericCardTestHelper.FOTRRing + ); + } + + @Test + public void BillStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { + + /** + * Set: 2E + * Title: Bill Ferny + * Subtitle: Swarthy Sneering Fellow + * Side: Shadow + * Culture: Ringwraith + * Twilight Cost: 2 + * Type: Minion + * Race: Man + * Strength: 4 + * Vitality: 1 + * Site: 2 + * Errata Game Text: Bearer must be a ranger. This weapon may be borne in addition to 1 other hand weapon. + * Skirmish: If bearer is skirmishing a Nazgul, discard this possession to make bearer strength +3 and damage +1. + */ + + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl ferny = scn.GetFreepsCard("ferny"); + + assertTrue(ferny.getBlueprint().isUnique()); + assertEquals(2, ferny.getBlueprint().getTwilightCost()); + assertEquals(CardType.MINION, ferny.getBlueprint().getCardType()); + assertEquals(Culture.WRAITH, ferny.getBlueprint().getCulture()); + assertEquals(Race.MAN, ferny.getBlueprint().getRace()); + assertEquals(4, ferny.getBlueprint().getStrength()); + assertEquals(1, ferny.getBlueprint().getVitality()); + assertEquals(2, ferny.getBlueprint().getSiteNumber()); + } + + @Test + public void NazgulAreNotRoaming() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl ferny = scn.GetShadowCard("ferny"); + PhysicalCardImpl nazgul1 = scn.GetShadowCard("nazgul1"); + PhysicalCardImpl nazgul2 = scn.GetShadowCard("nazgul2"); + + scn.FreepsMoveCardToHand(ferny, nazgul1, nazgul2); + + scn.StartGame(); + + scn.SetTwilight(12); + + scn.FreepsSkipCurrentPhaseAction(); + + //12 manual + 1 companion + 1 site. + assertEquals(14, scn.GetTwilight()); + + scn.ShadowPlayCard(nazgul1); + + //should be -5 for Black Rider, -2 for roaming + assertEquals(7, scn.GetTwilight()); + assertTrue(scn.HasKeyword(nazgul1, Keyword.ROAMING)); + + scn.ShadowPlayCard(ferny); + assertFalse(scn.HasKeyword(nazgul1, Keyword.ROAMING)); + scn.ShadowPlayCard(nazgul2); + + //Should have been exactly enough twilight to play ferny + another black rider, if there are no roaming penalties. + assertEquals(0, scn.GetTwilight()); + + } + + @Test + public void FreepsCannotAssignFernyIfHobbitSpotted() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl ferny = scn.GetShadowCard("ferny"); + PhysicalCardImpl sam = scn.GetFreepsCard("sam"); + PhysicalCardImpl gimli = scn.GetRingBearer(); + + scn.ShadowMoveCharToTable(ferny); + scn.FreepsMoveCharToTable(sam); + + //Make ferny fierce and strength +5 just to make things easier to test + scn.ApplyAdHocModifier(new KeywordModifier(null, Filters.name("Bill Ferny"), Keyword.FIERCE)); + scn.ApplyAdHocModifier(new StrengthModifier(null, Filters.name("Bill Ferny"), 5)); + + scn.StartGame(); + + scn.SkipToPhase(Phase.ASSIGNMENT); + scn.SkipCurrentPhaseActions(); + + Boolean exc = false; + try { + scn.FreepsAssignToMinions(gimli, ferny); + } + catch (DecisionResultInvalidException ex) { + exc = true; + } + assertTrue(exc); // If an exception wasn't thrown, then freeps assigning was permitted even with a hobbit + scn.FreepsSkipCurrentPhaseAction(); + scn.ShadowAssignToMinions(sam, ferny); + + scn.FreepsResolveSkirmish(sam); + scn.SkipCurrentPhaseActions(); + + //artificial fierce skirmish + assertEquals(Zone.DEAD, sam.getZone()); + scn.SkipCurrentPhaseActions(); + + Boolean exc2 = false; + try { + scn.FreepsAssignToMinions(gimli, ferny); + } + catch (DecisionResultInvalidException ex) { + exc2 = true; + } + assertFalse(exc2); // If an exception wasn't thrown, then freeps assigning was permitted with no hobbit to spot + + } + + @Test + public void DiscardFernyIfUnderground() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl ferny = scn.GetShadowCard("ferny"); + + scn.ShadowMoveCharToTable(ferny); + + scn.ApplyAdHocModifier(new KeywordModifier(null, Filters.siteNumber(2), Keyword.UNDERGROUND)); + + scn.StartGame(); + + assertEquals(Zone.SHADOW_CHARACTERS, ferny.getZone()); + + scn.FreepsSkipCurrentPhaseAction(); + + assertEquals(Zone.DISCARD, ferny.getZone()); + } +}