mirror of
https://github.com/correl/mage.git
synced 2024-11-28 19:19:55 +00:00
Fixed NPE error in card icons
This commit is contained in:
parent
1d443b231c
commit
dc09f279ed
2 changed files with 61 additions and 0 deletions
|
@ -453,6 +453,7 @@ public class CardView extends SimpleCardView {
|
||||||
// x cost
|
// x cost
|
||||||
Zone cardZone = game.getState().getZone(card.getId());
|
Zone cardZone = game.getState().getZone(card.getId());
|
||||||
if (card.getManaCost().containsX()
|
if (card.getManaCost().containsX()
|
||||||
|
&& card.getSpellAbility() != null
|
||||||
&& (cardZone.match(Zone.BATTLEFIELD) || cardZone.match(Zone.STACK))) {
|
&& (cardZone.match(Zone.BATTLEFIELD) || cardZone.match(Zone.STACK))) {
|
||||||
int costX;
|
int costX;
|
||||||
if (card instanceof Permanent) {
|
if (card instanceof Permanent) {
|
||||||
|
|
|
@ -7,6 +7,7 @@ import mage.view.GameView;
|
||||||
import mage.view.PlayerView;
|
import mage.view.PlayerView;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.mage.test.player.TestPlayer;
|
||||||
import org.mage.test.serverside.base.CardTestPlayerBase;
|
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -221,4 +222,63 @@ public class CardIconsTest extends CardTestPlayerBase {
|
||||||
execute();
|
execute();
|
||||||
assertAllCommandsUsed();
|
assertAllCommandsUsed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_CostX_MDFC() {
|
||||||
|
// Agadeem's Awakening
|
||||||
|
// Sorcery {X}{B}{B}{B}
|
||||||
|
// Return from your graveyard to the battlefield any number of target creature cards that each have a different converted mana cost X or less.
|
||||||
|
//
|
||||||
|
// Agadeem, the Undercrypt
|
||||||
|
// Land
|
||||||
|
// As Agadeem, the Undercrypt enters the battlefield, you may pay 3 life. If you don't, it enters the battlefield tapped.
|
||||||
|
addCard(Zone.HAND, playerA, "Agadeem's Awakening", 2);
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5);
|
||||||
|
|
||||||
|
// hand (not visible)
|
||||||
|
runCode("card icons in hand", 1, PhaseStep.PRECOMBAT_MAIN, playerA, (info, player, game) -> {
|
||||||
|
GameView gameView = getGameView(player);
|
||||||
|
CardView cardView = gameView.getHand().values().stream()
|
||||||
|
.filter(c -> c.getName().equals("Agadeem's Awakening"))
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
|
Assert.assertEquals("main must have non x cost card icons in hand", 0, cardView.getCardIcons().size());
|
||||||
|
Assert.assertEquals("right must have non x cost card icons in hand", 0, cardView.getSecondCardFace().getCardIcons().size());
|
||||||
|
});
|
||||||
|
|
||||||
|
// play spell and check X
|
||||||
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Agadeem's Awakening");
|
||||||
|
setChoice(playerA, "X=2");
|
||||||
|
addTarget(playerA, TestPlayer.TARGET_SKIP);
|
||||||
|
// stack (spell - visible)
|
||||||
|
runCode("card icons on stack (visible)", 1, PhaseStep.PRECOMBAT_MAIN, playerA, (info, player, game) -> {
|
||||||
|
GameView gameView = getGameView(player);
|
||||||
|
Assert.assertEquals("must have 1 card in stack", 1, gameView.getStack().values().size());
|
||||||
|
CardView cardView = gameView.getStack().values().stream()
|
||||||
|
.filter(c -> c.getName().equals("Agadeem's Awakening"))
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
|
Assert.assertEquals("main must have x cost card icons in stack", 1, cardView.getCardIcons().size());
|
||||||
|
Assert.assertNull("right must be null in stack", cardView.getSecondCardFace());
|
||||||
|
});
|
||||||
|
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||||
|
|
||||||
|
// play land and check X
|
||||||
|
playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Agadeem, the Undercrypt");
|
||||||
|
setChoice(playerA, false); // not pay life
|
||||||
|
runCode("card icons in battlefield", 1, PhaseStep.PRECOMBAT_MAIN, playerA, (info, player, game) -> {
|
||||||
|
GameView gameView = getGameView(player);
|
||||||
|
PlayerView playerView = gameView.getPlayers().get(0);
|
||||||
|
Assert.assertEquals("player", player.getName(), playerView.getName());
|
||||||
|
CardView cardView = playerView.getBattlefield().values().stream().filter(p -> p.getName().equals("Agadeem, the Undercrypt")).findFirst().orElse(null);
|
||||||
|
Assert.assertNotNull("must have Agadeem, the Undercrypt in battlefield", cardView);
|
||||||
|
Assert.assertEquals("main must have not x cost card icons in battlefield", 0, cardView.getCardIcons().size());
|
||||||
|
Assert.assertNull("second side must be null", cardView.getSecondCardFace());
|
||||||
|
});
|
||||||
|
|
||||||
|
setStrictChooseMode(true);
|
||||||
|
setStopAt(1, PhaseStep.END_TURN);
|
||||||
|
execute();
|
||||||
|
assertAllCommandsUsed();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue