From f8d20f061b7a7db56b68658aa1b497c0c5592599 Mon Sep 17 00:00:00 2001 From: Marcin Sciesinski Date: Fri, 18 Oct 2024 12:48:50 +0700 Subject: [PATCH] Added more ATs --- ...xchangeCardsInHandWithCardsInDeadPile.java | 2 +- ...ExchangeCardsInHandWithCardsInDiscard.java | 2 +- .../ExchangeCardsInHandWithCardsStacked.java | 2 +- .../field/effect/filter/FilterFactory.java | 5 ++ .../gempukku/lotro/at/ModifiersAtTest.java | 6 +- .../com/gempukku/lotro/at/TriggersAtTest.java | 2 +- .../lotro/at/effects/BurdensAtTest.java | 29 ++++++++++ .../lotro/at/effects/ExchangeCardsAtTest.java | 57 +++++++++++++++++++ .../effects/PlayCardFromDeadPileAtTest.java | 27 +++++++++ .../lotro/at/effects/PlaySiteAtTest.java | 37 ++++++++++++ ...ectAtTest.java => WoundsEffectAtTest.java} | 48 +++++++++++++++- 11 files changed, 209 insertions(+), 8 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/BurdensAtTest.java create mode 100644 gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/ExchangeCardsAtTest.java create mode 100644 gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/PlayCardFromDeadPileAtTest.java create mode 100644 gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/PlaySiteAtTest.java rename gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/{WoundEffectAtTest.java => WoundsEffectAtTest.java} (87%) diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ExchangeCardsInHandWithCardsInDeadPile.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ExchangeCardsInHandWithCardsInDeadPile.java index 7cf2557a9..4f8e0bdd6 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ExchangeCardsInHandWithCardsInDeadPile.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ExchangeCardsInHandWithCardsInDeadPile.java @@ -61,7 +61,7 @@ public class ExchangeCardsInHandWithCardsInDeadPile implements EffectAppenderPro for (PhysicalCard handCard : handCards) { game.getGameState().addCardToZone(game, handCard, Zone.DEAD); } - return null; + return new FullEffectResult(true); } @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ExchangeCardsInHandWithCardsInDiscard.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ExchangeCardsInHandWithCardsInDiscard.java index 0ac31a9ab..6fe93c543 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ExchangeCardsInHandWithCardsInDiscard.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ExchangeCardsInHandWithCardsInDiscard.java @@ -59,7 +59,7 @@ public class ExchangeCardsInHandWithCardsInDiscard implements EffectAppenderProd for (PhysicalCard handCard : handCards) { game.getGameState().addCardToZone(game, handCard, Zone.DISCARD); } - return null; + return new FullEffectResult(true); } @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ExchangeCardsInHandWithCardsStacked.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ExchangeCardsInHandWithCardsStacked.java index c92debb0d..0057a3a54 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ExchangeCardsInHandWithCardsStacked.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ExchangeCardsInHandWithCardsStacked.java @@ -64,7 +64,7 @@ public class ExchangeCardsInHandWithCardsStacked implements EffectAppenderProduc for (PhysicalCard handCard : handCards) { game.getGameState().stackCard(game, handCard, stackedCard); } - return null; + return new FullEffectResult(true); } @Override 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 47c3e31e6..d1063030b 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 @@ -254,6 +254,11 @@ public class FilterFactory { final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(parameter, environment); return (actionContext) -> Filters.attachedTo(filterableSource.getFilterable(actionContext)); }); + parameterFilters.put("stackedon", + (parameter, environment) -> { + final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(parameter, environment); + return (actionContext) -> Filters.stackedOn(filterableSource.getFilterable(actionContext)); + }); parameterFilters.put("culture", (parameter, environment) -> { final Culture culture = Culture.findCulture(parameter); if (culture == null) 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 161c8af25..857cccae3 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 @@ -156,7 +156,7 @@ public class ModifiersAtTest extends AbstractAtTest { initializeSimplestGame(); PhysicalCard elfSong = addToZone(createCard(P1, "1_39"), Zone.HAND); - PhysicalCard elrond = addToZone(createCard(P1, "1_40"), Zone.FREE_CHARACTERS); + PhysicalCard elrond = addToZone(createCard(P1, "1_40"), Zone.SUPPORT); JSONObject obj = new JSONObject(); obj.put("phase", "fellowship"); @@ -242,7 +242,7 @@ public class ModifiersAtTest extends AbstractAtTest { public void cantUseSpecialAbilities() throws Exception { initializeSimplestGame(); - PhysicalCard elrond = addToZone(createCard(P1, "1_40"), Zone.FREE_CHARACTERS); + PhysicalCard elrond = addToZone(createCard(P1, "1_40"), Zone.SUPPORT); JSONObject obj = new JSONObject(); obj.put("phase", "fellowship"); @@ -260,7 +260,7 @@ public class ModifiersAtTest extends AbstractAtTest { public void disableGameText() throws Exception { initializeSimplestGame(); - PhysicalCard elrond = addToZone(createCard(P1, "1_40"), Zone.FREE_CHARACTERS); + PhysicalCard elrond = addToZone(createCard(P1, "1_40"), Zone.SUPPORT); JSONObject obj = new JSONObject(); obj.put("filter", "elf"); diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/TriggersAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/TriggersAtTest.java index 93b944158..786a6edf2 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/TriggersAtTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/TriggersAtTest.java @@ -530,7 +530,7 @@ public class TriggersAtTest extends AbstractAtTest { PhysicalCard theShireCountryside = addToZone(createCard(P1, "3_113"), Zone.SUPPORT); PhysicalCard elfSong = addToZone(createCard(P1, "1_39"), Zone.HAND); - PhysicalCard elrond = addToZone(createCard(P1, "1_40"), Zone.FREE_CHARACTERS); + PhysicalCard elrond = addToZone(createCard(P1, "1_40"), Zone.SUPPORT); passUntil(Phase.FELLOWSHIP); selectCardAction(P1, elfSong); diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/BurdensAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/BurdensAtTest.java new file mode 100644 index 000000000..0654bc9fe --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/BurdensAtTest.java @@ -0,0 +1,29 @@ +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.PhysicalCard; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class BurdensAtTest extends AbstractAtTest { + @Test + public void preventAddingAllBurdens() throws Exception { + initializeSimplestGame(); + + PhysicalCard samwiseTheBrave = addToZone(createCard(P1, "4_316"), Zone.FREE_CHARACTERS); + PhysicalCard ringBearer = getRingBearer(P1); + PhysicalCard desperateDefenseOfTheRing = attachTo(createCard(P2, "1_244"), ringBearer); + PhysicalCard goblinRunner = addToZone(createCard(P2, "1_178"), Zone.SHADOW_CHARACTERS); + + passUntil(Phase.ASSIGNMENT); + pass(P1); + pass(P2); + assertEquals(1, getBurdens()); + playerDecided(P1, ringBearer.getCardId() + " " + goblinRunner.getCardId()); + selectCardAction(P1, samwiseTheBrave); + assertEquals(1, getBurdens()); + } +} diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/ExchangeCardsAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/ExchangeCardsAtTest.java new file mode 100644 index 000000000..c21c865a9 --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/ExchangeCardsAtTest.java @@ -0,0 +1,57 @@ +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.PhysicalCard; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class ExchangeCardsAtTest extends AbstractAtTest { + @Test + public void exchangeCardsInHandWithCardsInDeadPile() throws Exception { + initializeSimplestGame(); + + PhysicalCard gandalf = addToZone(createCard(P1, "1_72"), Zone.FREE_CHARACTERS); + PhysicalCard borneFarAway = addToZone(createCard(P1, "10_14"), Zone.HAND); + PhysicalCard aragornInDeadPile = addToZone(createCard(P1, "1_89"), Zone.DEAD); + PhysicalCard gimliInHand = addToZone(createCard(P1, "5_7"), Zone.HAND); + + passUntil(Phase.FELLOWSHIP); + selectCardAction(P1, borneFarAway); + assertEquals(Zone.HAND, aragornInDeadPile.getZone()); + assertEquals(Zone.DEAD, gimliInHand.getZone()); + } + + @Test + public void exchangeCardsInHandWithCardsInDiscard() throws Exception { + initializeSimplestGame(); + + PhysicalCard gandalf = addToZone(createCard(P1, "1_72"), Zone.FREE_CHARACTERS); + PhysicalCard borneFarAway = addToZone(createCard(P1, "10_14"), Zone.HAND); + PhysicalCard aragornInDiscard = addToZone(createCard(P1, "1_89"), Zone.DISCARD); + PhysicalCard gimliInHand = addToZone(createCard(P1, "5_7"), Zone.HAND); + + passUntil(Phase.FELLOWSHIP); + selectCardAction(P1, borneFarAway); + assertEquals(Zone.HAND, aragornInDiscard.getZone()); + assertEquals(Zone.DISCARD, gimliInHand.getZone()); + } + + @Test + public void exchangeCardsInHandWithCardsStacked() throws Exception { + initializeSimplestGame(); + + PhysicalCard gimli = addToZone(createCard(P1, "5_7"), Zone.FREE_CHARACTERS); + PhysicalCard hallOfOurFathers = addToZone(createCard(P1, "11_11"), Zone.SUPPORT); + PhysicalCard gandalfStacked = stackOn(createCard(P1, "1_72"), hallOfOurFathers); + PhysicalCard aragornInHand = addToZone(createCard(P1, "1_89"), Zone.HAND); + PhysicalCard goblinRunner = addToZone(createCard(P2, "1_178"), Zone.SHADOW_CHARACTERS); + + passUntil(Phase.MANEUVER); + selectCardAction(P1, hallOfOurFathers); + assertEquals(Zone.HAND, gandalfStacked.getZone()); + assertEquals(Zone.STACKED, aragornInHand.getZone()); + } +} diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/PlayCardFromDeadPileAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/PlayCardFromDeadPileAtTest.java new file mode 100644 index 000000000..517896d6b --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/PlayCardFromDeadPileAtTest.java @@ -0,0 +1,27 @@ +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.PhysicalCard; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class PlayCardFromDeadPileAtTest extends AbstractAtTest { + @Test + public void playCardFromDeadPile() throws Exception { + initializeSimplestGame(); + + PhysicalCard wellMetIndeed = addToZone(createCard(P1, "4_106"), Zone.HAND); + PhysicalCard aragorn = addToZone(createCard(P1, "1_89"), Zone.FREE_CHARACTERS); + PhysicalCard gimli = addToZone(createCard(P1, "5_7"), Zone.FREE_CHARACTERS); + PhysicalCard elrond = addToZone(createCard(P1, "1_40"), Zone.SUPPORT); + PhysicalCard gandalf = addToZone(createCard(P1, "1_72"), Zone.DEAD); + + passUntil(Phase.FELLOWSHIP); + + selectCardAction(P1, wellMetIndeed); + assertEquals(Zone.FREE_CHARACTERS, gandalf.getZone()); + } +} diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/PlaySiteAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/PlaySiteAtTest.java new file mode 100644 index 000000000..76806ade4 --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/PlaySiteAtTest.java @@ -0,0 +1,37 @@ +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.PhysicalCard; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +public class PlaySiteAtTest extends AbstractAtTest { + @Test + public void playNextSite() throws Exception { + initializeSimplestGame(); + + PhysicalCard aragorn = addToZone(createCard(P1, "1_89"), Zone.FREE_CHARACTERS); + PhysicalCard pathfinder = addToZone(createCard(P1, "1_110"), Zone.HAND); + + passUntil(Phase.FELLOWSHIP); + selectCardAction(P1, pathfinder); + assertNotNull(getSite(2)); + assertEquals(P1, getSite(2).getOwner()); + } + + @Test + public void playSite() throws Exception { + initializeSimplestGame(); + + PhysicalCard getOndAndGetAway = addToZone(createCard(P1, "4_304"), Zone.HAND); + + passUntil(Phase.FELLOWSHIP); + selectCardAction(P1, getOndAndGetAway); + assertEquals(P1, getSite(2).getOwner()); + assertEquals(P1, getSite(3).getOwner()); + } +} 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/WoundsEffectAtTest.java similarity index 87% rename from gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/WoundEffectAtTest.java rename to gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/effects/WoundsEffectAtTest.java index 7b38be304..86656d20a 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/WoundsEffectAtTest.java @@ -18,15 +18,18 @@ import com.gempukku.lotro.logic.modifiers.SpecialFlagModifier; import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.EffectResult; 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.*; -public class WoundEffectAtTest extends AbstractAtTest { +public class WoundsEffectAtTest extends AbstractAtTest { @Test public void woundSuccessful() throws DecisionResultInvalidException, CardNotFoundException { initializeSimplestGame(); @@ -287,4 +290,47 @@ public class WoundEffectAtTest extends AbstractAtTest { pass(P2); assertEquals(2, getWounds(aragorn)); } + + @Test + public void preventAllWounds() throws Exception { + Map decks = new HashMap<>(); + decks.put(P1, createDeckWithMrUnderhill()); + decks.put(P2, createDeckWithMrUnderhill()); + initializeGameWithDecks(decks); + + PhysicalCard ringBearer = getRingBearer(P1); + PhysicalCard gandalf = addToZone(createCard(P1, "1_72"), Zone.FREE_CHARACTERS); + PhysicalCard keepYourForkedTongue = addToZone(createCard(P1, "4_96"), Zone.HAND); + PhysicalCard goblinRunner = addToZone(createCard(P2, "1_178"), Zone.SHADOW_CHARACTERS); + + passUntil(Phase.FELLOWSHIP); + setTwilightPool(5); + passUntil(Phase.ASSIGNMENT); + pass(P1); + pass(P2); + playerDecided(P1, ringBearer.getCardId() + " " + goblinRunner.getCardId()); + selectCard(P1, ringBearer); + selectCardAction(P1, keepYourForkedTongue); + pass(P2); + pass(P1); + assertEquals(0, getWounds(ringBearer)); + } + + public LotroDeck createDeckWithMrUnderhill() { + LotroDeck lotroDeck = new LotroDeck("Some deck"); + // 10_121,1_2 + lotroDeck.setRingBearer("0_67"); + 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_330"); + 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; + } }