From 298092189c53d481560af1897d2b2cfc3bcfc8f5 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Wed, 4 Jan 2012 11:04:07 +0000 Subject: [PATCH] Assignment tests. --- .../com/gempukku/lotro/at/AbstractAtTest.java | 15 +- .../gempukku/lotro/at/AssignmentAtTest.java | 138 +++++++++++++++++- 2 files changed, 151 insertions(+), 2 deletions(-) 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 250d0a599..ff83c42ab 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 @@ -2,6 +2,7 @@ package com.gempukku.lotro.at; import com.gempukku.lotro.game.DefaultUserFeedback; import com.gempukku.lotro.game.LotroCardBlueprintLibrary; +import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.formats.MovieFormat; import com.gempukku.lotro.logic.decisions.AwaitingDecision; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; @@ -81,6 +82,13 @@ public abstract class AbstractAtTest { } } + protected String[] toCardIdArray(PhysicalCard... cards) { + String[] result = new String[cards.length]; + for (int i = 0; i < cards.length; i++) + result[i] = String.valueOf(cards[i].getCardId()); + return result; + } + protected String getArbitraryCardId(AwaitingDecision awaitingDecision, String blueprintId) { String[] blueprints = (String[]) awaitingDecision.getDecisionParameters().get("blueprintId"); for (int i = 0; i < blueprints.length; i++) @@ -119,7 +127,12 @@ public abstract class AbstractAtTest { protected void playerDecided(String player, String answer) throws DecisionResultInvalidException { AwaitingDecision decision = _userFeedback.getAwaitingDecision(player); _userFeedback.participantDecided(player); - decision.decisionMade(answer); + try { + decision.decisionMade(answer); + } catch (DecisionResultInvalidException exp) { + _userFeedback.sendAwaitingDecision(player, decision); + throw exp; + } _game.carryOutPendingActionsUntilDecisionNeeded(); } 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 319b2038f..21b22963e 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 @@ -1,13 +1,20 @@ package com.gempukku.lotro.at; +import com.gempukku.lotro.common.Keyword; +import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Zone; import com.gempukku.lotro.game.PhysicalCardImpl; +import com.gempukku.lotro.game.state.Assignment; import com.gempukku.lotro.logic.decisions.AwaitingDecision; import com.gempukku.lotro.logic.decisions.AwaitingDecisionType; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; -import static junit.framework.Assert.assertEquals; +import com.gempukku.lotro.logic.modifiers.KeywordModifier; import org.junit.Test; +import java.util.List; + +import static junit.framework.Assert.*; + public class AssignmentAtTest extends AbstractAtTest { @Test public void orcAssassinAssignNotToAlly() throws DecisionResultInvalidException { @@ -96,4 +103,133 @@ public class AssignmentAtTest extends AbstractAtTest { assertEquals(AwaitingDecisionType.CARD_SELECTION, chooseCompanion.getDecisionType()); validateContents(new String[]{String.valueOf(merry.getCardId()), String.valueOf(pippin.getCardId())}, (String[]) chooseCompanion.getDecisionParameters().get("cardId")); } + + @Test + public void normalAssignment() throws DecisionResultInvalidException { + initializeSimplestGame(); + + skipMulligans(); + + PhysicalCardImpl merry = new PhysicalCardImpl(100, "1_303", P1, _library.getLotroCardBlueprint("1_303")); + PhysicalCardImpl pippin = new PhysicalCardImpl(101, "1_306", P1, _library.getLotroCardBlueprint("1_306")); + PhysicalCardImpl urukHaiRaidingParty1 = new PhysicalCardImpl(102, "1_158", P2, _library.getLotroCardBlueprint("1_158")); + PhysicalCardImpl urukHaiRaidingParty2 = new PhysicalCardImpl(103, "1_158", P2, _library.getLotroCardBlueprint("1_158")); + + _game.getGameState().addCardToZone(_game, merry, Zone.FREE_CHARACTERS); + _game.getGameState().addCardToZone(_game, pippin, Zone.FREE_CHARACTERS); + + // End fellowship phase + playerDecided(P1, ""); + + _game.getGameState().addCardToZone(_game, urukHaiRaidingParty1, Zone.SHADOW_CHARACTERS); + _game.getGameState().addCardToZone(_game, urukHaiRaidingParty2, Zone.SHADOW_CHARACTERS); + + // End shadow phase + playerDecided(P2, ""); + + // End maneuvers phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // End arhcery phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // End assignment phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + final List assignmentsBeforeFreePlayer = _game.getGameState().getAssignments(); + assertEquals(0, assignmentsBeforeFreePlayer.size()); + + AwaitingDecision assignmentDecision = _userFeedback.getAwaitingDecision(P1); + assertEquals(AwaitingDecisionType.ASSIGN_MINIONS, assignmentDecision.getDecisionType()); + validateContents(toCardIdArray(urukHaiRaidingParty1, urukHaiRaidingParty2), (String[]) assignmentDecision.getDecisionParameters().get("minions")); + validateContents(toCardIdArray(merry, pippin, _game.getGameState().getRingBearer(P1)), (String[]) assignmentDecision.getDecisionParameters().get("freeCharacters")); + playerDecided(P1, merry.getCardId() + " " + urukHaiRaidingParty1.getCardId()); + + final List assignmentsAfterFreePlayer = _game.getGameState().getAssignments(); + assertEquals(1, assignmentsAfterFreePlayer.size()); + assertEquals(merry, assignmentsAfterFreePlayer.get(0).getFellowshipCharacter()); + assertEquals(1, assignmentsAfterFreePlayer.get(0).getShadowCharacters().size()); + assertTrue(assignmentsAfterFreePlayer.get(0).getShadowCharacters().contains(urukHaiRaidingParty1)); + + AwaitingDecision shadowAssignmentDecision = _userFeedback.getAwaitingDecision(P2); + assertEquals(AwaitingDecisionType.ASSIGN_MINIONS, shadowAssignmentDecision.getDecisionType()); + validateContents(toCardIdArray(urukHaiRaidingParty2), (String[]) shadowAssignmentDecision.getDecisionParameters().get("minions")); + validateContents(toCardIdArray(merry, pippin, _game.getGameState().getRingBearer(P1)), (String[]) shadowAssignmentDecision.getDecisionParameters().get("freeCharacters")); + playerDecided(P2, pippin.getCardId() + " " + urukHaiRaidingParty2.getCardId()); + + final List assignmentsAfterShadowPlayer = _game.getGameState().getAssignments(); + assertEquals(2, assignmentsAfterFreePlayer.size()); + assertEquals(merry, assignmentsAfterFreePlayer.get(0).getFellowshipCharacter()); + assertEquals(1, assignmentsAfterFreePlayer.get(0).getShadowCharacters().size()); + assertTrue(assignmentsAfterFreePlayer.get(0).getShadowCharacters().contains(urukHaiRaidingParty1)); + assertEquals(pippin, assignmentsAfterFreePlayer.get(1).getFellowshipCharacter()); + assertEquals(1, assignmentsAfterFreePlayer.get(1).getShadowCharacters().size()); + assertTrue(assignmentsAfterFreePlayer.get(1).getShadowCharacters().contains(urukHaiRaidingParty2)); + } + + @Test + public void assignmentsWithDefender() throws DecisionResultInvalidException { + initializeSimplestGame(); + + skipMulligans(); + + PhysicalCardImpl merry = new PhysicalCardImpl(100, "1_303", P1, _library.getLotroCardBlueprint("1_303")); + PhysicalCardImpl pippin = new PhysicalCardImpl(101, "1_306", P1, _library.getLotroCardBlueprint("1_306")); + PhysicalCardImpl urukHaiRaidingParty1 = new PhysicalCardImpl(102, "1_158", P2, _library.getLotroCardBlueprint("1_158")); + PhysicalCardImpl urukHaiRaidingParty2 = new PhysicalCardImpl(103, "1_158", P2, _library.getLotroCardBlueprint("1_158")); + + _game.getGameState().addCardToZone(_game, merry, Zone.FREE_CHARACTERS); + _game.getGameState().addCardToZone(_game, pippin, Zone.FREE_CHARACTERS); + + // End fellowship phase + playerDecided(P1, ""); + + _game.getGameState().addCardToZone(_game, urukHaiRaidingParty1, Zone.SHADOW_CHARACTERS); + _game.getGameState().addCardToZone(_game, urukHaiRaidingParty2, Zone.SHADOW_CHARACTERS); + + // End shadow phase + playerDecided(P2, ""); + + // End maneuvers phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // End arhcery phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // Merry gets Defender +1 + _game.getModifiersEnvironment().addUntilEndOfPhaseModifier( + new KeywordModifier(null, merry, Keyword.DEFENDER, 1), Phase.ASSIGNMENT); + + // End assignment phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + final List assignmentsBeforeFreePlayer = _game.getGameState().getAssignments(); + assertEquals(0, assignmentsBeforeFreePlayer.size()); + + AwaitingDecision assignmentDecision = _userFeedback.getAwaitingDecision(P1); + assertEquals(AwaitingDecisionType.ASSIGN_MINIONS, assignmentDecision.getDecisionType()); + validateContents(toCardIdArray(urukHaiRaidingParty1, urukHaiRaidingParty2), (String[]) assignmentDecision.getDecisionParameters().get("minions")); + validateContents(toCardIdArray(merry, pippin, _game.getGameState().getRingBearer(P1)), (String[]) assignmentDecision.getDecisionParameters().get("freeCharacters")); + try { + playerDecided(P1, pippin.getCardId() + " " + urukHaiRaidingParty1.getCardId() + " " + urukHaiRaidingParty2.getCardId()); + fail("Pippin can't have multiple minions assigned by FP player"); + } catch (DecisionResultInvalidException exp) { + // Expected + } + // Merry gets two minions (he has Defender +1) + playerDecided(P1, merry.getCardId() + " " + urukHaiRaidingParty1.getCardId() + " " + urukHaiRaidingParty2.getCardId()); + + final List assignmentsAfterFreePlayer = _game.getGameState().getAssignments(); + assertEquals(1, assignmentsAfterFreePlayer.size()); + assertEquals(merry, assignmentsAfterFreePlayer.get(0).getFellowshipCharacter()); + assertEquals(2, assignmentsAfterFreePlayer.get(0).getShadowCharacters().size()); + assertTrue(assignmentsAfterFreePlayer.get(0).getShadowCharacters().contains(urukHaiRaidingParty1)); + assertTrue(assignmentsAfterFreePlayer.get(0).getShadowCharacters().contains(urukHaiRaidingParty2)); + } }