From 6854cd5bcc24dfd6f828359434d10876aff85547 Mon Sep 17 00:00:00 2001 From: Marcin Sciesinski Date: Thu, 17 Oct 2024 21:30:56 +0700 Subject: [PATCH] Added more ATs --- .../field/effect/appender/PreventExert.java | 50 ---------- .../field/effect/filter/FilterFactory.java | 31 ++++--- .../com/gempukku/lotro/at/AbstractAtTest.java | 8 ++ .../gempukku/lotro/at/AssignmentAtTest.java | 24 +++++ .../com/gempukku/lotro/at/ChooseAtTest.java | 92 +++++++++++++++++++ .../lotro/at/ConcealedExposedAtTest.java | 45 +++++++++ .../com/gempukku/lotro/at/EventAtTest.java | 45 +++++++++ .../lotro/at/IndividualCardAtTest.java | 41 ++++++++- .../gempukku/lotro/at/ModifiersAtTest.java | 15 +++ .../lotro/at/effects/DrawEffectAtTest.java | 41 ++++++++- .../lotro/at/effects/WoundEffectAtTest.java | 29 ++++++ 11 files changed, 353 insertions(+), 68 deletions(-) delete mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PreventExert.java create mode 100644 gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/ChooseAtTest.java create mode 100644 gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/EventAtTest.java diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PreventExert.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PreventExert.java deleted file mode 100644 index d79704b43..000000000 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PreventExert.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.gempukku.lotro.cards.build.field.effect.appender; - -import com.gempukku.lotro.cards.build.ActionContext; -import com.gempukku.lotro.cards.build.CardGenerationEnvironment; -import com.gempukku.lotro.cards.build.InvalidCardDefinitionException; -import com.gempukku.lotro.cards.build.field.FieldUtils; -import com.gempukku.lotro.cards.build.field.effect.EffectAppender; -import com.gempukku.lotro.cards.build.field.effect.EffectAppenderProducer; -import com.gempukku.lotro.cards.build.field.effect.appender.resolver.CardResolver; -import com.gempukku.lotro.filters.Filters; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.logic.actions.CostToEffectAction; -import com.gempukku.lotro.logic.effects.PreventCardEffect; -import com.gempukku.lotro.logic.effects.PreventableCardEffect; -import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator; -import com.gempukku.lotro.logic.timing.Effect; -import org.json.simple.JSONObject; - -import java.util.Collection; - -public class PreventExert implements EffectAppenderProducer { - @Override - public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(effectObject, "select"); - - final String select = FieldUtils.getString(effectObject.get("select"), "select", "all(any)"); - - MultiEffectAppender result = new MultiEffectAppender(); - - result.addEffectAppender( - CardResolver.resolveCards(select, - (actionContext) -> { - final PreventableCardEffect preventableEffect = (PreventableCardEffect) actionContext.getEffect(); - return Filters.in(preventableEffect.getAffectedCardsMinusPrevented(actionContext.getGame())); - }, actionContext -> new ConstantEvaluator(1), "_temp", "you", "Choose characters to prevent effect to", environment)); - result.addEffectAppender( - new DelayedAppender() { - @Override - protected Effect createEffect(boolean cost, CostToEffectAction action, ActionContext actionContext) { - final Collection cards = actionContext.getCardsFromMemory("_temp"); - final PreventableCardEffect preventableEffect = (PreventableCardEffect) actionContext.getEffect(); - - return new PreventCardEffect(preventableEffect, Filters.in(cards)); - } - }); - - return result; - } - -} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java index 755119dd3..47c3e31e6 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java @@ -152,25 +152,31 @@ public class FilterFactory { return lostSkirmish.getLoser(); }); simpleFilters.put("storedculture", - (actionContext) -> { + (actionContext) -> (Filter) (game, physicalCard) -> { PhysicalCard.WhileInZoneData data = actionContext.getSource().getWhileInZoneData(); - if (data == null) - return Filters.none; - return Culture.valueOf(data.getValue()); + if (data != null) { + return physicalCard.getBlueprint().getCulture() == Culture.findCultureByHumanReadable(data.getHumanReadable()); + } + return false; }); simpleFilters.put("storedkeyword", - (actionContext) -> { + (actionContext) -> (Filter) (game, physicalCard) -> { PhysicalCard.WhileInZoneData data = actionContext.getSource().getWhileInZoneData(); - if (data == null) - return Filters.none; - return Keyword.valueOf(data.getValue()); + if (data != null) { + Keyword keyword = Keyword.valueOf(data.getValue()); + if (keyword != null) { + return game.getModifiersQuerying().hasKeyword(game, physicalCard, keyword); + } + } + return false; }); simpleFilters.put("storedtitle", - (actionContext) -> { + (actionContext) -> (Filter) (game, physicalCard) -> { PhysicalCard.WhileInZoneData data = actionContext.getSource().getWhileInZoneData(); - if (data == null) - return Filters.none; - return Filters.name(data.getValue()); + if (data != null) { + return physicalCard.getBlueprint().getTitle().equals(data.getValue()); + } + return false; }); simpleFilters.put("unbound", (actionContext) -> Filters.unboundCompanion); @@ -182,7 +188,6 @@ public class FilterFactory { simpleFilters.put("wounded", (actionContext) -> Filters.wounded); simpleFilters.put("your", (actionContext) -> Filters.owner(actionContext.getPerformingPlayer())); - parameterFilters.put("and", (parameter, environment) -> { final String[] filters = splitIntoFilters(parameter); 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 b958e8a72..2392d321e 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 @@ -68,6 +68,10 @@ public abstract class AbstractAtTest { return _game.getGameState().getRing(player); } + public PhysicalCard getSite(int siteNumber) { + return _game.getGameState().getSite(siteNumber); + } + public PhysicalCard addToZone(PhysicalCard card, Zone zone) { _game.getGameState().addCardToZone(_game, card, zone); return card; @@ -191,6 +195,10 @@ public abstract class AbstractAtTest { return _game.getModifiersQuerying().getStrength(_game, card); } + public int getResistance(PhysicalCard card) { + return _game.getModifiersQuerying().getResistance(_game, card); + } + public void initializeSimplestGame() throws DecisionResultInvalidException { this.initializeSimplestGame(null); } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/AssignmentAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/AssignmentAtTest.java index 7db530179..1d2248c74 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/AssignmentAtTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/AssignmentAtTest.java @@ -648,4 +648,28 @@ public class AssignmentAtTest extends AbstractAtTest { selectNo(P1); validateContents(new String[]{String.valueOf(attea.getCardId())}, getAwaitingDecision(P1).getDecisionParameters().get("minions")); } + + @Test + public void toldeaDarkShadowCantBeAssignedTwiceToSameCompanion() throws Exception { + initializeSimplestGame(); + + PhysicalCard toldeaDarkShadow = addToZone(createCard(P2, "19_39"), Zone.SHADOW_CHARACTERS); + PhysicalCard aragorn = addToZone(createCard(P1, "1_89"), Zone.FREE_CHARACTERS); + + passUntil(Phase.ASSIGNMENT); + pass(P1); + pass(P2); + playerDecided(P1, aragorn.getCardId() + " " + toldeaDarkShadow.getCardId()); + selectCard(P1, aragorn); + pass(P1); + pass(P2); + // Fierce assignment + pass(P1); + pass(P2); + try { + playerDecided(P1, aragorn.getCardId() + " " + toldeaDarkShadow.getCardId()); + fail(); + } catch (DecisionResultInvalidException e) { + } + } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/ChooseAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/ChooseAtTest.java new file mode 100644 index 000000000..c4ba29d9a --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/ChooseAtTest.java @@ -0,0 +1,92 @@ +package com.gempukku.lotro.at; + +import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.common.Zone; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.logic.decisions.AwaitingDecision; +import com.gempukku.lotro.logic.decisions.AwaitingDecisionType; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class ChooseAtTest extends AbstractAtTest { + @Test + public void chooseHowManyBurdensToSpot() throws Exception { + initializeSimplestGame(); + + PhysicalCard enduringEvil = addToZone(createCard(P2, "1_246"), Zone.HAND); + PhysicalCard orgInquisitor = addToZone(createCard(P2, "1_268"), Zone.SHADOW_CHARACTERS); + + PhysicalCard ringBearer = getRingBearer(P1); + + passUntil(Phase.ASSIGNMENT); + pass(P1); + pass(P2); + playerDecided(P1, ringBearer.getCardId() + " " + orgInquisitor.getCardId()); + selectCard(P1, ringBearer); + pass(P1); + selectCardAction(P2, enduringEvil); + AwaitingDecision awaitingDecision = getAwaitingDecision(P2); + assertEquals(AwaitingDecisionType.INTEGER, awaitingDecision.getDecisionType()); + validateContents(new String[]{"0"}, awaitingDecision.getDecisionParameters().get("min")); + validateContents(new String[]{"1"}, awaitingDecision.getDecisionParameters().get("max")); + playerDecided(P2, "1"); + } + + @Test + public void chooseHowManyFPCulturesToSpot() throws Exception { + initializeSimplestGame(); + + PhysicalCard mercilessBerserker = addToZone(createCard(P2, "15_165"), Zone.SHADOW_CHARACTERS); + + passUntil(Phase.SHADOW); + selectCardAction(P2, mercilessBerserker); + AwaitingDecision awaitingDecision = getAwaitingDecision(P2); + assertEquals(AwaitingDecisionType.INTEGER, awaitingDecision.getDecisionType()); + validateContents(new String[]{"0"}, awaitingDecision.getDecisionParameters().get("min")); + validateContents(new String[]{"1"}, awaitingDecision.getDecisionParameters().get("max")); + playerDecided(P2, "1"); + } + + @Test + public void chooseHowManyThreatsToSpot() throws Exception { + initializeSimplestGame(); + + PhysicalCard gollum = addToZone(createCard(P2, "7_58"), Zone.DISCARD); + PhysicalCard soPolite = addToZone(createCard(P2, "7_74"), Zone.HAND); + + addThreats(P1, 1); + + passUntil(Phase.FELLOWSHIP); + setTwilightPool(10); + + passUntil(Phase.SHADOW); + selectCardAction(P2, soPolite); + AwaitingDecision awaitingDecision = getAwaitingDecision(P2); + assertEquals(AwaitingDecisionType.INTEGER, awaitingDecision.getDecisionType()); + validateContents(new String[]{"0"}, awaitingDecision.getDecisionParameters().get("min")); + validateContents(new String[]{"1"}, awaitingDecision.getDecisionParameters().get("max")); + playerDecided(P2, "1"); + } + + @Test + public void chooseHowManyTwilightTokensToSpot() throws Exception { + initializeSimplestGame(); + + PhysicalCard underTheLivingEarth = addToZone(createCard(P1, "4_105"), Zone.HAND); + PhysicalCard gandalf = addToZone(createCard(P1, "1_72"), Zone.FREE_CHARACTERS); + PhysicalCard goblinRunner = addToZone(createCard(P2, "1_178"), Zone.SHADOW_CHARACTERS); + + passUntil(Phase.ASSIGNMENT); + pass(P1); + pass(P2); + playerDecided(P1, gandalf.getCardId() + " " + goblinRunner.getCardId()); + selectCard(P1, gandalf); + selectCardAction(P1, underTheLivingEarth); + AwaitingDecision awaitingDecision = getAwaitingDecision(P1); + assertEquals(AwaitingDecisionType.INTEGER, awaitingDecision.getDecisionType()); + validateContents(new String[]{"0"}, awaitingDecision.getDecisionParameters().get("min")); + validateContents(new String[]{"4"}, awaitingDecision.getDecisionParameters().get("max")); + playerDecided(P1, "4"); + } +} diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/ConcealedExposedAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/ConcealedExposedAtTest.java index fb52dd20c..89fc958d1 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/ConcealedExposedAtTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/ConcealedExposedAtTest.java @@ -3,8 +3,12 @@ package com.gempukku.lotro.at; import com.gempukku.lotro.cards.GenericCardTestHelper; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Keyword; +import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.common.Zone; import com.gempukku.lotro.game.CardNotFoundException; +import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCardImpl; +import com.gempukku.lotro.logic.decisions.AwaitingDecisionType; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; import com.gempukku.lotro.logic.modifiers.AddKeywordModifier; import org.junit.Test; @@ -115,4 +119,45 @@ public class ConcealedExposedAtTest extends AbstractAtTest { //4 from playing aragorn, 1 for the ring-bearer, 1 for aragorn, 1 for the site (King's Tent), 0 for exposed concealed assertEquals(7, scn.GetTwilight()); } + + @Test + public void lookAtHand() throws Exception { + initializeSimplestGame(); + + PhysicalCard goblinMan = addToZone(createCard(P2, "2_42"), Zone.SHADOW_CHARACTERS); + PhysicalCard goblinManInHand = addToZone(createCard(P1, "2_42"), Zone.HAND); + + passUntil(Phase.SHADOW); + selectCardAction(P2, goblinMan); + assertEquals(AwaitingDecisionType.ARBITRARY_CARDS, getAwaitingDecision(P2).getDecisionType()); + } + + @Test + public void lookAtRandomCardsFromHand() throws Exception { + initializeSimplestGame(); + + PhysicalCard goblinMan = addToZone(createCard(P2, "2_42"), Zone.SHADOW_CHARACTERS); + PhysicalCard galadriel = addToZone(createCard(P1, "1_45"), Zone.SUPPORT); + PhysicalCard mirrorOfGaladriel = addToZone(createCard(P1, "1_55"), Zone.SUPPORT); + + for (int i = 0; i < 7; i++) { + addToZone(createCard(P2, "2_42"), Zone.HAND); + } + + passUntil(Phase.MANEUVER); + selectCardAction(P1, mirrorOfGaladriel); + assertEquals(AwaitingDecisionType.ARBITRARY_CARDS, getAwaitingDecision(P1).getDecisionType()); + } + + @Test + public void lookAtTopCardsOfDrawDeck() throws Exception { + initializeSimplestGame(); + + PhysicalCard gandalf = addToZone(createCard(P1, "1_364"), Zone.FREE_CHARACTERS); + PhysicalCard questionsThatNeedAnswering = addToZone(createCard(P1, "1_81"), Zone.HAND); + + passUntil(Phase.FELLOWSHIP); + selectCardAction(P1, questionsThatNeedAnswering); + assertEquals(AwaitingDecisionType.ARBITRARY_CARDS, getAwaitingDecision(P1).getDecisionType()); + } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/EventAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/EventAtTest.java new file mode 100644 index 000000000..3f5f1973e --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/EventAtTest.java @@ -0,0 +1,45 @@ +package com.gempukku.lotro.at; + +import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.common.Zone; +import com.gempukku.lotro.game.PhysicalCard; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +public class EventAtTest extends AbstractAtTest { + @Test + public void cancelEvent() throws Exception { + initializeSimplestGame(); + + PhysicalCard aragorn = addToZone(createCard(P1, "1_89"), Zone.FREE_CHARACTERS); + PhysicalCard goblinRunner = addToZone(createCard(P2, "1_178"), Zone.SHADOW_CHARACTERS); + PhysicalCard strengthOfKings = addToZone(createCard(P1, "1_115"), Zone.HAND); + PhysicalCard unfamiliarTerritory = addToZone(createCard(P2, "1_201"), Zone.HAND); + + passUntil(Phase.ASSIGNMENT); + pass(P1); + pass(P2); + playerDecided(P1, aragorn.getCardId() + " " + goblinRunner.getCardId()); + selectCard(P1, aragorn); + pass(P1); + assertEquals(5, getStrength(goblinRunner)); + selectCardAction(P2, unfamiliarTerritory); + selectCardAction(P1, strengthOfKings); + assertEquals(5, getStrength(goblinRunner)); + } + + @Test + public void canPlayNextAction() throws Exception { + initializeSimplestGame(); + + PhysicalCard gimli = addToZone(createCard(P1, "5_7"), Zone.FREE_CHARACTERS); + PhysicalCard barukKhazad = addToZone(createCard(P1, "5_5"), Zone.HAND); + PhysicalCard goblinRunner = addToZone(createCard(P2, "1_178"), Zone.SHADOW_CHARACTERS); + + passUntil(Phase.MANEUVER); + selectCardAction(P1, barukKhazad); + assertNotNull(getAwaitingDecision(P1)); + } +} diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java index 19a4dddad..a8ad8e69f 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java @@ -17,10 +17,6 @@ import java.util.*; import static org.junit.Assert.*; public class IndividualCardAtTest extends AbstractAtTest { - - - - @Test public void bilboRingBearerWithConsortingAndMorgulBrute() throws DecisionResultInvalidException, CardNotFoundException { Map decks = new HashMap<>(); @@ -1284,4 +1280,41 @@ public class IndividualCardAtTest extends AbstractAtTest { assertEquals(Zone.DISCARD, morgulBlade.getZone()); assertEquals(Zone.ATTACHED, bladeTip.getZone()); } + + @Test + public void sarumanOfManyColors() throws Exception { + initializeSimplestGame(); + + PhysicalCard sarumanOfManyColors = addToZone(createCard(P2, "12_54"), Zone.HAND); + + PhysicalCard ringBearer = getRingBearer(P1); + + passUntil(Phase.FELLOWSHIP); + setTwilightPool(10); + passUntil(Phase.SHADOW); + assertEquals(4, getStrength(ringBearer)); + selectCardAction(P2, sarumanOfManyColors); + playerDecided(P2, getMultipleDecisionIndex(getAwaitingDecision(P2), "Shire")); + assertEquals(3, getStrength(ringBearer)); + } + + @Test + public void putForthItsStrength() throws Exception { + initializeSimplestGame(); + + PhysicalCard putForthHisStrength = addToZone(createCard(P2, "7_205"), Zone.SUPPORT); + PhysicalCard attea = addToZone(createCard(P2, "1_229"), Zone.SHADOW_CHARACTERS); + for (int i = 0; i < 3; i++) { + addToZone(createCard(P1, "1_12"), Zone.DEAD); + } + + passUntil(Phase.FELLOWSHIP); + addBurdens(3); + addThreats(P1, 3); + + passUntil(Phase.SHADOW); + selectCardAction(P2, putForthHisStrength); + assertTrue(_game.isFinished()); + assertEquals(P2, _game.getWinnerPlayerId()); + } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/ModifiersAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/ModifiersAtTest.java index 1d742bfe7..161c8af25 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/ModifiersAtTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/ModifiersAtTest.java @@ -377,4 +377,19 @@ public class ModifiersAtTest extends AbstractAtTest { addModifier(modifierSource.getModifier(actionContext)); assertTrue(Filters.assignableToSkirmish(Side.FREE_PEOPLE, false, false).accepts(_game, birchseed)); } + + @Test + public void modifyResistance() throws Exception { + initializeSimplestGame(); + + PhysicalCard ringBearer = getRingBearer(P1); + PhysicalCard stingWeaponOfHeritage = attachTo(createCard(P1, "11_173"), ringBearer); + PhysicalCard gimli = addToZone(createCard(P1, "5_7"), Zone.FREE_CHARACTERS); + PhysicalCard goblinRunner = addToZone(createCard(P2, "1_178"), Zone.SHADOW_CHARACTERS); + + passUntil(Phase.MANEUVER); + assertEquals(5, getResistance(gimli)); + selectCardAction(P1, stingWeaponOfHeritage); + assertEquals(7, getResistance(gimli)); + } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/DrawEffectAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/DrawEffectAtTest.java index e1239da00..2793c49fa 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/DrawEffectAtTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/DrawEffectAtTest.java @@ -1,9 +1,11 @@ package com.gempukku.lotro.at.effects; import com.gempukku.lotro.at.AbstractAtTest; -import com.gempukku.lotro.logic.timing.TriggerConditions; +import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.common.Zone; import com.gempukku.lotro.game.AbstractActionProxy; import com.gempukku.lotro.game.CardNotFoundException; +import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCardImpl; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.RequiredTriggerAction; @@ -13,10 +15,14 @@ import com.gempukku.lotro.logic.effects.PreventEffect; import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.EffectResult; import com.gempukku.lotro.logic.timing.Preventable; +import com.gempukku.lotro.logic.timing.TriggerConditions; +import com.gempukku.lotro.logic.vo.LotroDeck; import org.junit.Test; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import static org.junit.Assert.*; @@ -190,4 +196,37 @@ public class DrawEffectAtTest extends AbstractAtTest { assertEquals(0, triggerCount.get()); assertEquals(1, preventCount.get()); } + + @Test + public void forEachPlayer() throws Exception { + Map decks = new HashMap<>(); + decks.put(P1, createDeckWithIsengardRuined()); + decks.put(P2, createDeckWithIsengardRuined()); + initializeGameWithDecks(decks); + + PhysicalCard gandalf = addToZone(createCard(P1, "1_72"), Zone.FREE_CHARACTERS); + + passUntil(Phase.FELLOWSHIP); + selectCardAction(P1, getSite(1)); + selectNo(P1); + selectNo(P2); + } + + private LotroDeck createDeckWithIsengardRuined() { + LotroDeck lotroDeck = new LotroDeck("Some deck"); + // 10_121,1_2 + lotroDeck.setRingBearer("10_121"); + lotroDeck.setRing("1_2"); + // 7_330,7_336,8_117,7_342,7_345,7_350,8_120,10_120,7_360 + lotroDeck.addSite("7_331"); + lotroDeck.addSite("7_335"); + lotroDeck.addSite("8_117"); + lotroDeck.addSite("7_342"); + lotroDeck.addSite("7_345"); + lotroDeck.addSite("7_350"); + lotroDeck.addSite("8_120"); + lotroDeck.addSite("10_120"); + lotroDeck.addSite("7_360"); + return lotroDeck; + } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/WoundEffectAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/WoundEffectAtTest.java index 28d3f1fbf..7b38be304 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/WoundEffectAtTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/WoundEffectAtTest.java @@ -1,9 +1,11 @@ package com.gempukku.lotro.at.effects; import com.gempukku.lotro.at.AbstractAtTest; +import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Zone; import com.gempukku.lotro.game.AbstractActionProxy; import com.gempukku.lotro.game.CardNotFoundException; +import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCardImpl; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.RequiredTriggerAction; @@ -258,4 +260,31 @@ public class WoundEffectAtTest extends AbstractAtTest { assertEquals(1, triggerCount.get()); assertEquals(1, preventCount.get()); } + + @Test + public void disableWoundsOver() throws Exception { + initializeSimplestGame(); + + PhysicalCard valiantManOfTheWest = addToZone(createCard(P1, "1_118"), Zone.HAND); + PhysicalCard aragorn = addToZone(createCard(P1, "1_89"), Zone.FREE_CHARACTERS); + PhysicalCard lurtz = addToZone(createCard(P2, "1_127"), Zone.SHADOW_CHARACTERS); + + passUntil(Phase.MANEUVER); + selectCardAction(P1, valiantManOfTheWest); + pass(P2); + pass(P1); + passUntil(Phase.ARCHERY); + pass(P1); + pass(P2); + selectCard(P1, aragorn); + passUntil(Phase.ASSIGNMENT); + pass(P1); + pass(P2); + playerDecided(P1, aragorn.getCardId() + " " + lurtz.getCardId()); + selectCard(P1, aragorn); + pass(P1); + assertEquals(1, getWounds(aragorn)); + pass(P2); + assertEquals(2, getWounds(aragorn)); + } }