Completed the single remaining Ringwraith V1 revamp and finished up the missing unit tests for that culture

This commit is contained in:
Christian 'ketura' McCarty
2022-07-26 06:09:21 -05:00
parent 967e3c790c
commit 3ad660aaa7
6 changed files with 345 additions and 90 deletions

View File

@@ -144,6 +144,33 @@
"multiplier": 1
}
}
},
{
"type": "trigger",
"trigger": {
"type": "startofphase",
"phase": "maneuver"
},
"optional": true,
"cost": {
"type": "exert",
"filter": "self"
},
"effect": {
"type": "preventable",
"effect": {
"type": "addKeyword",
"filter": "self",
"keyword": "fierce",
"until": "start(regroup)",
},
"text": "Would you like to exert the Ring-bearer to prevent this minion from being fierce?",
"player": "freeps",
"cost": {
"type": "exert",
"filter": "choose(ring-bearer)"
}
}
}
]
},

View File

@@ -31,6 +31,7 @@ public class FilterFactory {
simpleFilters.put("ring bearer", (actionContext) -> Filters.ringBearer);
simpleFilters.put("ringbearer", (actionContext) -> Filters.ringBearer);
simpleFilters.put("ring-bearer", (actionContext) -> Filters.ringBearer);
simpleFilters.put("any", (actionContext) -> Filters.any);
simpleFilters.put("self", (actionContext) -> actionContext.getSource());
simpleFilters.put("another", (actionContext) -> Filters.not(actionContext.getSource()));

View File

@@ -22,7 +22,7 @@ public class Card_V1_040_Tests
return new GenericCardTestHelper(
new HashMap<String, String>()
{{
put("card", "151_40");
put("rit", "151_40");
// put other cards in here as needed for the test case
}},
GenericCardTestHelper.FellowshipSites,
@@ -31,9 +31,7 @@ public class Card_V1_040_Tests
);
}
// Uncomment both @Test markers below once this is ready to be used
//@Test
@Test
public void RingwraithinTwilightStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException {
/**
@@ -55,34 +53,90 @@ public class Card_V1_040_Tests
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl card = scn.GetFreepsCard("card");
PhysicalCardImpl rit = scn.GetFreepsCard("rit");
assertFalse(card.getBlueprint().isUnique());
assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide());
assertEquals(Culture.WRAITH, card.getBlueprint().getCulture());
assertEquals(CardType.MINION, card.getBlueprint().getCardType());
assertEquals(Race.CREATURE, card.getBlueprint().getRace());
assertTrue(scn.HasKeyword(card, Keyword.SUPPORT_AREA)); // test for keywords as needed
assertEquals(4, card.getBlueprint().getTwilightCost());
assertEquals(9, 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
assertFalse(rit.getBlueprint().isUnique());
assertEquals(Side.SHADOW, rit.getBlueprint().getSide());
assertEquals(Culture.WRAITH, rit.getBlueprint().getCulture());
assertEquals(CardType.MINION, rit.getBlueprint().getCardType());
assertEquals(Race.NAZGUL, rit.getBlueprint().getRace());
assertTrue(scn.HasKeyword(rit, Keyword.TWILIGHT)); // test for keywords as needed
assertEquals(4, rit.getBlueprint().getTwilightCost());
assertEquals(9, rit.getBlueprint().getStrength());
assertEquals(3, rit.getBlueprint().getVitality());
//assertEquals(, rit.getBlueprint().getResistance());
//assertEquals(Signet., rit.getBlueprint().getSignet());
assertEquals(3, rit.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies
}
//@Test
public void RingwraithinTwilightTest1() throws DecisionResultInvalidException, CardNotFoundException {
@Test
public void RITIsStrengthPlusOnePerWoundOnTheRB() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl card = scn.GetFreepsCard("card");
scn.FreepsMoveCardToHand(card);
PhysicalCardImpl frodo = scn.GetRingBearer();
PhysicalCardImpl rit = scn.GetShadowCard("rit");
scn.ShadowMoveCharToTable(rit);
scn.StartGame();
scn.FreepsPlayCard(card);
assertEquals(4, scn.GetTwilight());
assertEquals(9, scn.GetStrength(rit));
scn.AddWoundsToChar(frodo, 1);
assertEquals(10, scn.GetStrength(rit));
scn.AddWoundsToChar(frodo, 1);
assertEquals(11, scn.GetStrength(rit));
scn.AddWoundsToChar(frodo, 1);
assertEquals(12, scn.GetStrength(rit));
}
@Test
public void ManeuverActionMakesRITFierce() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl frodo = scn.GetRingBearer();
PhysicalCardImpl rit = scn.GetShadowCard("rit");
scn.ShadowMoveCharToTable(rit);
scn.StartGame();
assertFalse(scn.HasKeyword(rit, Keyword.FIERCE));
scn.SkipToPhase(Phase.MANEUVER);
assertTrue(scn.ShadowHasOptionalTriggerAvailable());
scn.ShadowAcceptOptionalTrigger();
scn.FreepsChooseNo();
assertTrue(scn.HasKeyword(rit, Keyword.FIERCE));
scn.SkipToPhase(Phase.ASSIGNMENT);
assertTrue(scn.HasKeyword(rit, Keyword.FIERCE));
}
@Test
public void FreepsCanPreventManeuverActionByExertingRingBearer() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl frodo = scn.GetRingBearer();
PhysicalCardImpl rit = scn.GetShadowCard("rit");
scn.ShadowMoveCharToTable(rit);
scn.StartGame();
assertFalse(scn.HasKeyword(rit, Keyword.FIERCE));
assertEquals(0, scn.GetWoundsOn(frodo));
scn.SkipToPhase(Phase.MANEUVER);
scn.ShadowAcceptOptionalTrigger();
assertTrue(scn.FreepsDecisionAvailable("prevent"));
scn.FreepsChooseYes();
assertFalse(scn.HasKeyword(rit, Keyword.FIERCE));
}
}

View File

@@ -22,8 +22,13 @@ public class Card_V1_041_Tests
return new GenericCardTestHelper(
new HashMap<String, String>()
{{
put("card", "151_41");
// put other cards in here as needed for the test case
put("eyes", "151_41");
put("twigul", "2_83");
put("filler1", "2_75");
put("filler2", "2_75");
put("filler3", "2_75");
}},
GenericCardTestHelper.FellowshipSites,
GenericCardTestHelper.FOTRFrodo,
@@ -31,9 +36,7 @@ public class Card_V1_041_Tests
);
}
// Uncomment both @Test markers below once this is ready to be used
//@Test
@Test
public void TheirEyesFellUponHimStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException {
/**
@@ -51,15 +54,15 @@ public class Card_V1_041_Tests
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl card = scn.GetFreepsCard("card");
PhysicalCardImpl eyes = scn.GetFreepsCard("eyes");
assertFalse(card.getBlueprint().isUnique());
assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide());
assertEquals(Culture.WRAITH, card.getBlueprint().getCulture());
assertEquals(CardType.CONDITION, card.getBlueprint().getCardType());
assertFalse(eyes.getBlueprint().isUnique());
assertEquals(Side.SHADOW, eyes.getBlueprint().getSide());
assertEquals(Culture.WRAITH, eyes.getBlueprint().getCulture());
assertEquals(CardType.CONDITION, eyes.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());
assertTrue(scn.HasKeyword(eyes, Keyword.SUPPORT_AREA)); // test for keywords as needed
assertEquals(1, eyes.getBlueprint().getTwilightCost());
//assertEquals(, card.getBlueprint().getStrength());
//assertEquals(, card.getBlueprint().getVitality());
//assertEquals(, card.getBlueprint().getResistance());
@@ -68,17 +71,94 @@ public class Card_V1_041_Tests
}
//@Test
public void TheirEyesFellUponHimTest1() throws DecisionResultInvalidException, CardNotFoundException {
@Test
public void RequiresATwigulToPlay() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl card = scn.GetFreepsCard("card");
scn.FreepsMoveCardToHand(card);
PhysicalCardImpl eyes = scn.GetShadowCard("eyes");
PhysicalCardImpl twigul = scn.GetShadowCard("twigul");
scn.ShadowMoveCardToHand(eyes, twigul);
scn.StartGame();
scn.FreepsPlayCard(card);
assertEquals(1, scn.GetTwilight());
scn.SetTwilight(10);
scn.FreepsPassCurrentPhaseAction();
assertFalse(scn.ShadowCardPlayAvailable(eyes));
scn.ShadowPlayCard(twigul);
assertTrue(scn.ShadowCardPlayAvailable(eyes));
}
@Test
public void EachMoveDrawsACardIfRingBearerIsWounded() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl frodo = scn.GetRingBearer();
PhysicalCardImpl eyes = scn.GetShadowCard("eyes");
scn.ShadowMoveCardToSupportArea(eyes);
scn.StartGame();
assertEquals(0, scn.GetWoundsOn(frodo));
assertEquals(0, scn.GetShadowHandCount());
assertEquals(4, scn.GetShadowDeckCount());
scn.AddWoundsToChar(frodo, 1);
scn.FreepsPassCurrentPhaseAction();
assertEquals(1, scn.GetWoundsOn(frodo));
assertEquals(1, scn.GetShadowHandCount());
assertEquals(3, scn.GetShadowDeckCount());
}
@Test
public void MovingDrawsNoCardsIfRingBearerUnwounded() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl frodo = scn.GetRingBearer();
PhysicalCardImpl eyes = scn.GetShadowCard("eyes");
scn.ShadowMoveCardToSupportArea(eyes);
scn.StartGame();
assertEquals(0, scn.GetWoundsOn(frodo));
assertEquals(0, scn.GetShadowHandCount());
assertEquals(4, scn.GetShadowDeckCount());
scn.FreepsPassCurrentPhaseAction();
assertEquals(0, scn.GetWoundsOn(frodo));
assertEquals(0, scn.GetShadowHandCount());
assertEquals(4, scn.GetShadowDeckCount());
}
@Test
public void MovingDraws2CardsIfRingBearerExhausted() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl frodo = scn.GetRingBearer();
PhysicalCardImpl eyes = scn.GetShadowCard("eyes");
scn.ShadowMoveCardToSupportArea(eyes);
scn.StartGame();
assertEquals(0, scn.GetWoundsOn(frodo));
assertEquals(0, scn.GetShadowHandCount());
assertEquals(4, scn.GetShadowDeckCount());
scn.AddWoundsToChar(frodo, 3);
scn.FreepsPassCurrentPhaseAction();
assertEquals(3, scn.GetWoundsOn(frodo));
assertEquals(2, scn.GetShadowHandCount());
assertEquals(2, scn.GetShadowDeckCount());
}
}

View File

@@ -22,8 +22,18 @@ public class Card_V1_042_Tests
return new GenericCardTestHelper(
new HashMap<String, String>()
{{
put("card", "151_42");
// put other cards in here as needed for the test case
put("walks", "151_42");
put("twigul1", "2_82");
put("twigul2", "2_84");
put("nazgul", "1_232");
put("filler1", "2_75");
put("filler2", "2_75");
put("guard1", "1_7");
put("guard2", "1_7");
put("arwen", "1_30");
put("gwemegil", "1_47");
}},
GenericCardTestHelper.FellowshipSites,
GenericCardTestHelper.FOTRFrodo,
@@ -31,9 +41,7 @@ public class Card_V1_042_Tests
);
}
// Uncomment both @Test markers below once this is ready to be used
//@Test
@Test
public void WalksinTwilightStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException {
/**
@@ -44,40 +52,80 @@ public class Card_V1_042_Tests
* Twilight Cost: 2
* Type: condition
* Subtype: Support Area
* Game Text: Each time a twilight Nazgul wins a skirmish, you may exert a twilight Nazgul to shuffle a [ringwraith] card from your discard pile into your draw deck.
* Game Text: Each time a twilight Nazgul wins a skirmish, you may exert a twilight Nazgul to shuffle a [ringwraith] walks from your discard pile into your draw deck.
*/
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl card = scn.GetFreepsCard("card");
PhysicalCardImpl walks = scn.GetFreepsCard("walks");
assertTrue(card.getBlueprint().isUnique());
assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide());
assertEquals(Culture.WRAITH, card.getBlueprint().getCulture());
assertEquals(CardType.CONDITION, 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
assertTrue(walks.getBlueprint().isUnique());
assertEquals(Side.SHADOW, walks.getBlueprint().getSide());
assertEquals(Culture.WRAITH, walks.getBlueprint().getCulture());
assertEquals(CardType.CONDITION, walks.getBlueprint().getCardType());
//assertEquals(Race.CREATURE, walks.getBlueprint().getRace());
assertTrue(scn.HasKeyword(walks, Keyword.SUPPORT_AREA)); // test for keywords as needed
assertEquals(2, walks.getBlueprint().getTwilightCost());
//assertEquals(, walks.getBlueprint().getStrength());
//assertEquals(, walks.getBlueprint().getVitality());
//assertEquals(, walks.getBlueprint().getResistance());
//assertEquals(Signet., walks.getBlueprint().getSignet());
//assertEquals(, walks.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies
}
//@Test
public void WalksinTwilightTest1() throws DecisionResultInvalidException, CardNotFoundException {
@Test
public void EachTwigulSkirmishVictory() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl card = scn.GetFreepsCard("card");
scn.FreepsMoveCardToHand(card);
PhysicalCardImpl guard1 = scn.GetFreepsCard("guard1");
PhysicalCardImpl guard2 = scn.GetFreepsCard("guard2");
PhysicalCardImpl arwen = scn.GetFreepsCard("arwen");
scn.FreepsMoveCharToTable(guard1, guard2, arwen);
scn.FreepsAttachCardsTo(arwen, "gwemegil");
PhysicalCardImpl walks = scn.GetShadowCard("walks");
PhysicalCardImpl twigul1 = scn.GetShadowCard("twigul1");
PhysicalCardImpl twigul2 = scn.GetShadowCard("twigul2");
PhysicalCardImpl nazgul = scn.GetShadowCard("nazgul");
PhysicalCardImpl filler1 = scn.GetShadowCard("filler1");
scn.ShadowMoveCardToSupportArea(walks);
scn.ShadowMoveCharToTable(twigul1, twigul2, nazgul);
scn.ShadowMoveCardToDiscard(filler1);
scn.StartGame();
scn.FreepsPlayCard(card);
assertEquals(2, scn.GetTwilight());
scn.SkipToPhase(Phase.ASSIGNMENT);
scn.PassCurrentPhaseActions();
scn.FreepsAssignToMinions(
new PhysicalCardImpl[]{guard1, twigul1},
new PhysicalCardImpl[]{arwen, twigul2},
new PhysicalCardImpl[]{guard2, nazgul});
scn.FreepsResolveSkirmish(guard1);
scn.PassCurrentPhaseActions();
assertTrue(scn.ShadowHasOptionalTriggerAvailable());
scn.ShadowAcceptOptionalTrigger();
assertTrue(scn.ShadowDecisionAvailable(""));
assertEquals(2, scn.GetShadowCardChoiceCount());
assertEquals(0, scn.GetWoundsOn(twigul1));
assertEquals(Zone.DISCARD, filler1.getZone());
scn.ShadowChooseCard(twigul1);
assertEquals(1, scn.GetWoundsOn(twigul1));
assertEquals(Zone.DECK, filler1.getZone());
scn.FreepsResolveSkirmish(arwen);
assertEquals(11, scn.GetStrength(arwen));
assertEquals(10, scn.GetStrength(twigul2));
scn.PassCurrentPhaseActions();
assertFalse(scn.ShadowHasOptionalTriggerAvailable());
scn.FreepsResolveSkirmish(guard2);
scn.PassCurrentPhaseActions();
assertFalse(scn.ShadowHasOptionalTriggerAvailable());
}
}

View File

@@ -22,8 +22,9 @@ public class Card_V1_043_Tests
return new GenericCardTestHelper(
new HashMap<String, String>()
{{
put("card", "151_43");
// put other cards in here as needed for the test case
put("faces", "151_43");
put("twigul", "2_82");
put("wk", "2_85");
}},
GenericCardTestHelper.FellowshipSites,
GenericCardTestHelper.FOTRFrodo,
@@ -31,9 +32,7 @@ public class Card_V1_043_Tests
);
}
// Uncomment both @Test markers below once this is ready to be used
//@Test
@Test
public void WhiteFacesBurnedStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException {
/**
@@ -50,34 +49,80 @@ public class Card_V1_043_Tests
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl card = scn.GetFreepsCard("card");
PhysicalCardImpl faces = scn.GetFreepsCard("faces");
assertFalse(card.getBlueprint().isUnique());
assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide());
assertEquals(Culture.WRAITH, 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(faces.getBlueprint().isUnique());
assertEquals(Side.SHADOW, faces.getBlueprint().getSide());
assertEquals(Culture.WRAITH, faces.getBlueprint().getCulture());
assertEquals(CardType.EVENT, faces.getBlueprint().getCardType());
//assertEquals(Race.CREATURE, faces.getBlueprint().getRace());
assertTrue(scn.HasKeyword(faces, Keyword.SKIRMISH)); // test for keywords as needed
assertEquals(1, faces.getBlueprint().getTwilightCost());
//assertEquals(, faces.getBlueprint().getStrength());
//assertEquals(, faces.getBlueprint().getVitality());
//assertEquals(, faces.getBlueprint().getResistance());
//assertEquals(Signet., faces.getBlueprint().getSignet());
//assertEquals(, faces.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies
}
//@Test
public void WhiteFacesBurnedTest1() throws DecisionResultInvalidException, CardNotFoundException {
@Test
public void FacesAddsOneStrengthPerWoundOnTheRB() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl card = scn.GetFreepsCard("card");
scn.FreepsMoveCardToHand(card);
PhysicalCardImpl frodo = scn.GetRingBearer();
PhysicalCardImpl faces = scn.GetShadowCard("faces");
PhysicalCardImpl twigul = scn.GetShadowCard("twigul");
scn.ShadowMoveCharToTable(twigul);
scn.ShadowMoveCardToHand(faces);
scn.StartGame();
scn.FreepsPlayCard(card);
assertEquals(1, scn.GetTwilight());
scn.AddWoundsToChar(frodo, 3);
scn.SkipToPhase(Phase.ASSIGNMENT);
scn.PassCurrentPhaseActions();
scn.FreepsAssignToMinions(frodo, twigul);
scn.FreepsResolveSkirmish(frodo);
scn.FreepsPassCurrentPhaseAction();
assertEquals(12, scn.GetStrength(twigul));
assertEquals(3, scn.GetWoundsOn(frodo));
assertTrue(scn.ShadowCardPlayAvailable(faces));
scn.ShadowPlayCard(faces);
assertEquals(15, scn.GetStrength(twigul));
}
@Test
public void FacesMakesWitchKingDamagePlusOne() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl frodo = scn.GetRingBearer();
PhysicalCardImpl faces = scn.GetShadowCard("faces");
PhysicalCardImpl wk = scn.GetShadowCard("wk");
scn.ShadowMoveCharToTable(wk);
scn.ShadowMoveCardToHand(faces);
scn.StartGame();
scn.SkipToPhase(Phase.ASSIGNMENT);
scn.PassCurrentPhaseActions();
scn.FreepsAssignToMinions(frodo, wk);
scn.FreepsResolveSkirmish(frodo);
scn.FreepsPassCurrentPhaseAction();
assertEquals(14, scn.GetStrength(wk));
assertFalse(scn.HasKeyword(wk, Keyword.DAMAGE));
assertEquals(0, scn.GetWoundsOn(frodo));
assertTrue(scn.ShadowCardPlayAvailable(faces));
scn.ShadowPlayCard(faces);
assertEquals(14, scn.GetStrength(wk));
assertTrue(scn.HasKeyword(wk, Keyword.DAMAGE));
assertEquals(1, scn.GetKeywordCount(wk, Keyword.DAMAGE));
}
}