Fixing Shoulder to Shoulder not having its effect blocked by Final Strike. This necessitated reorganizing STS to cut out the popup. Also restructured STS errata to mimic the same structure. Also fixing Talent tests.

This commit is contained in:
Christian 'ketura' McCarty
2023-06-21 23:11:22 -05:00
parent 4b9bf9651b
commit f99820049a
8 changed files with 508 additions and 303 deletions

View File

@@ -832,47 +832,44 @@
effects: {
type: activated
phase: maneuver
effect: {
type: choice
texts: [
Exert a Dwarf to heal an Elf
Exert an Elf to heal a Dwarf
]
effects: [
{
type: costToEffect
cost: [
{
type: addTwilight
}
{
type: exert
filter: choose(dwarf)
}
]
effect: {
type: heal
filter: choose(elf)
}
text: Add (1) and either exert an Elf to heal a Dwarf, or exert a Dwarf to heal an Elf.
cost: [
{
type: addTwilight
amount: 1
}
{
type: exert
filter: choose(or(dwarf,elf))
memorize: exerter
}
]
effect: [
{
type: conditional
requires: {
type: MemoryMatches
memory: exerter
filter: dwarf
}
{
type: costToEffect
cost: [
{
type: addTwilight
}
{
type: exert
filter: choose(elf)
}
]
effect: {
type: heal
filter: choose(dwarf)
}
effect: {
type: heal
filter: choose(elf)
}
]
}
}
{
type: conditional
requires: {
type: MemoryMatches
memory: exerter
filter: elf
}
effect: {
type: heal
filter: choose(dwarf)
}
}
]
}
}
1_60: {

View File

@@ -579,47 +579,44 @@
effects: {
type: activated
phase: fellowship
effect: {
type: choice
texts: [
Exert a Dwarf to heal an Elf
Exert an Elf to heal a Dwarf
]
effects: [
{
type: costToEffect
cost: [
{
type: addTwilight
}
{
type: exert
filter: choose(dwarf)
}
]
effect: {
type: heal
filter: choose(elf)
}
text: Add (1) and either exert an Elf to heal a Dwarf, or exert a Dwarf to heal an Elf.
cost: [
{
type: addTwilight
amount: 1
}
{
type: exert
filter: choose(or(dwarf,elf))
memorize: exerter
}
]
effect: [
{
type: conditional
requires: {
type: MemoryMatches
memory: exerter
filter: dwarf
}
{
type: costToEffect
cost: [
{
type: addTwilight
}
{
type: exert
filter: choose(elf)
}
]
effect: {
type: heal
filter: choose(dwarf)
}
effect: {
type: heal
filter: choose(elf)
}
]
}
}
{
type: conditional
requires: {
type: MemoryMatches
memory: exerter
filter: elf
}
effect: {
type: heal
filter: choose(dwarf)
}
}
]
}
gametext: <b>Fellowship:</b> Add (1) and exert a Dwarf to heal an Elf, or add (1) and exert an Elf to heal a Dwarf.
lore: “May it be a sign that though the world is now dark better days are at hand, and that friendship shall be renewed between our peoples.'”

View File

@@ -267,11 +267,11 @@ public class LotroGameMediator {
if (_lotroGame != null && _lotroGame.getWinnerPlayerId() == null) {
for (Map.Entry<String, Long> playerDecision : new HashMap<>(_decisionQuerySentTimes).entrySet()) {
String playerId = playerDecision.getKey();
String player = playerDecision.getKey();
long decisionSent = playerDecision.getValue();
if (currentTime > decisionSent + _timeSettings.maxSecondsPerDecision() * 1000L) {
addTimeSpentOnDecisionToUserClock(playerId);
_lotroGame.playerLost(playerId, "Player decision timed-out");
addTimeSpentOnDecisionToUserClock(player);
_lotroGame.playerLost(player, "Player decision timed-out");
}
}

View File

@@ -0,0 +1,219 @@
package com.gempukku.lotro.cards.official.set01;
import com.gempukku.lotro.cards.GenericCardTestHelper;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.game.CardNotFoundException;
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
import org.junit.Test;
import java.util.HashMap;
import static org.junit.Assert.*;
public class Card_01_059_Tests
{
protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException {
return new GenericCardTestHelper(
new HashMap<>()
{{
put("sts", "1_59");
put("legolas", "1_50");
put("gimli", "1_13");
put("rumil", "1_57");
put("grimir", "1_17");
put("runner", "1_178");
put("finalstrike", "10_20");
put("gollum", "5_24");
}},
GenericCardTestHelper.FellowshipSites,
GenericCardTestHelper.FOTRFrodo,
GenericCardTestHelper.FOTRRing
);
}
@Test
public void ShouldertoShoulderStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException {
/**
* Set: 1
* Title: Shoulder to Shoulder
* Unique: False
* Side: FREE_PEOPLE
* Culture: Elven
* Twilight Cost: 1
* Type: condition
* Subtype: Support Area
* Game Text: <b>Fellowship:</b> Add (1) and exert a Dwarf to heal an Elf, or add (1) and exert an Elf to heal a Dwarf.
*/
//Pre-game setup
var scn = GetScenario();
var sts = scn.GetFreepsCard("sts");
assertFalse(sts.getBlueprint().isUnique());
assertEquals(Side.FREE_PEOPLE, sts.getBlueprint().getSide());
assertEquals(Culture.ELVEN, sts.getBlueprint().getCulture());
assertEquals(CardType.CONDITION, sts.getBlueprint().getCardType());
assertTrue(scn.HasKeyword(sts, Keyword.SUPPORT_AREA));
assertEquals(1, sts.getBlueprint().getTwilightCost());
}
@Test
public void ManeuverActionWorksOnDwarves() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
var scn = GetScenario();
var sts = scn.GetFreepsCard("sts");
var legolas = scn.GetFreepsCard("legolas");
var gimli = scn.GetFreepsCard("gimli");
var rumil = scn.GetFreepsCard("rumil");
var grimir = scn.GetFreepsCard("grimir");
scn.FreepsMoveCharToTable(legolas, gimli);
scn.FreepsMoveCardToSupportArea(rumil, grimir, sts);
scn.ShadowMoveCharToTable("runner");
scn.StartGame();
scn.SkipToPhase(Phase.MANEUVER);
scn.SetTwilight(0);
scn.AddWoundsToChar(legolas, 1);
scn.AddWoundsToChar(gimli, 1);
scn.AddWoundsToChar(rumil, 1);
scn.AddWoundsToChar(grimir, 1);
assertEquals(0, scn.GetTwilight());
assertEquals(1, scn.GetWoundsOn(legolas));
assertEquals(1, scn.GetWoundsOn(gimli));
assertEquals(1, scn.GetWoundsOn(rumil));
assertEquals(1, scn.GetWoundsOn(grimir));
assertTrue(scn.FreepsActionAvailable("Exert a Dwarf"));
scn.FreepsChooseAction("Exert a Dwarf");
assertEquals(4, scn.GetFreepsCardChoiceCount());
scn.FreepsChooseCard(gimli);
scn.FreepsChooseCard(rumil);
assertEquals(1, scn.GetTwilight());
assertEquals(2, scn.GetWoundsOn(gimli));
assertEquals(0, scn.GetWoundsOn(rumil));
scn.ShadowPassCurrentPhaseAction();
assertTrue(scn.FreepsActionAvailable("Exert a Dwarf"));
scn.FreepsChooseAction("Exert a Dwarf");
//Legolas, Rumil, and Grimir
assertEquals(3, scn.GetFreepsCardChoiceCount());
scn.FreepsChooseCard(grimir);
assertEquals(2, scn.GetTwilight());
assertEquals(2, scn.GetWoundsOn(grimir));
assertEquals(0, scn.GetWoundsOn(legolas));
}
@Test
public void ManeuverActionWorksOnElves() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
var scn = GetScenario();
var sts = scn.GetFreepsCard("sts");
var legolas = scn.GetFreepsCard("legolas");
var gimli = scn.GetFreepsCard("gimli");
var rumil = scn.GetFreepsCard("rumil");
var grimir = scn.GetFreepsCard("grimir");
scn.FreepsMoveCharToTable(legolas, gimli);
scn.FreepsMoveCardToSupportArea(rumil, grimir, sts);
scn.ShadowMoveCharToTable("runner");
scn.StartGame();
scn.SkipToPhase(Phase.MANEUVER);
scn.SetTwilight(0);
scn.AddWoundsToChar(legolas, 1);
scn.AddWoundsToChar(gimli, 1);
scn.AddWoundsToChar(rumil, 1);
scn.AddWoundsToChar(grimir, 1);
assertEquals(0, scn.GetTwilight());
assertEquals(1, scn.GetWoundsOn(legolas));
assertEquals(1, scn.GetWoundsOn(gimli));
assertEquals(1, scn.GetWoundsOn(rumil));
assertEquals(1, scn.GetWoundsOn(grimir));
assertTrue(scn.FreepsActionAvailable("Exert an Elf"));
scn.FreepsChooseAction("Exert an Elf");
//Initially either dwarves or elves can be selected
assertEquals(4, scn.GetFreepsCardChoiceCount());
scn.FreepsChooseCard(legolas);
//Once an Elf has been selected, only Dwarves can be selected as a target
assertEquals(2, scn.GetFreepsCardChoiceCount());
scn.FreepsChooseCard(gimli);
assertEquals(1, scn.GetTwilight());
assertEquals(2, scn.GetWoundsOn(legolas));
assertEquals(0, scn.GetWoundsOn(gimli));
scn.ShadowPassCurrentPhaseAction();
assertTrue(scn.FreepsActionAvailable("Exert an Elf"));
scn.FreepsChooseAction("Exert an Elf");
scn.FreepsChooseCard(rumil);
assertEquals(2, scn.GetTwilight());
assertEquals(2, scn.GetWoundsOn(rumil));
assertEquals(0, scn.GetWoundsOn(grimir));
}
@Test
public void STSIsProperlyBlockedByFinalStrike() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
var scn = GetScenario();
var sts = scn.GetFreepsCard("sts");
var legolas = scn.GetFreepsCard("legolas");
var gimli = scn.GetFreepsCard("gimli");
scn.FreepsMoveCharToTable(legolas, gimli);
scn.FreepsMoveCardToSupportArea(sts);
var gollum = scn.GetShadowCard("gollum");
var finalstrike = scn.GetShadowCard("finalstrike");
scn.ShadowMoveCardToSupportArea(finalstrike);
scn.ShadowMoveCharToTable(gollum);
scn.StartGame();
scn.SkipToPhase(Phase.MANEUVER);
scn.SetTwilight(0);
scn.AddWoundsToChar(legolas, 1);
assertEquals(0, scn.GetTwilight());
assertEquals(1, scn.GetWoundsOn(legolas));
assertEquals(0, scn.GetWoundsOn(gimli));
assertEquals(0, scn.GetWoundsOn(gollum));
scn.FreepsChooseAction("Exert a Dwarf");
scn.FreepsChooseCard(gimli);
assertTrue(scn.ShadowHasOptionalTriggerAvailable());
scn.ShadowAcceptOptionalTrigger();
//Final Strike is a "Response:" action, so it can technically be repeated (for some reason)
scn.ShadowDeclineOptionalTrigger();
assertTrue(scn.ShadowDecisionAvailable("Maneuver action"));
// The costs of STS should have still been paid, meaning that Gimli should have exerted
// and the twilight been added, but the effect (healing Legolas) should have been blocked
assertEquals(1, scn.GetTwilight());
assertEquals(1, scn.GetWoundsOn(legolas));
assertEquals(1, scn.GetWoundsOn(gimli));
assertEquals(1, scn.GetWoundsOn(gollum));
}
}

View File

@@ -85,25 +85,21 @@ public class Card_01_059_ErrataTests
assertEquals(1, scn.GetWoundsOn(rumil));
assertEquals(1, scn.GetWoundsOn(grimir));
assertTrue(scn.FreepsActionAvailable(sts));
scn.FreepsUseCardAction(sts);
assertEquals(2, scn.FreepsGetMultipleChoices().size());
scn.FreepsChooseMultipleChoiceOption("Exert a Dwarf to heal an Elf");
assertTrue(scn.FreepsActionAvailable("Exert a Dwarf"));
scn.FreepsChooseAction("Exert a Dwarf");
assertEquals(2, scn.GetFreepsCardChoiceCount());
assertEquals(4, scn.GetFreepsCardChoiceCount());
scn.FreepsChooseCard(gimli);
scn.FreepsChooseCard(rumil);
assertEquals(1, scn.GetTwilight());
assertEquals(2, scn.GetWoundsOn(gimli));
assertEquals(0, scn.GetWoundsOn(rumil));
assertTrue(scn.FreepsActionAvailable(sts));
scn.FreepsUseCardAction(sts);
assertEquals(2, scn.FreepsGetMultipleChoices().size());
scn.FreepsChooseMultipleChoiceOption("Exert a Dwarf to heal an Elf");
assertTrue(scn.FreepsActionAvailable("Exert a Dwarf"));
scn.FreepsChooseAction("Exert a Dwarf");
assertEquals(2, scn.GetFreepsCardChoiceCount());
//only one choice of each left
assertEquals(3, scn.GetFreepsCardChoiceCount());
scn.FreepsChooseCard(grimir);
assertEquals(2, scn.GetTwilight());
assertEquals(2, scn.GetWoundsOn(grimir));
assertEquals(0, scn.GetWoundsOn(legolas));
@@ -135,25 +131,21 @@ public class Card_01_059_ErrataTests
assertEquals(1, scn.GetWoundsOn(rumil));
assertEquals(1, scn.GetWoundsOn(grimir));
assertTrue(scn.FreepsActionAvailable(sts));
scn.FreepsUseCardAction(sts);
assertEquals(2, scn.FreepsGetMultipleChoices().size());
scn.FreepsChooseMultipleChoiceOption("Exert an Elf to heal a Dwarf");
assertTrue(scn.FreepsActionAvailable("Exert an Elf"));
scn.FreepsChooseAction("Exert an Elf");
assertEquals(2, scn.GetFreepsCardChoiceCount());
assertEquals(4, scn.GetFreepsCardChoiceCount());
scn.FreepsChooseCard(legolas);
scn.FreepsChooseCard(gimli);
assertEquals(1, scn.GetTwilight());
assertEquals(2, scn.GetWoundsOn(legolas));
assertEquals(0, scn.GetWoundsOn(gimli));
assertTrue(scn.FreepsActionAvailable(sts));
scn.FreepsUseCardAction(sts);
assertEquals(2, scn.FreepsGetMultipleChoices().size());
scn.FreepsChooseMultipleChoiceOption("Exert an Elf to heal a Dwarf");
assertTrue(scn.FreepsActionAvailable("Exert an Elf"));
scn.FreepsChooseAction("Exert an Elf");
assertEquals(2, scn.GetFreepsCardChoiceCount());
//only one choice of each left
assertEquals(3, scn.GetFreepsCardChoiceCount());
scn.FreepsChooseCard(rumil);
assertEquals(2, scn.GetTwilight());
assertEquals(2, scn.GetWoundsOn(rumil));
assertEquals(0, scn.GetWoundsOn(grimir));

View File

@@ -1,124 +1,108 @@
package com.gempukku.lotro.cards.unofficial.pc.errata.set01;
import com.gempukku.lotro.cards.GenericCardTestHelper;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.game.CardNotFoundException;
import com.gempukku.lotro.game.PhysicalCardImpl;
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
import org.junit.Test;
import java.util.HashMap;
import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class Card_01_316_ErrataTests
{
protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException {
return new GenericCardTestHelper(
new HashMap<>() {{
put("talent", "51_316");
put("sam", "1_311");
put("merry", "1_302");
put("pippin", "1_307");
put("boromir", "1_97");
}}
);
}
protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException {
return new GenericCardTestHelper(
new HashMap<>()
{{
put("talent1", "71_316");
put("talent2", "71_316");
put("sam", "1_311");
put("merry", "1_302");
put("pippin", "1_306");
}},
GenericCardTestHelper.FellowshipSites,
GenericCardTestHelper.FOTRFrodo,
GenericCardTestHelper.FOTRRing
);
}
@Test
public void TalentStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException {
@Test
public void ATalentforNotBeingSeenStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException {
/**
* Set: 1E
* Title: A Talent for Not Being Seen
* Side: Free Peoples
* Culture: Shire
* Twilight Cost: 0
* Type: Condition
* Errata Game Text: Stealth. Bearer must be Merry or Pippin. Limit 1 per character.
* Each site's Shadow number is -1.
*/
/**
* Set: 1
* Title: A Talent for Not Being Seen
* Unique: True
* Side: FREE_PEOPLE
* Culture: Shire
* Twilight Cost: 0
* Type: condition
* Subtype:
* Game Text: <b>Stealth.</b> To play, exert Merry or Pippin. Bearer must be Merry or Pippin.
* Each site's Shadow number is -1.
*/
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
//Pre-game setup
var scn = GetScenario();
var talent = scn.GetFreepsCard("talent");
var card = scn.GetFreepsCard("talent1");
assertFalse(talent.getBlueprint().isUnique());
assertEquals(Side.FREE_PEOPLE, talent.getBlueprint().getSide());
assertEquals(Culture.SHIRE, talent.getBlueprint().getCulture());
assertEquals(CardType.CONDITION, talent.getBlueprint().getCardType());
assertEquals(0, talent.getBlueprint().getTwilightCost());
assertFalse(card.getBlueprint().isUnique());
assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide());
assertEquals(Culture.SHIRE, card.getBlueprint().getCulture());
assertEquals(CardType.CONDITION, card.getBlueprint().getCardType());
assertFalse(scn.HasKeyword(card, Keyword.SUPPORT_AREA));
assertEquals(0, card.getBlueprint().getTwilightCost());
}
assertTrue(scn.HasKeyword(talent, Keyword.STEALTH));
assertFalse(scn.HasKeyword(talent, Keyword.SUPPORT_AREA));
}
@Test
public void TalentExertsAndPlaysOnMerryOrPippin() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
@Test
public void TalentOnlyPlaysOnMerryOrPippin() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
var frodo = scn.GetRingBearer();
var sam = scn.GetFreepsCard("sam");
var merry = scn.GetFreepsCard("merry");
var pippin = scn.GetFreepsCard("pippin");
var talent1 = scn.GetFreepsCard("talent1");
var talent2 = scn.GetFreepsCard("talent2");
PhysicalCardImpl frodo = scn.GetRingBearer();
PhysicalCardImpl sam = scn.GetFreepsCard("sam");
PhysicalCardImpl merry = scn.GetFreepsCard("merry");
PhysicalCardImpl pippin = scn.GetFreepsCard("pippin");
PhysicalCardImpl talent = scn.GetFreepsCard("talent");
scn.FreepsMoveCardToHand(talent1,talent2, sam, merry, pippin);
scn.FreepsMoveCharToTable(sam);
scn.FreepsMoveCharToTable(merry);
scn.FreepsMoveCharToTable(pippin);
scn.FreepsMoveCardToHand(talent);
scn.StartGame();
scn.StartGame();
assertFalse(scn.FreepsPlayAvailable(talent1));
scn.FreepsPlayCard(sam);
assertFalse(scn.FreepsPlayAvailable(talent1));
scn.FreepsPlayCard(talent);
scn.FreepsPlayCard(merry);
assertTrue(scn.FreepsPlayAvailable(talent1));
assertEquals(0, scn.GetWoundsOn(merry));
scn.FreepsPlayCard(talent1);
assertEquals(1, scn.GetWoundsOn(merry));
assertSame(merry, talent1.getAttachedTo());
scn.FreepsPlayCard(pippin);
scn.FreepsPlayCard(talent2);
//There are 4 companions in play, but only 2 valid targets for the exert
assertEquals(2, scn.GetFreepsCardChoiceCount());
scn.FreepsChooseCard(merry);
//plays automatically on pippin, since merry is already bearing one
assertEquals(2, scn.GetWoundsOn(merry));
assertEquals(0, scn.GetWoundsOn(pippin));
assertSame(pippin, talent2.getAttachedTo());
}
//There are 4 companions in play, but only 2 valid targets
assertEquals(2, scn.FreepsGetADParamAsList("cardId").size());
}
@Test
public void TalentReducesShadowBy1() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
@Test
public void TalentReducesTwilightIfOnlyHobbits() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
var frodo = scn.GetRingBearer();
var merry = scn.GetFreepsCard("merry");
var talent1 = scn.GetFreepsCard("talent1");
PhysicalCardImpl frodo = scn.GetRingBearer();
PhysicalCardImpl merry = scn.GetFreepsCard("merry");
PhysicalCardImpl talent = scn.GetFreepsCard("talent");
scn.FreepsMoveCharToTable(merry);
scn.FreepsAttachCardsTo(merry, talent1);
scn.FreepsMoveCharToTable(merry);
scn.FreepsMoveCardToHand(talent);
scn.StartGame();
scn.FreepsPlayCard(talent);
scn.FreepsPassCurrentPhaseAction();
// 2 for Frodo/Merry, 1 for the site, -1 for Talent
assertEquals(2, scn.GetTwilight());
}
scn.StartGame();
scn.FreepsPassCurrentPhaseAction();
// 2 for Frodo/Merry, 2 for the site, -1 for Talent
assertEquals(3, scn.GetTwilight());
}
}

View File

@@ -0,0 +1,124 @@
package com.gempukku.lotro.cards.unofficial.pc.errata.set01;
import com.gempukku.lotro.cards.GenericCardTestHelper;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.game.CardNotFoundException;
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
import org.junit.Test;
import java.util.HashMap;
import static org.junit.Assert.*;
public class Card_01_316_ErrataTests
{
protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException {
return new GenericCardTestHelper(
new HashMap<>()
{{
put("talent1", "71_316");
put("talent2", "71_316");
put("sam", "1_311");
put("merry", "1_302");
put("pippin", "1_306");
}},
GenericCardTestHelper.FellowshipSites,
GenericCardTestHelper.FOTRFrodo,
GenericCardTestHelper.FOTRRing
);
}
@Test
public void ATalentforNotBeingSeenStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException {
/**
* Set: 1
* Title: A Talent for Not Being Seen
* Unique: True
* Side: FREE_PEOPLE
* Culture: Shire
* Twilight Cost: 0
* Type: condition
* Subtype:
* Game Text: <b>Stealth.</b> To play, exert Merry or Pippin. Bearer must be Merry or Pippin.
* Each site's Shadow number is -1.
*/
//Pre-game setup
var scn = GetScenario();
var card = scn.GetFreepsCard("talent1");
assertFalse(card.getBlueprint().isUnique());
assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide());
assertEquals(Culture.SHIRE, card.getBlueprint().getCulture());
assertEquals(CardType.CONDITION, card.getBlueprint().getCardType());
assertFalse(scn.HasKeyword(card, Keyword.SUPPORT_AREA));
assertEquals(0, card.getBlueprint().getTwilightCost());
}
@Test
public void TalentExertsAndPlaysOnMerryOrPippin() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
var frodo = scn.GetRingBearer();
var sam = scn.GetFreepsCard("sam");
var merry = scn.GetFreepsCard("merry");
var pippin = scn.GetFreepsCard("pippin");
var talent1 = scn.GetFreepsCard("talent1");
var talent2 = scn.GetFreepsCard("talent2");
scn.FreepsMoveCardToHand(talent1,talent2, sam, merry, pippin);
scn.StartGame();
assertFalse(scn.FreepsPlayAvailable(talent1));
scn.FreepsPlayCard(sam);
assertFalse(scn.FreepsPlayAvailable(talent1));
scn.FreepsPlayCard(merry);
assertTrue(scn.FreepsPlayAvailable(talent1));
assertEquals(0, scn.GetWoundsOn(merry));
scn.FreepsPlayCard(talent1);
assertEquals(1, scn.GetWoundsOn(merry));
assertSame(merry, talent1.getAttachedTo());
scn.FreepsPlayCard(pippin);
scn.FreepsPlayCard(talent2);
//There are 4 companions in play, but only 2 valid targets for the exert
assertEquals(2, scn.GetFreepsCardChoiceCount());
scn.FreepsChooseCard(merry);
//plays automatically on pippin, since merry is already bearing one
assertEquals(2, scn.GetWoundsOn(merry));
assertEquals(0, scn.GetWoundsOn(pippin));
assertSame(pippin, talent2.getAttachedTo());
}
@Test
public void TalentReducesShadowBy1() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
var frodo = scn.GetRingBearer();
var merry = scn.GetFreepsCard("merry");
var talent1 = scn.GetFreepsCard("talent1");
scn.FreepsMoveCharToTable(merry);
scn.FreepsAttachCardsTo(merry, talent1);
scn.StartGame();
scn.FreepsPassCurrentPhaseAction();
// 2 for Frodo/Merry, 2 for the site, -1 for Talent
assertEquals(3, scn.GetTwilight());
}
}

View File

@@ -1,108 +0,0 @@
package com.gempukku.lotro.cards.unofficial.pc.errata.set01;
import com.gempukku.lotro.cards.GenericCardTestHelper;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.game.CardNotFoundException;
import com.gempukku.lotro.game.PhysicalCardImpl;
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
import org.junit.Test;
import java.util.HashMap;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class Card_01_316_ErrataTests
{
protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException {
return new GenericCardTestHelper(
new HashMap<>() {{
put("talent", "51_316");
put("sam", "1_311");
put("merry", "1_302");
put("pippin", "1_307");
put("boromir", "1_97");
}}
);
}
@Test
public void TalentStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException {
/**
* Set: 1E
* Title: A Talent for Not Being Seen
* Side: Free Peoples
* Culture: Shire
* Twilight Cost: 0
* Type: Condition
* Errata Game Text: Stealth. Bearer must be Merry or Pippin. Limit 1 per character.
* Each site's Shadow number is -1.
*/
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
var talent = scn.GetFreepsCard("talent");
assertFalse(talent.getBlueprint().isUnique());
assertEquals(Side.FREE_PEOPLE, talent.getBlueprint().getSide());
assertEquals(Culture.SHIRE, talent.getBlueprint().getCulture());
assertEquals(CardType.CONDITION, talent.getBlueprint().getCardType());
assertEquals(0, talent.getBlueprint().getTwilightCost());
assertTrue(scn.HasKeyword(talent, Keyword.STEALTH));
assertFalse(scn.HasKeyword(talent, Keyword.SUPPORT_AREA));
}
@Test
public void TalentOnlyPlaysOnMerryOrPippin() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl frodo = scn.GetRingBearer();
PhysicalCardImpl sam = scn.GetFreepsCard("sam");
PhysicalCardImpl merry = scn.GetFreepsCard("merry");
PhysicalCardImpl pippin = scn.GetFreepsCard("pippin");
PhysicalCardImpl talent = scn.GetFreepsCard("talent");
scn.FreepsMoveCharToTable(sam);
scn.FreepsMoveCharToTable(merry);
scn.FreepsMoveCharToTable(pippin);
scn.FreepsMoveCardToHand(talent);
scn.StartGame();
scn.FreepsPlayCard(talent);
//There are 4 companions in play, but only 2 valid targets
assertEquals(2, scn.FreepsGetADParamAsList("cardId").size());
}
@Test
public void TalentReducesTwilightIfOnlyHobbits() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl frodo = scn.GetRingBearer();
PhysicalCardImpl merry = scn.GetFreepsCard("merry");
PhysicalCardImpl talent = scn.GetFreepsCard("talent");
scn.FreepsMoveCharToTable(merry);
scn.FreepsMoveCardToHand(talent);
scn.StartGame();
scn.FreepsPlayCard(talent);
scn.FreepsPassCurrentPhaseAction();
// 2 for Frodo/Merry, 1 for the site, -1 for Talent
assertEquals(2, scn.GetTwilight());
}
}