Unit tests for Above the Battlement

This commit is contained in:
Christian 'ketura' McCarty
2025-03-22 15:26:22 -05:00
parent 834261e163
commit da90aab1e4
4 changed files with 126 additions and 21 deletions

View File

@@ -3,13 +3,13 @@ package com.gempukku.lotro.logic.decisions;
import java.util.Map;
public interface AwaitingDecision {
public int getAwaitingDecisionId();
int getAwaitingDecisionId();
public String getText();
String getText();
public AwaitingDecisionType getDecisionType();
AwaitingDecisionType getDecisionType();
public Map<String, String[]> getDecisionParameters();
Map<String, String[]> getDecisionParameters();
public void decisionMade(String result) throws DecisionResultInvalidException;
void decisionMade(String result) throws DecisionResultInvalidException;
}

View File

@@ -23,7 +23,7 @@ public class PlayerPlaysPhaseActionsUntilPassesGameProcess implements GameProces
public void process(final LotroGame game) {
final List<Action> playableActions = game.getActionsEnvironment().getPhaseActions(_playerId);
if (playableActions.size() == 0 && game.shouldAutoPass(_playerId, game.getGameState().getCurrentPhase())) {
if (playableActions.isEmpty() && game.shouldAutoPass(_playerId, game.getGameState().getCurrentPhase())) {
playerPassed();
} else {
game.getUserFeedback().sendAwaitingDecision(_playerId,

View File

@@ -334,6 +334,8 @@ public class GenericCardTestHelper extends AbstractAtTest {
public List<String> ShadowGetBPChoices() { return GetADParamAsList(P2, "blueprintId"); }
public List<String> FreepsGetMultipleChoices() { return GetADParamAsList(P1, "results"); }
public List<String> ShadowGetMultipleChoices() { return GetADParamAsList(P2, "results"); }
public int FreepsGetChoiceCount() { return GetADParamAsList(P1, "results").size(); }
public int ShadowGetChoiceCount() { return GetADParamAsList(P2, "results").size(); }
public List<String> FreepsGetFreepsAssignmentTargets() { return GetADParamAsList(P1, "freeCharacters"); }
public List<String> FreepsGetShadowAssignmentTargets() { return GetADParamAsList(P1, "minions"); }

View File

@@ -1,10 +1,8 @@
package com.gempukku.lotro.cards.official.set07;
import com.gempukku.lotro.at.AbstractAtTest;
import com.gempukku.lotro.cards.GenericCardTestHelper;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.common.Timeword;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.game.CardNotFoundException;
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
import org.junit.Test;
@@ -20,8 +18,9 @@ public class Card_07_262_Tests
return new GenericCardTestHelper(
new HashMap<>()
{{
put("card", "7_262");
// put other cards in here as needed for the test case
put("battlements", "7_262");
put("pillager", "7_275");
put("assassin", "1_262");
}},
GenericCardTestHelper.FellowshipSites,
GenericCardTestHelper.FOTRFrodo,
@@ -41,12 +40,13 @@ public class Card_07_262_Tests
* Twilight Cost: 0
* Type: Event
* Subtype: Shadow
* Game Text: Play a besieger stacked on a site you control or remove a burden to play a [sauron] Orc from your discard pile.
* Game Text: Play a besieger stacked on a site you control or remove a burden
* to play a [sauron] Orc from your discard pile.
*/
var scn = GetScenario();
var card = scn.GetFreepsCard("card");
var card = scn.GetFreepsCard("battlements");
assertEquals("Above the Battlement", card.getBlueprint().getTitle());
assertNull(card.getBlueprint().getSubtitle());
@@ -58,18 +58,121 @@ public class Card_07_262_Tests
assertEquals(0, card.getBlueprint().getTwilightCost());
}
// Uncomment any @Test markers below once this is ready to be used
//@Test
public void AbovetheBattlementTest1() throws DecisionResultInvalidException, CardNotFoundException {
@Test
public void AbovetheBattlementCanRemoveABurdenToPlaySauronOrcFromDiscard() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
var scn = GetScenario();
var card = scn.GetFreepsCard("card");
scn.FreepsMoveCardToHand(card);
var site1 = scn.GetFreepsSite(1);
var pillager = scn.GetShadowCard("pillager");
var assassin = scn.GetShadowCard("assassin");
var battlements = scn.GetShadowCard("battlements");
scn.ShadowMoveCardToDiscard(assassin);
scn.ShadowMoveCardToHand(battlements);
scn.StartGame();
scn.FreepsPlayCard(card);
assertEquals(0, scn.GetTwilight());
scn.SkipToSite(2);
scn.FreepsPassCurrentPhaseAction();
scn.ShadowTakeControlOfSite();
assertTrue(scn.IsSiteControlled(site1));
scn.StackCardsOn(site1, pillager);
scn.SkipToSite(4);
scn.SetTwilight(20);
scn.FreepsPassCurrentPhaseAction();
assertTrue(scn.IsSiteControlled(site1));
assertEquals(AbstractAtTest.P2, site1.getCardController());
assertEquals(Zone.STACKED, pillager.getZone());
assertEquals(Zone.DISCARD, assassin.getZone());
assertEquals(1, scn.GetBurdens());
assertTrue(scn.ShadowPlayAvailable(battlements));
scn.ShadowPlayCard(battlements);
assertEquals(2, scn.ShadowGetChoiceCount());
scn.ShadowChooseMultipleChoiceOption("burden");
assertEquals(Zone.STACKED, pillager.getZone());
assertEquals(Zone.SHADOW_CHARACTERS, assassin.getZone());
assertEquals(0, scn.GetBurdens());
}
@Test
public void AbovetheBattlementCanRemoveABurdenToPlaySauronOrcFromDiscardWhenNoStackedOption() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
var scn = GetScenario();
var site1 = scn.GetFreepsSite(1);
var pillager = scn.GetShadowCard("pillager");
var assassin = scn.GetShadowCard("assassin");
var battlements = scn.GetShadowCard("battlements");
scn.ShadowMoveCardToDiscard(assassin);
scn.ShadowMoveCardToHand(battlements, pillager);
scn.StartGame();
scn.SkipToSite(2);
scn.FreepsPassCurrentPhaseAction();
scn.SkipToSite(4);
scn.SetTwilight(20);
scn.FreepsPassCurrentPhaseAction();
assertEquals(Zone.HAND, pillager.getZone());
assertEquals(Zone.DISCARD, assassin.getZone());
assertEquals(1, scn.GetBurdens());
assertTrue(scn.ShadowPlayAvailable(battlements));
scn.ShadowPlayCard(battlements);
assertEquals(Zone.HAND, pillager.getZone());
assertEquals(Zone.SHADOW_CHARACTERS, assassin.getZone());
assertEquals(0, scn.GetBurdens());
}
@Test
public void AbovetheBattlementCanPlayStackedBesiegerToPlaySauronOrcFromDiscard() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
var scn = GetScenario();
var site1 = scn.GetFreepsSite(1);
var pillager = scn.GetShadowCard("pillager");
var assassin = scn.GetShadowCard("assassin");
var battlements = scn.GetShadowCard("battlements");
scn.ShadowMoveCardToDiscard(assassin);
scn.ShadowMoveCardToHand(battlements);
scn.StartGame();
scn.SkipToSite(2);
scn.FreepsPassCurrentPhaseAction();
scn.ShadowTakeControlOfSite();
assertTrue(scn.IsSiteControlled(site1));
scn.StackCardsOn(site1, pillager);
scn.SkipToSite(4);
scn.SetTwilight(20);
scn.FreepsPassCurrentPhaseAction();
assertTrue(scn.IsSiteControlled(site1));
assertEquals(AbstractAtTest.P2, site1.getCardController());
assertEquals(Zone.STACKED, pillager.getZone());
assertEquals(Zone.DISCARD, assassin.getZone());
assertEquals(1, scn.GetBurdens());
assertTrue(scn.ShadowPlayAvailable(battlements));
scn.ShadowPlayCard(battlements);
assertEquals(2, scn.ShadowGetChoiceCount());
scn.ShadowChooseMultipleChoiceOption("play");
assertEquals(Zone.SHADOW_CHARACTERS, pillager.getZone());
assertEquals(Zone.SHADOW_CHARACTERS, assassin.getZone());
assertEquals(1, scn.GetBurdens());
}
}