Assignment tests.

This commit is contained in:
marcins78@gmail.com
2012-01-04 11:04:07 +00:00
parent ffb25adbfb
commit 298092189c
2 changed files with 151 additions and 2 deletions

View File

@@ -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();
}

View File

@@ -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<Assignment> 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<Assignment> 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<Assignment> 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<Assignment> 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<Assignment> 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));
}
}