mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
Restored BaseGameSimulationTest with proper Mocks set up
This commit is contained in:
@@ -1,49 +1,46 @@
|
|||||||
package forge.gamesimulationtests;
|
package forge.gamesimulationtests;
|
||||||
|
|
||||||
import forge.ImageCache;
|
import forge.ImageCache;
|
||||||
|
import forge.ImageKeys;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.gamesimulationtests.util.CardDatabaseHelper;
|
import forge.card.ForgeCardMockTestCase;
|
||||||
import forge.gamesimulationtests.util.GameWrapper;
|
import forge.gamesimulationtests.util.GameWrapper;
|
||||||
import forge.gamesimulationtests.util.player.PlayerSpecification;
|
import forge.gamesimulationtests.util.player.PlayerSpecification;
|
||||||
import forge.gamesimulationtests.util.player.PlayerSpecificationHandler;
|
import forge.gamesimulationtests.util.player.PlayerSpecificationHandler;
|
||||||
import forge.gamesimulationtests.util.playeractions.testactions.AssertAction;
|
import forge.gamesimulationtests.util.playeractions.testactions.AssertAction;
|
||||||
import forge.localinstance.properties.ForgePreferences;
|
import forge.localinstance.properties.ForgeConstants;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
|
import forge.util.Lang;
|
||||||
|
import forge.util.Localizer;
|
||||||
|
import io.sentry.Sentry;
|
||||||
|
import io.sentry.context.Context;
|
||||||
import org.powermock.api.mockito.PowerMockito;
|
import org.powermock.api.mockito.PowerMockito;
|
||||||
import org.powermock.core.classloader.annotations.PrepareForTest;
|
import org.powermock.core.classloader.annotations.PrepareForTest;
|
||||||
import org.powermock.modules.testng.PowerMockTestCase;
|
import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
|
||||||
import org.testng.Assert;
|
import org.testng.Assert;
|
||||||
import org.testng.IObjectFactory;
|
import org.testng.annotations.BeforeMethod;
|
||||||
import org.testng.annotations.ObjectFactory;
|
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
@PrepareForTest(value = { FModel.class, Singletons.class, ImageCache.class, ImageIO.class })
|
@PrepareForTest(value = {FModel.class, Singletons.class, ResourceBundle.class,
|
||||||
public class BaseGameSimulationTest extends PowerMockTestCase {
|
ImageCache.class, ImageIO.class, ImageKeys.class,
|
||||||
//Can't run this with @BeforeTest or something like that, because of static voodoo
|
ForgeConstants.class, Localizer.class, Sentry.class})
|
||||||
protected void initializeMocks() throws Exception {
|
@SuppressStaticInitializationFor({"forge.ImageCache", "forge.localinstance.properties.ForgeConstants"})
|
||||||
//Loading a card also automatically loads the image, which we do not want (even if it wouldn't cause exceptions).
|
public class BaseGameSimulationTest extends ForgeCardMockTestCase {
|
||||||
//The static initializer block in ImageCache can't fully be mocked (https://code.google.com/p/powermock/issues/detail?id=256), so we also need to mess with ImageIO...
|
|
||||||
//TODO: make sure that loading images only happens in a GUI environment, so we no longer need to mock this
|
|
||||||
PowerMockito.mockStatic(ImageIO.class);
|
|
||||||
PowerMockito.mockStatic(ImageCache.class);
|
|
||||||
|
|
||||||
//Mocking some more static stuff
|
@BeforeMethod
|
||||||
ForgePreferences forgePreferences = new ForgePreferences();
|
@Override
|
||||||
PowerMockito.when(FModel.getPreferences()).thenReturn(forgePreferences);
|
protected void initMocks() throws Exception {
|
||||||
PowerMockito.mockStatic(Singletons.class);
|
super.initMocks();
|
||||||
PowerMockito.mockStatic(FModel.class);
|
PowerMockito.mockStatic(Sentry.class);
|
||||||
PowerMockito.when(FModel.getMagicDb()).thenReturn(CardDatabaseHelper.getStaticDataToPopulateOtherMocks());
|
PowerMockito.when(Sentry.getContext()).thenReturn(new Context());
|
||||||
}
|
Lang.createInstance("en-US");
|
||||||
|
|
||||||
@ObjectFactory
|
|
||||||
public IObjectFactory getObjectFactory() {
|
|
||||||
return new org.powermock.modules.testng.PowerMockObjectFactory();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void runGame(GameWrapper game, PlayerSpecification expectedWinner, int finalTurn, AssertAction... postGameAssertActions) {
|
protected void runGame(GameWrapper game, PlayerSpecification expectedWinner, int finalTurn, AssertAction... postGameAssertActions) {
|
||||||
try {
|
try {
|
||||||
initializeMocks();
|
initMocks();
|
||||||
game.runGame();
|
game.runGame();
|
||||||
verifyThatTheGameHasFinishedAndThatPlayerHasWonOnTurn(game, expectedWinner, finalTurn);
|
verifyThatTheGameHasFinishedAndThatPlayerHasWonOnTurn(game, expectedWinner, finalTurn);
|
||||||
if(postGameAssertActions != null && postGameAssertActions.length > 0) {
|
if(postGameAssertActions != null && postGameAssertActions.length > 0) {
|
||||||
@@ -60,7 +57,8 @@ public class BaseGameSimulationTest extends PowerMockTestCase {
|
|||||||
protected void verifyThatTheGameHasFinishedAndThatPlayerHasWonOnTurn(GameWrapper game, PlayerSpecification expectedWinner, int finalTurn) {
|
protected void verifyThatTheGameHasFinishedAndThatPlayerHasWonOnTurn(GameWrapper game, PlayerSpecification expectedWinner, int finalTurn) {
|
||||||
Assert.assertTrue(game.getGame().isGameOver());
|
Assert.assertTrue(game.getGame().isGameOver());
|
||||||
Assert.assertEquals(game.getGame().getOutcome().getLastTurnNumber(), finalTurn);
|
Assert.assertEquals(game.getGame().getOutcome().getLastTurnNumber(), finalTurn);
|
||||||
Assert.assertEquals(game.getGame().getOutcome().getWinningPlayer(), PlayerSpecificationHandler.INSTANCE.find(game.getGame(), expectedWinner));
|
Assert.assertEquals(game.getGame().getOutcome().getWinningPlayer().getPlayer().getName(),
|
||||||
|
PlayerSpecificationHandler.INSTANCE.find(game.getGame(), expectedWinner).getName());
|
||||||
Assert.assertTrue(game.getPlayerActions() == null || game.getPlayerActions().isEmpty());
|
Assert.assertTrue(game.getPlayerActions() == null || game.getPlayerActions().isEmpty());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user