From 0cd76e2cb7821917a41357058d47e357a3906af8 Mon Sep 17 00:00:00 2001 From: Marcin Sciesinski Date: Thu, 17 Oct 2024 03:07:01 +0700 Subject: [PATCH] Added more ATs --- .../requirement/CanSpotCultureTokens.java | 2 +- .../com/gempukku/lotro/at/AbstractAtTest.java | 18 +- .../gempukku/lotro/at/RequirementsAtTest.java | 197 +++++++++++++++++- 3 files changed, 209 insertions(+), 8 deletions(-) diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanSpotCultureTokens.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanSpotCultureTokens.java index cd6335d5a..26d481d1a 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanSpotCultureTokens.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanSpotCultureTokens.java @@ -20,7 +20,7 @@ public class CanSpotCultureTokens implements RequirementProducer { final int count = FieldUtils.getInteger(object.get("amount"), "amount", 1); final String filter = FieldUtils.getString(object.get("filter"), "filter", "any"); final Culture culture = FieldUtils.getEnum(Culture.class, object.get("culture"), "culture"); - final Token tokenForCulture = Token.findTokenForCulture(culture); + final Token tokenForCulture = culture != null ? Token.findTokenForCulture(culture) : null; final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment); diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/AbstractAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/AbstractAtTest.java index 40e2029d8..33c1d0059 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/AbstractAtTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/AbstractAtTest.java @@ -1,9 +1,6 @@ package com.gempukku.lotro.at; -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.Phase; -import com.gempukku.lotro.common.Token; -import com.gempukku.lotro.common.Zone; +import com.gempukku.lotro.common.*; import com.gempukku.lotro.game.*; import com.gempukku.lotro.game.formats.LotroFormatLibrary; import com.gempukku.lotro.logic.actions.SystemQueueAction; @@ -13,6 +10,7 @@ import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.DefaultLotroGame; import com.gempukku.lotro.logic.timing.Effect; +import com.gempukku.lotro.logic.timing.RuleUtils; import com.gempukku.lotro.logic.vo.LotroDeck; import com.gempukku.lotro.packs.ProductLibrary; import org.apache.commons.lang3.StringUtils; @@ -41,8 +39,12 @@ public abstract class AbstractAtTest { return (PhysicalCardImpl) _game.getGameState().createPhysicalCard(owner, _cardLibrary, blueprintId); } - public void addCultureTokens(PhysicalCard elvenDefender, Token token, int count) { - _game.getGameState().addTokens(elvenDefender, token, count); + public void addCultureTokens(PhysicalCard card, Token token, int count) { + _game.getGameState().addTokens(card, token, count); + } + + public int getArcheryTotal(Side side) { + return RuleUtils.calculateArcheryTotal(_game, side); } public PhysicalCard getRingBearer(String player) { @@ -150,6 +152,10 @@ public abstract class AbstractAtTest { return _game.getGameState().getBurdens(); } + public void addBurdens(int count) { + _game.getGameState().addBurdens(count); + } + public void removeBurdens(int count) { _game.getGameState().removeBurdens(count); } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/RequirementsAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/RequirementsAtTest.java index 5cec2c502..b067589f0 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/RequirementsAtTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/RequirementsAtTest.java @@ -1,14 +1,22 @@ package com.gempukku.lotro.at; +import com.gempukku.lotro.cards.build.DefaultActionContext; +import com.gempukku.lotro.cards.build.LotroCardBlueprintBuilder; +import com.gempukku.lotro.cards.build.Requirement; +import com.gempukku.lotro.cards.build.field.effect.requirement.*; import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.common.Side; import com.gempukku.lotro.common.Token; import com.gempukku.lotro.common.Zone; import com.gempukku.lotro.game.PhysicalCard; +import org.json.simple.JSONObject; import org.junit.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.*; public class RequirementsAtTest extends AbstractAtTest { + private LotroCardBlueprintBuilder lotroCardBlueprintBuilder = new LotroCardBlueprintBuilder(); + @Test public void canSpotCultureTokens() throws Exception { initializeSimplestGame(); @@ -20,4 +28,191 @@ public class RequirementsAtTest extends AbstractAtTest { addCultureTokens(elvenDefender, Token.ELVEN, 1); assertEquals(7, getStrength(elvenDefender)); } + + @Test + public void canSpotAnyCultureTokens() throws Exception { + initializeSimplestGame(); + + PhysicalCard cruelDunlending = addToZone(createCard(P2, "13_85"), Zone.SHADOW_CHARACTERS); + PhysicalCard desertWind = addToZone(createCard(P2, "13_86"), Zone.HAND); + + passUntil(Phase.FELLOWSHIP); + setTwilightPool(10); + passUntil(Phase.SHADOW); + selectCardAction(P2, desertWind); + + passUntil(Phase.ARCHERY); + assertEquals(0, getArcheryTotal(Side.SHADOW)); + addCultureTokens(desertWind, Token.MEN, 5); + assertEquals(2, getArcheryTotal(Side.SHADOW)); + } + + @Test + public void cantSpotBurdens() throws Exception { + initializeSimplestGame(); + + passUntil(Phase.FELLOWSHIP); + + JSONObject obj = new JSONObject(); + obj.put("amount", 2); + Requirement requirement = new CantSpotBurdens().getPlayRequirement(obj, lotroCardBlueprintBuilder); + + DefaultActionContext actionContext = new DefaultActionContext(P1, _game, null, null, null); + assertTrue(requirement.accepts(actionContext)); + addBurdens(1); + assertFalse(requirement.accepts(actionContext)); + } + + @Test + public void cantSpotThreats() throws Exception { + initializeSimplestGame(); + + passUntil(Phase.FELLOWSHIP); + + JSONObject obj = new JSONObject(); + obj.put("amount", 2); + Requirement requirement = new CantSpotThreats().getPlayRequirement(obj, lotroCardBlueprintBuilder); + + DefaultActionContext actionContext = new DefaultActionContext(P1, _game, null, null, null); + assertTrue(requirement.accepts(actionContext)); + addThreats(P1, 2); + assertFalse(requirement.accepts(actionContext)); + } + + @Test + public void cardsInDeckCount() throws Exception { + initializeSimplestGame(); + + passUntil(Phase.FELLOWSHIP); + + JSONObject obj = new JSONObject(); + obj.put("deck", "fp"); + obj.put("count", 1); + + Requirement requirement = new CardsInDeckCount().getPlayRequirement(obj, lotroCardBlueprintBuilder); + DefaultActionContext actionContext = new DefaultActionContext(P1, _game, null, null, null); + assertFalse(requirement.accepts(actionContext)); + putOnTopOfDeck(createCard(P1, "1_3")); + assertTrue(requirement.accepts(actionContext)); + } + + @Test + public void isAhead() throws Exception { + initializeSimplestGame(); + + passUntil(Phase.FELLOWSHIP); + + Requirement requirement = new IsAhead().getPlayRequirement(new JSONObject(), lotroCardBlueprintBuilder); + DefaultActionContext actionContext = new DefaultActionContext(P1, _game, null, null, null); + assertFalse(requirement.accepts(actionContext)); + passUntil(Phase.SHADOW); + assertTrue(requirement.accepts(actionContext)); + } + + @Test + public void isEqual() throws Exception { + initializeSimplestGame(); + + passUntil(Phase.FELLOWSHIP); + + JSONObject obj = new JSONObject(); + obj.put("firstNumber", 2); + obj.put("secondNumber", "burdenCount"); + + Requirement requirement = new IsEqual().getPlayRequirement(obj, lotroCardBlueprintBuilder); + DefaultActionContext actionContext = new DefaultActionContext(P1, _game, null, null, null); + assertFalse(requirement.accepts(actionContext)); + addBurdens(1); + assertTrue(requirement.accepts(actionContext)); + } + + @Test + public void isGreaterThan() throws Exception { + initializeSimplestGame(); + + passUntil(Phase.FELLOWSHIP); + + JSONObject obj = new JSONObject(); + obj.put("firstNumber", 2); + obj.put("secondNumber", "burdenCount"); + + Requirement requirement = new IsGreaterThan().getPlayRequirement(obj, lotroCardBlueprintBuilder); + DefaultActionContext actionContext = new DefaultActionContext(P1, _game, null, null, null); + assertTrue(requirement.accepts(actionContext)); + addBurdens(1); + assertFalse(requirement.accepts(actionContext)); + } + + @Test + public void isGreaterThanOrEqual() throws Exception { + initializeSimplestGame(); + + passUntil(Phase.FELLOWSHIP); + + JSONObject obj = new JSONObject(); + obj.put("firstNumber", 2); + obj.put("secondNumber", "burdenCount"); + + Requirement requirement = new IsGreaterThanOrEqual().getPlayRequirement(obj, lotroCardBlueprintBuilder); + DefaultActionContext actionContext = new DefaultActionContext(P1, _game, null, null, null); + assertTrue(requirement.accepts(actionContext)); + addBurdens(1); + assertTrue(requirement.accepts(actionContext)); + addBurdens(1); + assertFalse(requirement.accepts(actionContext)); + } + + @Test + public void isLessThan() throws Exception { + initializeSimplestGame(); + + passUntil(Phase.FELLOWSHIP); + + JSONObject obj = new JSONObject(); + obj.put("firstNumber", 2); + obj.put("secondNumber", "burdenCount"); + + Requirement requirement = new IsLessThan().getPlayRequirement(obj, lotroCardBlueprintBuilder); + DefaultActionContext actionContext = new DefaultActionContext(P1, _game, null, null, null); + assertFalse(requirement.accepts(actionContext)); + addBurdens(1); + assertFalse(requirement.accepts(actionContext)); + addBurdens(1); + assertTrue(requirement.accepts(actionContext)); + } + + @Test + public void isLessThanOrEqual() throws Exception { + initializeSimplestGame(); + + passUntil(Phase.FELLOWSHIP); + + JSONObject obj = new JSONObject(); + obj.put("firstNumber", 2); + obj.put("secondNumber", "burdenCount"); + + Requirement requirement = new IsLessThanOrEqual().getPlayRequirement(obj, lotroCardBlueprintBuilder); + DefaultActionContext actionContext = new DefaultActionContext(P1, _game, null, null, null); + assertFalse(requirement.accepts(actionContext)); + addBurdens(1); + assertTrue(requirement.accepts(actionContext)); + addBurdens(1); + assertTrue(requirement.accepts(actionContext)); + } + + @Test + public void isOwner() throws Exception { + initializeSimplestGame(); + + passUntil(Phase.FELLOWSHIP); + + JSONObject obj = new JSONObject(); + + PhysicalCard ownerByP1 = createCard(P1, "1_3"); + PhysicalCard ownerByP2 = createCard(P2, "1_3"); + + Requirement requirement = new IsOwnerRequirementProducer().getPlayRequirement(obj, lotroCardBlueprintBuilder); + assertTrue(requirement.accepts(new DefaultActionContext(P1, _game, ownerByP1, null, null))); + assertFalse(requirement.accepts(new DefaultActionContext(P1, _game, ownerByP2, null, null))); + } }