Finished incomplete elven unit tests for V1. Fixed a potential infinite loop when attaching cards to themselves.

This commit is contained in:
Christian 'ketura' McCarty
2022-07-21 09:57:36 -05:00
parent e6c8a53f67
commit 00a5f0b465
3 changed files with 63 additions and 28 deletions

View File

@@ -128,11 +128,13 @@
{ {
"type": "activated", "type": "activated",
"phase": "archery", "phase": "archery",
"cost": { "cost": [
"type": "reduceArcheryTotal", {
"side": "free people", "type": "reduceArcheryTotal",
"memorize": "reducedBy" "side": "free people",
}, "memorize": "reducedBy"
}
],
"effect": [ "effect": [
{ {
"type": "modifyStrength", "type": "modifyStrength",

View File

@@ -9,6 +9,7 @@ import com.gempukku.lotro.logic.modifiers.ModifierFlag;
import com.gempukku.lotro.logic.timing.GameStats; import com.gempukku.lotro.logic.timing.GameStats;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import java.security.InvalidParameterException;
import java.util.*; import java.util.*;
import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.ThreadLocalRandom;
@@ -311,12 +312,18 @@ public class GameState {
listener.cardMoved(card); listener.cardMoved(card);
} }
public void attachCard(LotroGame game, PhysicalCard card, PhysicalCard attachTo) { public void attachCard(LotroGame game, PhysicalCard card, PhysicalCard attachTo) throws InvalidParameterException {
if(card == attachTo)
throw new InvalidParameterException("Cannot attach card to itself!");
((PhysicalCardImpl) card).attachTo((PhysicalCardImpl) attachTo); ((PhysicalCardImpl) card).attachTo((PhysicalCardImpl) attachTo);
addCardToZone(game, card, Zone.ATTACHED); addCardToZone(game, card, Zone.ATTACHED);
} }
public void stackCard(LotroGame game, PhysicalCard card, PhysicalCard stackOn) { public void stackCard(LotroGame game, PhysicalCard card, PhysicalCard stackOn) throws InvalidParameterException {
if(card == stackOn)
throw new InvalidParameterException("Cannot stack card on itself!");
((PhysicalCardImpl) card).stackOn((PhysicalCardImpl) stackOn); ((PhysicalCardImpl) card).stackOn((PhysicalCardImpl) stackOn);
addCardToZone(game, card, Zone.STACKED); addCardToZone(game, card, Zone.STACKED);
} }

View File

@@ -22,8 +22,13 @@ public class Card_V1_009_Tests
return new GenericCardTestHelper( return new GenericCardTestHelper(
new HashMap<String, String>() new HashMap<String, String>()
{{ {{
put("card", "151_9"); put("legolas", "151_9");
// put other cards in here as needed for the test case put("lorien", "51_53");
put("bow", "1_41");
put("aragorn", "1_89");
put("gornbow", "1_90");
put("runner", "1_178");
}}, }},
GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FellowshipSites,
GenericCardTestHelper.FOTRFrodo, GenericCardTestHelper.FOTRFrodo,
@@ -31,7 +36,6 @@ public class Card_V1_009_Tests
); );
} }
// Uncomment both @Test markers below once this is ready to be used
@Test @Test
public void LegolasStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { public void LegolasStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException {
@@ -54,32 +58,54 @@ public class Card_V1_009_Tests
//Pre-game setup //Pre-game setup
GenericCardTestHelper scn = GetScenario(); GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl card = scn.GetFreepsCard("card"); PhysicalCardImpl legolas = scn.GetFreepsCard("legolas");
assertTrue(card.getBlueprint().isUnique()); assertTrue(legolas.getBlueprint().isUnique());
assertTrue(scn.HasKeyword(card, Keyword.ARCHER)); // test for keywords as needed assertTrue(scn.HasKeyword(legolas, Keyword.ARCHER)); // test for keywords as needed
assertEquals(2, card.getBlueprint().getTwilightCost()); assertEquals(2, legolas.getBlueprint().getTwilightCost());
assertEquals(6, card.getBlueprint().getStrength()); assertEquals(6, legolas.getBlueprint().getStrength());
assertEquals(3, card.getBlueprint().getVitality()); assertEquals(3, legolas.getBlueprint().getVitality());
//assertEquals(, card.getBlueprint().getResistance()); //assertEquals(, legolas.getBlueprint().getResistance());
assertEquals(Signet.ARAGORN, card.getBlueprint().getSignet()); assertEquals(Signet.ARAGORN, legolas.getBlueprint().getSignet());
//assertEquals(, card.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies //assertEquals(, legolas.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies
assertEquals(CardType.COMPANION, card.getBlueprint().getCardType()); assertEquals(CardType.COMPANION, legolas.getBlueprint().getCardType());
assertEquals(Culture.ELVEN, card.getBlueprint().getCulture()); assertEquals(Culture.ELVEN, legolas.getBlueprint().getCulture());
assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide()); assertEquals(Side.FREE_PEOPLE, legolas.getBlueprint().getSide());
} }
//@Test @Test
public void LegolasTest1() throws DecisionResultInvalidException, CardNotFoundException { public void ArcheryLosesFireToPumpLegolas() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup //Pre-game setup
GenericCardTestHelper scn = GetScenario(); GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl card = scn.GetFreepsCard("card"); PhysicalCardImpl legolas = scn.GetFreepsCard("legolas");
scn.FreepsMoveCardToHand(card); PhysicalCardImpl lorien = scn.GetFreepsCard("lorien");
PhysicalCardImpl bow = scn.GetFreepsCard("bow");
PhysicalCardImpl aragorn = scn.GetFreepsCard("aragorn");
PhysicalCardImpl gornbow = scn.GetFreepsCard("gornbow");
scn.FreepsMoveCharToTable(legolas, lorien, aragorn);
scn.FreepsAttachCardsTo(aragorn, "gornbow");
scn.FreepsAttachCardsTo(lorien, "bow");
scn.ShadowMoveCharToTable("runner");
scn.StartGame(); scn.StartGame();
scn.FreepsPlayCard(card);
assertEquals(2, scn.GetTwilight()); scn.SkipToPhase(Phase.ARCHERY);
assertTrue(scn.FreepsCardActionAvailable(legolas));
assertEquals(3, scn.GetFreepsArcheryTotal());
assertEquals(6, scn.GetStrength(legolas));
scn.FreepsUseCardAction(legolas);
assertTrue(scn.FreepsDecisionAvailable("Choose number to reduce archery by"));
scn.FreepsChoose("2");
assertEquals(1, scn.GetFreepsArcheryTotal());
assertEquals(8, scn.GetStrength(legolas));
scn.ShadowSkipCurrentPhaseAction();
assertFalse(scn.FreepsAnyActionsAvailable()); // No gorn bow
} }
} }