diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_shire_playtest.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_shire_playtest.json index 486ee3b35..d0b6a036a 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_shire_playtest.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_shire_playtest.json @@ -11,24 +11,35 @@ "vitality": 3, "effects": [ { - "type": "trigger", - "optional": true, - "trigger": { - "type": "moves" + "type": "activated", + "phase": "fellowship", + "condition": { + "type": "location", + "filter": "sanctuary" }, "cost": { "type": "exert", - "filter": "self" + "filter": "self", + "times": 2 }, - "effect": { - "type": "modifyStrength", - "filter": "choose(companion,signet(frodo))", - "amount": 1, - "until": "start(regroup)" - } - } + "effect": [ + { + "type": "playCardFromDrawDeck", + "filter": "choose(item)", + "on": "culture(shire),companion", + "nocheck": true + }, + { + "type": "playCardFromDrawDeck", + "filter": "choose(item)", + "on": "culture(shire),companion", + "nocheck": true + } + ] + }, ] }, + "151_51": { "title": "*Griffo Boffin", "subtitle": "Uncouth Fellow", @@ -58,6 +69,7 @@ } ] }, + "151_52": { "title": "*Merry", "subtitle": "Of Buckland", @@ -75,22 +87,13 @@ "phase": "assignment", "cost": [ { - "type": "discard", - "filter": "choose(culture(dwarven),follower)", - "count": "1-100", - "memorize": "discardedTales" - }, - { - "type": "memorizeNumber", - "memory": "numberOfTalesDiscarded", - "amount": { - "type": "forEachInMemory", - "memory": "discardedTales" - } + "type": "exert", + "filter": "self", + "times": "2", }, { "type": "chooseActiveCards", - "text": "Choose minion", + "text": "Choose minion to prevent from skirmishing", "filter": "choose(minion)", "memorize": "chosenMinion" } @@ -98,26 +101,21 @@ "effect": { "type": "preventable", "player": "shadowPlayer", - "text": "Would you like to remove {numberOfTalesDiscarded} twilight to allow {chosenMinion} to skirmish?", + "text": "Would you like to exhaust {chosenMinion} to permit it to skirmish?", "cost": { - "type": "removeTwilight", - "amount": { - "type": "forEachInMemory", - "memory": "discardedTales" - } + "type": "exhaust", + "filter": "memory(chosenMinion)" }, "effect": { - "type": "addModifier", - "modifier": { - "type": "cantBeAssignedToSkirmishAgainst", - "fpCharacter": "any", - "minion": "memory(chosenMinion)" - } + "type": "cantBeAssignedToSkirmish", + "filter": "memory(chosenMinion)", + "until": "start(regroup)" } } } ] }, + "151_53": { "title": "*Pippin", "subtitle": "Of Tuckborough", @@ -140,7 +138,7 @@ "effect": [ { "type": "cantBeOverwhelmedMultiplier", - "filter": "choose(culture(shire),companion)", + "filter": "choose(culture(shire),companion,inSkirmish)", "memorize": "shireCompanion" }, { @@ -160,6 +158,7 @@ } ] }, + "151_54": { "title": "*Sam", "subtitle": "Of Bagshot Row", @@ -215,6 +214,7 @@ } ] }, + "151_55": { "title": "We May Yet", "culture": "shire", @@ -225,7 +225,7 @@ "type": "event", "cost": { "type": "exert", - "filter": "choose(companion,signet(frodo))", + "filter": "choose(companion,signet(frodo),inSkirmish)", "memorize": "exertedCompanion" }, "effect": { @@ -239,6 +239,7 @@ } } }, + "151_56": { "title": "We're Coming Too", "culture": "shire", 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 d7502d258..3a67d9893 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 @@ -426,7 +426,7 @@ public class GenericCardTestHelper extends AbstractAtTest { Arrays.stream(cards).forEach(card -> MoveCardToZone(P1, card, Zone.DISCARD)); } public void ShadowMoveCardToDiscard(String...names) { - Arrays.stream(names).forEach(name -> ShadowMoveCardToDiscard(GetFreepsCard(name))); + Arrays.stream(names).forEach(name -> ShadowMoveCardToDiscard(GetShadowCard(name))); } public void ShadowMoveCardToDiscard(PhysicalCardImpl...cards) { Arrays.stream(cards).forEach(card -> MoveCardToZone(P2, card, Zone.DISCARD)); @@ -781,4 +781,9 @@ public class GenericCardTestHelper extends AbstractAtTest { playerDecided(P1, ""); playerDecided(P2, ""); } + + public int GetOverwhelmMultiplier(PhysicalCardImpl card) + { + return _game.getModifiersQuerying().getOverwhelmMultiplier(_game, card); + } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_050_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_050_Tests.java index f29760f03..8cbc67024 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_050_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_050_Tests.java @@ -3,9 +3,11 @@ package com.gempukku.lotro.cards.unofficial.pc.vset1.vpack1; 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.MoveLimitModifier; import org.junit.Test; @@ -22,8 +24,13 @@ public class Card_V1_050_Tests return new GenericCardTestHelper( new HashMap() {{ - put("card", "151_50"); - // put other cards in here as needed for the test case + put("bilbo", "151_50"); + put("sam", "1_311"); + put("coat", "13_153"); + put("sting", "8_113"); + + put("phial", "3_24"); + put("greenleaf", "1_50"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -31,9 +38,7 @@ public class Card_V1_050_Tests ); } - // Uncomment both @Test markers below once this is ready to be used - - //@Test + @Test public void BilboStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { /** @@ -53,34 +58,100 @@ public class Card_V1_050_Tests //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); + PhysicalCardImpl bilbo = scn.GetFreepsCard("bilbo"); - assertTrue(card.getBlueprint().isUnique()); - assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide()); - assertEquals(Culture.SHIRE, card.getBlueprint().getCulture()); - assertEquals(CardType.ALLY, card.getBlueprint().getCardType()); - assertEquals(Race.CREATURE, card.getBlueprint().getRace()); - assertTrue(scn.HasKeyword(card, Keyword.SUPPORT_AREA)); // test for keywords as needed - assertEquals(2, card.getBlueprint().getTwilightCost()); - assertEquals(2, card.getBlueprint().getStrength()); - assertEquals(3, card.getBlueprint().getVitality()); - //assertEquals(, card.getBlueprint().getResistance()); - //assertEquals(Signet., card.getBlueprint().getSignet()); - assertEquals(3, card.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies + assertTrue(bilbo.getBlueprint().isUnique()); + assertEquals(Side.FREE_PEOPLE, bilbo.getBlueprint().getSide()); + assertEquals(Culture.SHIRE, bilbo.getBlueprint().getCulture()); + assertEquals(CardType.ALLY, bilbo.getBlueprint().getCardType()); + assertEquals(Race.HOBBIT, bilbo.getBlueprint().getRace()); + //assertTrue(scn.HasKeyword(bilbo, Keyword.SUPPORT_AREA)); // test for keywords as needed + assertEquals(2, bilbo.getBlueprint().getTwilightCost()); + assertEquals(2, bilbo.getBlueprint().getStrength()); + assertEquals(3, bilbo.getBlueprint().getVitality()); + //assertEquals(, bilbo.getBlueprint().getResistance()); + //assertEquals(Signet., bilbo.getBlueprint().getSignet()); + assertEquals(3, bilbo.getBlueprint().getAllyHomeSiteNumbers()[0]); // Change this to getAllyHomeSiteNumbers for allies } - //@Test - public void BilboTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void FellowshipAbilityOnlyWorksAtSanctuary() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + PhysicalCardImpl bilbo = scn.GetFreepsCard("bilbo"); + scn.FreepsMoveCardToSupportArea(bilbo); + + scn.FreepsMoveCardToDiscard("sam", "sting", "coat"); + scn.ShadowMoveCardToDiscard("bilbo", "sam", "sting", "coat"); + + //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(2, scn.GetTwilight()); + for(int i = 1; i <= 8; i++) + { + PhysicalCardImpl site = scn.GetCurrentSite(); + if(i == 3 || i == 6 || scn.HasKeyword(scn.GetCurrentSite(), Keyword.SANCTUARY)) { + assertTrue(scn.FreepsCardActionAvailable(bilbo)); + } + else { + assertFalse(scn.FreepsCardActionAvailable(bilbo)); + } + + scn.SkipToPhase(Phase.REGROUP); + if(i == 8) + break; // Game finished + scn.PassCurrentPhaseActions(); + scn.FreepsChooseToStay(); + + //Shadow player + scn.SkipToPhase(Phase.REGROUP); + scn.FreepsPassCurrentPhaseAction(); // actually shadow with the swap + scn.ShadowChoose("1"); // Choose to stay + assertEquals(Phase.FELLOWSHIP, scn.GetCurrentPhase()); + } + } + + @Test + public void FellowshipAbilityExertsTwiceToTutor2ItemsOnFrodoSignetCompanions() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl frodo = scn.GetRingBearer(); + PhysicalCardImpl bilbo = scn.GetFreepsCard("bilbo"); + PhysicalCardImpl greenleaf = scn.GetFreepsCard("greenleaf"); + PhysicalCardImpl sam = scn.GetFreepsCard("sam"); + PhysicalCardImpl coat = scn.GetFreepsCard("coat"); + PhysicalCardImpl sting = scn.GetFreepsCard("sting"); + PhysicalCardImpl phial = scn.GetFreepsCard("phial"); + scn.FreepsMoveCardToSupportArea(bilbo, greenleaf); + scn.FreepsMoveCharToTable(sam); + + //Cheat the sanctuary so we don't have to move and swap + scn.ApplyAdHocModifier(new KeywordModifier(null, Filters.siteNumber(1), Keyword.SANCTUARY)); + + scn.StartGame(); + + assertTrue(scn.FreepsCardActionAvailable(bilbo)); + assertEquals(0, scn.GetWoundsOn(bilbo)); + + scn.FreepsUseCardAction(bilbo); + assertEquals(2, scn.GetWoundsOn(bilbo)); + assertTrue(scn.FreepsDecisionAvailable("Choose card from deck")); + assertEquals(2, scn.GetFreepsCardChoiceCount()); + + scn.FreepsChooseCardBPFromSelection(coat); + assertEquals(Zone.ATTACHED, coat.getZone()); + assertEquals(frodo, coat.getAttachedTo()); + + assertTrue(scn.FreepsDecisionAvailable("Choose card from deck")); + assertEquals(1, scn.GetFreepsCardChoiceCount()); + scn.FreepsChooseCardBPFromSelection(sting); + assertEquals(Zone.ATTACHED, sting.getZone()); + assertEquals(frodo, sting.getAttachedTo()); + } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_051_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_051_Tests.java index 1e4ec8b73..4dc4cc684 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_051_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_051_Tests.java @@ -22,7 +22,9 @@ public class Card_V1_051_Tests return new GenericCardTestHelper( new HashMap() {{ - put("card", "151_51"); + put("griffo", "151_51"); + put("farmer1", "1_295"); + put("farmer2", "1_295"); // put other cards in here as needed for the test case }}, GenericCardTestHelper.FellowshipSites, @@ -31,9 +33,7 @@ public class Card_V1_051_Tests ); } - // Uncomment both @Test markers below once this is ready to be used - - //@Test + @Test public void GriffoBoffinStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { /** @@ -47,40 +47,49 @@ public class Card_V1_051_Tests * Strength: 3 * Vitality: 2 * Site Number: 1 - * Game Text: Each time you play a [shire] ally, you may add (1) to draw a card. + * Game Text: Each time you play a [shire] ally, you may add (1) to draw a griffo. */ //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); + PhysicalCardImpl griffo = scn.GetFreepsCard("griffo"); - assertTrue(card.getBlueprint().isUnique()); - assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide()); - assertEquals(Culture.SHIRE, card.getBlueprint().getCulture()); - assertEquals(CardType.ALLY, card.getBlueprint().getCardType()); - assertEquals(Race.CREATURE, card.getBlueprint().getRace()); - assertTrue(scn.HasKeyword(card, Keyword.SUPPORT_AREA)); // test for keywords as needed - assertEquals(1, card.getBlueprint().getTwilightCost()); - assertEquals(3, card.getBlueprint().getStrength()); - assertEquals(2, card.getBlueprint().getVitality()); - //assertEquals(, card.getBlueprint().getResistance()); - //assertEquals(Signet., card.getBlueprint().getSignet()); - assertEquals(1, card.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies + assertTrue(griffo.getBlueprint().isUnique()); + assertEquals(Side.FREE_PEOPLE, griffo.getBlueprint().getSide()); + assertEquals(Culture.SHIRE, griffo.getBlueprint().getCulture()); + assertEquals(CardType.ALLY, griffo.getBlueprint().getCardType()); + assertEquals(Race.HOBBIT, griffo.getBlueprint().getRace()); + //assertTrue(scn.HasKeyword(griffo, Keyword.SUPPORT_AREA)); // test for keywords as needed + assertEquals(1, griffo.getBlueprint().getTwilightCost()); + assertEquals(3, griffo.getBlueprint().getStrength()); + assertEquals(2, griffo.getBlueprint().getVitality()); + //assertEquals(, griffo.getBlueprint().getResistance()); + //assertEquals(Signet., griffo.getBlueprint().getSignet()); + assertEquals(1, griffo.getBlueprint().getAllyHomeSiteNumbers()[0]); // Change this to getAllyHomeSiteNumbers for allies } - //@Test - public void GriffoBoffinTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void WhenShireAllyIsPlayedAdd1ToDraw() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + PhysicalCardImpl griffo = scn.GetFreepsCard("griffo"); + PhysicalCardImpl farmer1 = scn.GetFreepsCard("farmer1"); + PhysicalCardImpl farmer2 = scn.GetFreepsCard("farmer2"); + scn.FreepsMoveCharToTable(griffo); + scn.FreepsMoveCardToHand(farmer1); scn.StartGame(); - scn.FreepsPlayCard(card); + assertEquals(0, scn.GetTwilight()); + assertEquals(Zone.DECK, farmer2.getZone()); + + scn.FreepsPlayCard(farmer1); + assertTrue(scn.FreepsHasOptionalTriggerAvailable()); + scn.FreepsAcceptOptionalTrigger(); + assertEquals(2, scn.GetTwilight()); // +1 from playing farmer, +1 from Griffo's ability + assertEquals(Zone.HAND, farmer2.getZone()); - assertEquals(1, scn.GetTwilight()); } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_052_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_052_Tests.java index 7a576492f..15ec99970 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_052_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_052_Tests.java @@ -8,6 +8,7 @@ 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 org.xml.sax.SAXNotRecognizedException; import java.util.HashMap; @@ -22,8 +23,8 @@ public class Card_V1_052_Tests return new GenericCardTestHelper( new HashMap() {{ - put("card", "151_52"); - // put other cards in here as needed for the test case + put("merry", "151_52"); + put("shelob", "8_26"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -31,9 +32,7 @@ public class Card_V1_052_Tests ); } - // Uncomment both @Test markers below once this is ready to be used - - //@Test + @Test public void MerryStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { /** @@ -53,34 +52,80 @@ public class Card_V1_052_Tests //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); + PhysicalCardImpl merry = scn.GetFreepsCard("merry"); - assertTrue(card.getBlueprint().isUnique()); - assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide()); - assertEquals(Culture.SHIRE, card.getBlueprint().getCulture()); - assertEquals(CardType.COMPANION, card.getBlueprint().getCardType()); - assertEquals(Race.CREATURE, card.getBlueprint().getRace()); - assertTrue(scn.HasKeyword(card, Keyword.SUPPORT_AREA)); // test for keywords as needed - assertEquals(1, card.getBlueprint().getTwilightCost()); - assertEquals(3, card.getBlueprint().getStrength()); - assertEquals(4, card.getBlueprint().getVitality()); - //assertEquals(, card.getBlueprint().getResistance()); - assertEquals(Signet.FRODO, card.getBlueprint().getSignet()); - //assertEquals(, card.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies + assertTrue(merry.getBlueprint().isUnique()); + assertEquals(Side.FREE_PEOPLE, merry.getBlueprint().getSide()); + assertEquals(Culture.SHIRE, merry.getBlueprint().getCulture()); + assertEquals(CardType.COMPANION, merry.getBlueprint().getCardType()); + assertEquals(Race.HOBBIT, merry.getBlueprint().getRace()); + //assertTrue(scn.HasKeyword(merry, Keyword.SUPPORT_AREA)); // test for keywords as needed + assertEquals(1, merry.getBlueprint().getTwilightCost()); + assertEquals(3, merry.getBlueprint().getStrength()); + assertEquals(4, merry.getBlueprint().getVitality()); + //assertEquals(, merry.getBlueprint().getResistance()); + assertEquals(Signet.FRODO, merry.getBlueprint().getSignet()); + //assertEquals(, merry.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies } - //@Test - public void MerryTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void MerryExertsTwiceToPreventMinionSkirmishing() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + PhysicalCardImpl merry = scn.GetFreepsCard("merry"); + scn.FreepsMoveCharToTable(merry); + + PhysicalCardImpl 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.FreepsCardActionAvailable(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 + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl merry = scn.GetFreepsCard("merry"); + scn.FreepsMoveCharToTable(merry); + + PhysicalCardImpl 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.FreepsCardActionAvailable(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")); } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_053_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_053_Tests.java index 874485943..16aeaa580 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_053_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_053_Tests.java @@ -8,6 +8,7 @@ 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 org.mockito.internal.matchers.Same; import java.util.HashMap; @@ -22,8 +23,10 @@ public class Card_V1_053_Tests return new GenericCardTestHelper( new HashMap() {{ - put("card", "151_53"); - // put other cards in here as needed for the test case + put("pippin", "151_53"); + put("sam", "1_310"); + + put("nazgul", "1_232"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -31,9 +34,7 @@ public class Card_V1_053_Tests ); } - // Uncomment both @Test markers below once this is ready to be used - - //@Test + @Test public void PippinStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { /** @@ -53,34 +54,85 @@ public class Card_V1_053_Tests //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); + PhysicalCardImpl pippin = scn.GetFreepsCard("pippin"); - assertTrue(card.getBlueprint().isUnique()); - assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide()); - assertEquals(Culture.SHIRE, card.getBlueprint().getCulture()); - assertEquals(CardType.COMPANION, card.getBlueprint().getCardType()); - assertEquals(Race.CREATURE, card.getBlueprint().getRace()); - assertTrue(scn.HasKeyword(card, Keyword.SUPPORT_AREA)); // test for keywords as needed - assertEquals(1, card.getBlueprint().getTwilightCost()); - assertEquals(3, card.getBlueprint().getStrength()); - assertEquals(4, card.getBlueprint().getVitality()); - //assertEquals(, card.getBlueprint().getResistance()); - assertEquals(Signet.FRODO, card.getBlueprint().getSignet()); - //assertEquals(, card.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies + assertTrue(pippin.getBlueprint().isUnique()); + assertEquals(Side.FREE_PEOPLE, pippin.getBlueprint().getSide()); + assertEquals(Culture.SHIRE, pippin.getBlueprint().getCulture()); + assertEquals(CardType.COMPANION, pippin.getBlueprint().getCardType()); + assertEquals(Race.HOBBIT, pippin.getBlueprint().getRace()); + //assertTrue(scn.HasKeyword(pippin, Keyword.SUPPORT_AREA)); // test for keywords as needed + assertEquals(1, pippin.getBlueprint().getTwilightCost()); + assertEquals(3, pippin.getBlueprint().getStrength()); + assertEquals(4, pippin.getBlueprint().getVitality()); + //assertEquals(, pippin.getBlueprint().getResistance()); + assertEquals(Signet.FRODO, pippin.getBlueprint().getSignet()); + //assertEquals(, pippin.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies } - //@Test - public void PippinTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void SkirmishAbilityExertsPippinToPreventShireOverwhelmUnlessTripled() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + PhysicalCardImpl frodo = scn.GetRingBearer(); + PhysicalCardImpl pippin = scn.GetFreepsCard("pippin"); + //PhysicalCardImpl sam = scn.GetFreepsCard("sam"); + scn.FreepsMoveCharToTable(pippin); + + PhysicalCardImpl nazgul = scn.GetShadowCard("nazgul"); + scn.FreepsMoveCharToTable(nazgul); scn.StartGame(); - scn.FreepsPlayCard(card); - assertEquals(1, scn.GetTwilight()); + scn.SkipToPhase(Phase.ASSIGNMENT); + scn.PassCurrentPhaseActions(); + scn.FreepsAssignToMinions(frodo, nazgul); + scn.FreepsResolveSkirmish(frodo); + + assertEquals(2, scn.GetOverwhelmMultiplier(frodo)); // 2x is the default + assertTrue(scn.FreepsCardActionAvailable(pippin)); + assertEquals(0, scn.GetWoundsOn(pippin)); + + scn.FreepsUseCardAction(pippin); + assertEquals(3, scn.GetOverwhelmMultiplier(frodo)); + assertEquals(1, scn.GetWoundsOn(pippin)); + + scn.ShadowPassCurrentPhaseAction(); + scn.FreepsPassCurrentPhaseAction(); + scn.FreepsDeclineOptionalTrigger(); //ring response + + assertEquals(1, scn.GetWoundsOn(frodo)); + + } + + @Test + public void SkirmishAbilityPumpsIfThreeFrodoSignets() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl frodo = scn.GetRingBearer(); + PhysicalCardImpl pippin = scn.GetFreepsCard("pippin"); + PhysicalCardImpl sam = scn.GetFreepsCard("sam"); + scn.FreepsMoveCharToTable(pippin, sam); + + PhysicalCardImpl nazgul = scn.GetShadowCard("nazgul"); + scn.FreepsMoveCharToTable(nazgul); + + scn.StartGame(); + + scn.SkipToPhase(Phase.ASSIGNMENT); + scn.PassCurrentPhaseActions(); + scn.FreepsAssignToMinions(sam, nazgul); + scn.FreepsResolveSkirmish(sam); + + assertEquals(3, scn.GetStrength(sam)); + assertTrue(scn.FreepsCardActionAvailable(pippin)); + assertEquals(0, scn.GetWoundsOn(pippin)); + + scn.FreepsUseCardAction(pippin); + assertEquals(4, scn.GetStrength(sam)); + } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_054_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_054_Tests.java index 80b020998..c69de8f4d 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_054_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_054_Tests.java @@ -22,8 +22,10 @@ public class Card_V1_054_Tests return new GenericCardTestHelper( new HashMap() {{ - put("card", "151_54"); - // put other cards in here as needed for the test case + put("sam", "151_54"); + put("boromir", "1_97"); + + put("runner", "1_178"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -31,9 +33,7 @@ public class Card_V1_054_Tests ); } - // Uncomment both @Test markers below once this is ready to be used - - //@Test + @Test public void SamStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { /** @@ -54,34 +54,94 @@ public class Card_V1_054_Tests //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); + PhysicalCardImpl sam = scn.GetFreepsCard("sam"); - assertTrue(card.getBlueprint().isUnique()); - assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide()); - assertEquals(Culture.SHIRE, card.getBlueprint().getCulture()); - assertEquals(CardType.COMPANION, card.getBlueprint().getCardType()); - assertEquals(Race.CREATURE, card.getBlueprint().getRace()); - assertTrue(scn.HasKeyword(card, Keyword.SUPPORT_AREA)); // test for keywords as needed - assertEquals(2, card.getBlueprint().getTwilightCost()); - assertEquals(3, card.getBlueprint().getStrength()); - assertEquals(4, card.getBlueprint().getVitality()); - //assertEquals(, card.getBlueprint().getResistance()); - assertEquals(Signet.FRODO, card.getBlueprint().getSignet()); - //assertEquals(, card.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies + assertTrue(sam.getBlueprint().isUnique()); + assertEquals(Side.FREE_PEOPLE, sam.getBlueprint().getSide()); + assertEquals(Culture.SHIRE, sam.getBlueprint().getCulture()); + assertEquals(CardType.COMPANION, sam.getBlueprint().getCardType()); + assertEquals(Race.HOBBIT, sam.getBlueprint().getRace()); + //assertTrue(scn.HasKeyword(sam, Keyword.SUPPORT_AREA)); // test for keywords as needed + assertEquals(2, sam.getBlueprint().getTwilightCost()); + assertEquals(3, sam.getBlueprint().getStrength()); + assertEquals(4, sam.getBlueprint().getVitality()); + //assertEquals(, sam.getBlueprint().getResistance()); + assertEquals(Signet.FRODO, sam.getBlueprint().getSignet()); + //assertEquals(, sam.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies } - //@Test - public void SamTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void EachTimeFrodoSignetWinsSkirmishSamCanExertToHealThem() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + PhysicalCardImpl sam = scn.GetFreepsCard("sam"); + PhysicalCardImpl boromir = scn.GetFreepsCard("boromir"); + scn.FreepsMoveCharToTable(sam, boromir); + + PhysicalCardImpl 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(); + assertTrue(scn.FreepsDecisionAvailable("choose action")); + assertEquals(2, scn.FreepsGetMultipleChoices().size()); + scn.FreepsChooseMultipleChoiceOption("exert"); + + assertEquals(0, scn.GetWoundsOn(boromir)); + assertEquals(1, scn.GetWoundsOn(sam)); + assertEquals(1, scn.GetBurdens()); + } + + @Test + public void EachTimeFrodoSignetWinsSkirmishSamCanAddBurdenToHealThem() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl sam = scn.GetFreepsCard("sam"); + PhysicalCardImpl boromir = scn.GetFreepsCard("boromir"); + scn.FreepsMoveCharToTable(sam, boromir); + + PhysicalCardImpl runner = scn.GetShadowCard("runner"); + scn.ShadowMoveCharToTable(runner); + + scn.StartGame(); + + 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(); + assertTrue(scn.FreepsDecisionAvailable("choose action")); + assertEquals(2, scn.FreepsGetMultipleChoices().size()); + scn.FreepsChooseMultipleChoiceOption("burden"); + + assertEquals(0, scn.GetWoundsOn(boromir)); + assertEquals(0, scn.GetWoundsOn(sam)); + assertEquals(2, scn.GetBurdens()); } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_055_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_055_Tests.java index 809736362..5881b2323 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_055_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_055_Tests.java @@ -8,6 +8,7 @@ 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 org.xml.sax.SAXNotRecognizedException; import java.util.HashMap; @@ -22,8 +23,14 @@ public class Card_V1_055_Tests return new GenericCardTestHelper( new HashMap() {{ - put("card", "151_55"); - // put other cards in here as needed for the test case + put("yet", "151_55"); + put("boromir", "1_97"); + put("sam", "1_311"); + put("pippin", "1_306"); + put("merry", "1_302"); + put("gimli", "2_121"); + + put("runner", "1_178"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -31,9 +38,7 @@ public class Card_V1_055_Tests ); } - // Uncomment both @Test markers below once this is ready to be used - - //@Test + @Test public void WeMayYetStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { /** @@ -50,34 +55,81 @@ public class Card_V1_055_Tests //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); + PhysicalCardImpl yet = scn.GetFreepsCard("yet"); - assertFalse(card.getBlueprint().isUnique()); - assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide()); - assertEquals(Culture.SHIRE, card.getBlueprint().getCulture()); - assertEquals(CardType.EVENT, card.getBlueprint().getCardType()); - //assertEquals(Race.CREATURE, card.getBlueprint().getRace()); - assertTrue(scn.HasKeyword(card, Keyword.SUPPORT_AREA)); // test for keywords as needed - assertEquals(1, card.getBlueprint().getTwilightCost()); - //assertEquals(, card.getBlueprint().getStrength()); - //assertEquals(, card.getBlueprint().getVitality()); - //assertEquals(, card.getBlueprint().getResistance()); - //assertEquals(Signet., card.getBlueprint().getSignet()); - //assertEquals(, card.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies + assertFalse(yet.getBlueprint().isUnique()); + assertEquals(Side.FREE_PEOPLE, yet.getBlueprint().getSide()); + assertEquals(Culture.SHIRE, yet.getBlueprint().getCulture()); + assertEquals(CardType.EVENT, yet.getBlueprint().getCardType()); + //assertEquals(Race.CREATURE, yet.getBlueprint().getRace()); + assertTrue(scn.HasKeyword(yet, Keyword.SKIRMISH)); // test for keywords as needed + assertEquals(1, yet.getBlueprint().getTwilightCost()); + //assertEquals(, yet.getBlueprint().getStrength()); + //assertEquals(, yet.getBlueprint().getVitality()); + //assertEquals(, yet.getBlueprint().getResistance()); + //assertEquals(Signet., yet.getBlueprint().getSignet()); + //assertEquals(, yet.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies } - //@Test - public void WeMayYetTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void WeMayYetExertsToPumpBasedOnFrodoSignets() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + PhysicalCardImpl yet = scn.GetFreepsCard("yet"); + PhysicalCardImpl boromir = scn.GetFreepsCard("boromir"); + PhysicalCardImpl sam = scn.GetFreepsCard("sam"); + PhysicalCardImpl merry = scn.GetFreepsCard("merry"); + PhysicalCardImpl pippin = scn.GetFreepsCard("pippin"); + PhysicalCardImpl gimli = scn.GetFreepsCard("gimli"); + scn.FreepsMoveCharToTable(boromir, sam, merry, pippin, gimli); + scn.FreepsMoveCardToHand(yet); + + PhysicalCardImpl runner = scn.GetShadowCard("runner"); + scn.ShadowMoveCharToTable(runner); scn.StartGame(); - scn.FreepsPlayCard(card); + scn.SkipToPhase(Phase.ASSIGNMENT); + scn.PassCurrentPhaseActions(); + scn.FreepsAssignToMinions(boromir, runner); + scn.FreepsResolveSkirmish(boromir); + + assertTrue(scn.FreepsCardPlayAvailable(yet)); + assertEquals(0, scn.GetWoundsOn(boromir)); + assertEquals(7, scn.GetStrength(boromir)); + + scn.FreepsPlayCard(yet); + assertEquals(1, scn.GetWoundsOn(boromir)); + // frodo/boromir/gimli/merry/pippin makes 5 frodo signets, but it's capped to 4. Sam is gorn signet + assertEquals(11, scn.GetStrength(boromir)); + } + + @Test + public void WeMayYetRequiresFrodoSignetInSkirmish() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl yet = scn.GetFreepsCard("yet"); + PhysicalCardImpl sam = scn.GetFreepsCard("sam"); + scn.FreepsMoveCharToTable(sam); + scn.FreepsMoveCardToHand(yet); + + PhysicalCardImpl runner = scn.GetShadowCard("runner"); + scn.ShadowMoveCharToTable(runner); + + scn.StartGame(); + + scn.AddWoundsToChar(scn.GetRingBearer(), 4); + scn.FreepsPassCurrentPhaseAction(); + scn.FreepsAcceptOptionalTrigger(); // transfer ring to sam + + scn.SkipToPhase(Phase.ASSIGNMENT); + scn.PassCurrentPhaseActions(); + scn.FreepsAssignToMinions(sam, runner); + scn.FreepsResolveSkirmish(sam); + + assertFalse(scn.FreepsCardPlayAvailable(yet)); - assertEquals(1, scn.GetTwilight()); } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_056_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_056_Tests.java index b83042c3a..c68ac17fe 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_056_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_056_Tests.java @@ -22,8 +22,10 @@ public class Card_V1_056_Tests return new GenericCardTestHelper( new HashMap() {{ - put("card", "151_56"); - // put other cards in here as needed for the test case + put("coming", "151_56"); + put("pippin", "1_306"); + put("merry", "1_302"); + put("gimli", "2_121"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -31,9 +33,7 @@ public class Card_V1_056_Tests ); } - // Uncomment both @Test markers below once this is ready to be used - - //@Test + @Test public void WereComingTooStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { /** @@ -50,34 +50,51 @@ public class Card_V1_056_Tests //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); + PhysicalCardImpl coming = scn.GetFreepsCard("coming"); - assertFalse(card.getBlueprint().isUnique()); - assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide()); - assertEquals(Culture.SHIRE, card.getBlueprint().getCulture()); - assertEquals(CardType.EVENT, card.getBlueprint().getCardType()); - //assertEquals(Race.CREATURE, card.getBlueprint().getRace()); - assertTrue(scn.HasKeyword(card, Keyword.SUPPORT_AREA)); // test for keywords as needed - assertEquals(2, card.getBlueprint().getTwilightCost()); - //assertEquals(, card.getBlueprint().getStrength()); - //assertEquals(, card.getBlueprint().getVitality()); - //assertEquals(, card.getBlueprint().getResistance()); - //assertEquals(Signet., card.getBlueprint().getSignet()); - //assertEquals(, card.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies + assertFalse(coming.getBlueprint().isUnique()); + assertEquals(Side.FREE_PEOPLE, coming.getBlueprint().getSide()); + assertEquals(Culture.SHIRE, coming.getBlueprint().getCulture()); + assertEquals(CardType.EVENT, coming.getBlueprint().getCardType()); + //assertEquals(Race.CREATURE, coming.getBlueprint().getRace()); + assertTrue(scn.HasKeyword(coming, Keyword.FELLOWSHIP)); // test for keywords as needed + assertEquals(2, coming.getBlueprint().getTwilightCost()); + //assertEquals(, coming.getBlueprint().getStrength()); + //assertEquals(, coming.getBlueprint().getVitality()); + //assertEquals(, coming.getBlueprint().getResistance()); + //assertEquals(Signet., coming.getBlueprint().getSignet()); + //assertEquals(, coming.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies } - //@Test + @Test public void WereComingTooTest1() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + PhysicalCardImpl coming = scn.GetFreepsCard("coming"); + PhysicalCardImpl frodo = scn.GetRingBearer(); + PhysicalCardImpl merry = scn.GetFreepsCard("merry"); + PhysicalCardImpl pippin = scn.GetFreepsCard("pippin"); + PhysicalCardImpl gimli = scn.GetFreepsCard("gimli"); + scn.FreepsMoveCharToTable(gimli); + scn.FreepsMoveCardToHand(coming, merry, pippin); scn.StartGame(); - scn.FreepsPlayCard(card); + scn.AddWoundsToChar(gimli, 1); + scn.AddWoundsToChar(frodo, 1); + + assertFalse(scn.FreepsCardPlayAvailable(coming)); + scn.FreepsPlayCard(merry); + assertFalse(scn.FreepsCardPlayAvailable(coming)); + scn.FreepsPlayCard(pippin); + assertTrue(scn.FreepsCardPlayAvailable(coming)); + + assertEquals(1, scn.GetWoundsOn(gimli)); + assertEquals(1, scn.GetWoundsOn(frodo)); + scn.FreepsPlayCard(coming); + assertEquals(0, scn.GetWoundsOn(gimli)); + assertEquals(0, scn.GetWoundsOn(frodo)); - assertEquals(2, scn.GetTwilight()); } }