Mostly finishing Shire V1 revamp (Bilbo is pending)

This commit is contained in:
Christian 'ketura' McCarty
2022-07-27 09:35:50 -05:00
parent 1729f7de92
commit a171ea28e2
9 changed files with 519 additions and 207 deletions

View File

@@ -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",

View File

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

View File

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

View File

@@ -22,7 +22,9 @@ public class Card_V1_051_Tests
return new GenericCardTestHelper(
new HashMap<String, String>()
{{
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());
}
}

View File

@@ -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<String, String>()
{{
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"));
}
}

View File

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

View File

@@ -22,8 +22,10 @@ public class Card_V1_054_Tests
return new GenericCardTestHelper(
new HashMap<String, String>()
{{
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());
}
}

View File

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

View File

@@ -22,8 +22,10 @@ public class Card_V1_056_Tests
return new GenericCardTestHelper(
new HashMap<String, String>()
{{
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());
}
}