mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 20:58:03 +00:00
Add first unit test for game simulation AI - tests the fix for activations of ability triggers from my last commit.
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -1127,6 +1127,7 @@ forge-gui-desktop/src/test/java/forge/GuiProgressBarWindowTest.java -text
|
|||||||
forge-gui-desktop/src/test/java/forge/PanelTest.java -text
|
forge-gui-desktop/src/test/java/forge/PanelTest.java -text
|
||||||
forge-gui-desktop/src/test/java/forge/RunTest.java -text
|
forge-gui-desktop/src/test/java/forge/RunTest.java -text
|
||||||
forge-gui-desktop/src/test/java/forge/TinyTest.java -text
|
forge-gui-desktop/src/test/java/forge/TinyTest.java -text
|
||||||
|
forge-gui-desktop/src/test/java/forge/ai/simulation/GameSimulatorTest.java -text
|
||||||
forge-gui-desktop/src/test/java/forge/deck/generate/Generate2ColorDeckTest.java -text
|
forge-gui-desktop/src/test/java/forge/deck/generate/Generate2ColorDeckTest.java -text
|
||||||
forge-gui-desktop/src/test/java/forge/deck/generate/Generate3ColorDeckTest.java -text
|
forge-gui-desktop/src/test/java/forge/deck/generate/Generate3ColorDeckTest.java -text
|
||||||
forge-gui-desktop/src/test/java/forge/deck/generate/Generate5ColorDeckTest.java -text
|
forge-gui-desktop/src/test/java/forge/deck/generate/Generate5ColorDeckTest.java -text
|
||||||
|
|||||||
@@ -190,6 +190,10 @@ public class GameSimulator {
|
|||||||
return score;
|
return score;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Game getSimulatedGameState() {
|
||||||
|
return simGame;
|
||||||
|
}
|
||||||
|
|
||||||
public int getScoreForOrigGame() {
|
public int getScoreForOrigGame() {
|
||||||
return origScore;
|
return origScore;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,100 @@
|
|||||||
|
package forge.ai.simulation;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
|
import forge.GuiBase;
|
||||||
|
import forge.GuiDesktop;
|
||||||
|
import forge.ai.LobbyPlayerAi;
|
||||||
|
import forge.deck.Deck;
|
||||||
|
import forge.game.Game;
|
||||||
|
import forge.game.GameRules;
|
||||||
|
import forge.game.GameType;
|
||||||
|
import forge.game.Match;
|
||||||
|
import forge.game.card.Card;
|
||||||
|
import forge.game.phase.PhaseType;
|
||||||
|
import forge.game.player.Player;
|
||||||
|
import forge.game.player.RegisteredPlayer;
|
||||||
|
import forge.game.spellability.SpellAbility;
|
||||||
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.item.IPaperCard;
|
||||||
|
import forge.model.FModel;
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
public class GameSimulatorTest extends TestCase {
|
||||||
|
private Game initAndCreateGame() {
|
||||||
|
List<RegisteredPlayer> players = Lists.newArrayList();
|
||||||
|
Deck d1 = new Deck();
|
||||||
|
players.add(new RegisteredPlayer(d1).setPlayer(new LobbyPlayerAi("p2")));
|
||||||
|
players.add(new RegisteredPlayer(d1).setPlayer(new LobbyPlayerAi("p1")));
|
||||||
|
GameRules rules = new GameRules(GameType.Constructed);
|
||||||
|
Match match = new Match(rules, players);
|
||||||
|
Game game = new Game(players, rules, match);
|
||||||
|
|
||||||
|
GuiBase.setInterface(new GuiDesktop());
|
||||||
|
FModel.initialize(null);
|
||||||
|
return game;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Card findCardWithName(Game game, String name) {
|
||||||
|
for (Card c : game.getCardsIn(ZoneType.Battlefield)) {
|
||||||
|
if (c.getName().equals(name)) {
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private SpellAbility findSAWithPrefix(Card c, String prefix) {
|
||||||
|
for (SpellAbility sa : c.getSpellAbilities()) {
|
||||||
|
if (sa.toString().startsWith(prefix)) {
|
||||||
|
return sa;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Card addCard(String name, Player p) {
|
||||||
|
IPaperCard paperCard = FModel.getMagicDb().getCommonCards().getCard(name);
|
||||||
|
Card c = Card.fromPaperCard(paperCard, p);
|
||||||
|
p.getZone(ZoneType.Battlefield).add(c);
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testActivateAbilityTriggers() {
|
||||||
|
Game game = initAndCreateGame();
|
||||||
|
Player p = game.getPlayers().get(1);
|
||||||
|
|
||||||
|
addCard("Plains", p);
|
||||||
|
addCard("Plains", p);
|
||||||
|
addCard("Plains", p);
|
||||||
|
String heraldCardName = "Herald of Anafenza";
|
||||||
|
Card herald = addCard(heraldCardName, p);
|
||||||
|
herald.setSickness(false);
|
||||||
|
|
||||||
|
game.getPhaseHandler().devModeSet(PhaseType.MAIN1, p);
|
||||||
|
|
||||||
|
SpellAbility outlastSA = findSAWithPrefix(herald, "Outlast");
|
||||||
|
assertNotNull(outlastSA);
|
||||||
|
|
||||||
|
GameSimulator sim = new GameSimulator(game);
|
||||||
|
int score = sim.simulateSpellAbility(outlastSA);
|
||||||
|
assertTrue(score > 0);
|
||||||
|
Game simGame = sim.getSimulatedGameState();
|
||||||
|
|
||||||
|
Card heraldCopy = findCardWithName(simGame, heraldCardName);
|
||||||
|
assertNotNull(heraldCopy);
|
||||||
|
assertTrue(heraldCopy.isTapped());
|
||||||
|
assertTrue(heraldCopy.hasCounters());
|
||||||
|
assertEquals(1, heraldCopy.getToughnessBonusFromCounters());
|
||||||
|
assertEquals(1, heraldCopy.getPowerBonusFromCounters());
|
||||||
|
|
||||||
|
Card warriorToken = findCardWithName(simGame, "Warrior");
|
||||||
|
assertNotNull(warriorToken);
|
||||||
|
assertTrue(warriorToken.isSick());
|
||||||
|
assertEquals(1, warriorToken.getCurrentPower());
|
||||||
|
assertEquals(1, warriorToken.getCurrentToughness());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user