Adding Gimli, Dwarf of the Mountain-race errata / tests

This commit is contained in:
Christian 'ketura' McCarty
2021-02-03 23:21:47 -06:00
parent fa39f01564
commit 169aa49dd2
4 changed files with 172 additions and 10 deletions

View File

@@ -536,4 +536,74 @@
]
},
"21_20121":
{
"title": "*Gimli",
"subtitle": "Dwarf of the Mountain-race",
"culture": "dwarven",
"cost": 2,
"type": "companion",
"race": "dwarf",
"strength": 6,
"vitality": 3,
"resistance": 6,
"signet": "frodo",
"keyword": "damage+1",
"effects": [
{
"type": "modifier",
"modifier": {
"type": "addKeyword",
"filter": "self",
"keyword": "concealed",
"condition": {
"type": "location",
"filter": "underground"
}
},
},
{
"type": "trigger",
"optional": true,
"trigger": {
"type": "movesTo",
"filter": "underground",
},
"cost": {
"type": "exert",
"filter": "self"
},
"effect": {
"type": "addKeyword",
"filter": "choose(another,companion)",
"keyword": "concealed",
"until": "start(regroup)"
}
},
{
"type": "trigger",
"optional": true,
"trigger": {
"type": "movesFrom",
"filter": "underground",
},
"cost": {
"type": "exert",
"filter": "self"
},
"effect": {
"type": "addKeyword",
"filter": "choose(another,companion)",
"keyword": "concealed",
"until": "start(regroup)"
}
}
]
},
}

View File

@@ -61,4 +61,5 @@ var set21 = {
'21_2075': 'https://i.lotrtcgpc.net/errata/FOTR/22_75.jpg',
'21_3042': 'https://i.lotrtcgpc.net/errata/FOTR/23_42.jpg',
'21_3068': 'https://i.lotrtcgpc.net/errata/FOTR/23_68.jpg',
'21_20121': 'https://i.lotrtcgpc.net/errata/FOTR/22_121.jpg'
}

View File

@@ -259,10 +259,9 @@ public class GenericCardTest extends AbstractAtTest {
public int GetTwilight() { return _game.getGameState().getTwilightPool(); }
public void SetTwilight(int amount) { _game.getGameState().setTwilight(amount); }
public PhysicalCardImpl GetRingBearer()
{
return (PhysicalCardImpl)_game.getGameState().getRingBearer(P1);
}
public PhysicalCardImpl GetRingBearer() { return (PhysicalCardImpl)_game.getGameState().getRingBearer(P1); }
public PhysicalCardImpl GetCurrentSite() { return (PhysicalCardImpl)_game.getGameState().getCurrentSite(); }
public void SkipToPhase(Phase target) throws DecisionResultInvalidException {
for(int attempts = 1; attempts <= 20; attempts++)
@@ -360,12 +359,10 @@ public class GenericCardTest extends AbstractAtTest {
_game.getModifiersEnvironment().addUntilEndOfTurnModifier(mod);
}
public void FreepsChooseToMove() throws DecisionResultInvalidException {
playerDecided(P1, "0");
}
public void FreepsChooseToMove() throws DecisionResultInvalidException { playerDecided(P1, "0"); }
public void FreepsChooseToStay() throws DecisionResultInvalidException { playerDecided(P1, "1"); }
public void FreepsChooseToStay() throws DecisionResultInvalidException {
playerDecided(P1, "1");
}
public void FreepsActivateOptionalTrigger() throws DecisionResultInvalidException { playerDecided(P1, "0"); }
public void ShadowActivateOptionalTrigger() throws DecisionResultInvalidException { playerDecided(P2, "0"); }
}

View File

@@ -0,0 +1,94 @@
package com.gempukku.lotro.cards.unofficial.pc.errata;
import com.gempukku.lotro.cards.GenericCardTest;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Phase;
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 org.junit.Test;
import java.util.HashMap;
import static junit.framework.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class Gimli_DotMrErrataTest
{
protected GenericCardTest GetScenario() throws CardNotFoundException, DecisionResultInvalidException {
return new GenericCardTest(
new HashMap<String, String>()
{{
put("gimli", "21_20121");
}}
);
}
@Test
public void GimliHasDamage() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTest scn = GetScenario();
PhysicalCardImpl gimli = scn.GetFreepsCard("gimli");
assertTrue(scn.HasKeyword(gimli, Keyword.DAMAGE));
}
@Test
public void GimliHasConcealedOnlyWhileUnderground() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTest scn = GetScenario();
PhysicalCardImpl gimli = scn.GetFreepsCard("gimli");
scn.FreepsMoveCharToTable(gimli);
scn.StartGame();
assertFalse(scn.HasKeyword(gimli, Keyword.CONCEALED));
scn.InsertAdHocModifier(new KeywordModifier(null, Filters.siteNumber(2), Keyword.UNDERGROUND));
scn.FreepsSkipCurrentPhaseAction();
assertTrue(scn.HasKeyword(gimli, Keyword.CONCEALED));
}
@Test
public void GimliAbilityTriggersMovingFromAndTo() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTest scn = GetScenario();
PhysicalCardImpl frodo = scn.GetRingBearer();
PhysicalCardImpl gimli = scn.GetFreepsCard("gimli");
scn.FreepsMoveCharToTable(gimli);
scn.StartGame();
scn.InsertAdHocModifier(new KeywordModifier(null, Filters.siteNumber(2), Keyword.UNDERGROUND));
scn.FreepsSkipCurrentPhaseAction();
assertTrue(scn.FreepsActionAvailable("Optional"));
scn.FreepsActivateOptionalTrigger();
assertEquals(1, scn.GetWoundsOn(gimli));
assertTrue(scn.HasKeyword(frodo, Keyword.CONCEALED));
scn.SkipToPhase(Phase.REGROUP);
scn.SkipCurrentPhaseActions();
scn.ShadowSkipCurrentPhaseAction();
assertFalse(scn.HasKeyword(frodo, Keyword.CONCEALED));
scn.FreepsChooseToMove();
assertTrue(scn.FreepsActionAvailable("Optional"));
scn.FreepsActivateOptionalTrigger();
assertEquals(2, scn.GetWoundsOn(gimli));
assertTrue(scn.HasKeyword(frodo, Keyword.CONCEALED));
}
}