diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/enters/BronzehideLionTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/enters/BronzehideLionTest.java new file mode 100644 index 0000000000..11714506ee --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/enters/BronzehideLionTest.java @@ -0,0 +1,48 @@ +package org.mage.test.cards.abilities.enters; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +public class BronzehideLionTest extends CardTestPlayerBase { + + private final String lion = "Bronzehide Lion"; + + /** + * + When Bronzehide Lion dies, return it to the battlefield. + It's an Aura enchantment with enchant creature you control and + "{G}{W}: Enchanted creature gains indestructible until end of turn," and it loses all other abilities. + */ + + @Test + public void returnAsAura(){ + addCard(Zone.BATTLEFIELD, playerA, lion); + addCard(Zone.HAND, playerA, "Terror"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 10); + addCard(Zone.BATTLEFIELD, playerA, "Grizzly Bears"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Terror", lion); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertAllCommandsUsed(); + assertGraveyardCount(playerA, lion, 0); + assertIsAttachedTo(playerA, lion, "Grizzly Bears"); + } + + + + @Test + public void stayInGraveyard(){ + addCard(Zone.BATTLEFIELD, playerA, lion); + addCard(Zone.HAND, playerA, "Terror"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 10); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Terror", lion); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertAllCommandsUsed(); + assertGraveyardCount(playerA, lion, 1); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java index f9e9162d37..f36a901309 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java @@ -43,6 +43,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; +import static org.junit.Assert.assertTrue; + /** * API for test initialization and asserting the test results. * @@ -84,8 +86,8 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement static { // cards can be played/casted by activate ability command too - Assert.assertTrue("musts contains activate ability part", ACTIVATE_PLAY.startsWith(ACTIVATE_ABILITY)); - Assert.assertTrue("musts contains activate ability part", ACTIVATE_CAST.startsWith(ACTIVATE_ABILITY)); + assertTrue("musts contains activate ability part", ACTIVATE_PLAY.startsWith(ACTIVATE_ABILITY)); + assertTrue("musts contains activate ability part", ACTIVATE_CAST.startsWith(ACTIVATE_ABILITY)); } // TODO: add target player param to commands @@ -289,7 +291,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement if (player instanceof TestPlayer) { TestPlayer testPlayer = (TestPlayer) player; for (PlayerAction action : testPlayer.getActions()) { - Assert.assertTrue("Wrong turn in action " + action.getTurnNum(), action.getTurnNum() >= 1); + assertTrue("Wrong turn in action " + action.getTurnNum(), action.getTurnNum() >= 1); int curTurn = action.getTurnNum(); int curPhase = action.getStep().getIndex(); if ((curTurn > maxTurn) || (curTurn == maxTurn && curPhase > maxPhase)) { @@ -704,7 +706,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement } public void addPlane(Player player, Planes plane) { - Assert.assertTrue("Can't put plane to game: " + plane.getClassName(), SystemUtil.putPlaneToGame(currentGame, player, plane.getClassName())); + assertTrue("Can't put plane to game: " + plane.getClassName(), SystemUtil.putPlaneToGame(currentGame, player, plane.getClassName())); } /** @@ -761,7 +763,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement */ @Override public void setStopAt(int turn, PhaseStep step) { - Assert.assertTrue("Wrong turn " + turn, turn >= 1); + assertTrue("Wrong turn " + turn, turn >= 1); stopOnTurn = turn; stopAtStep = step; } @@ -867,11 +869,11 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement } } - Assert.assertTrue("There is no such permanent under player's control, player=" + player.getName() + assertTrue("There is no such permanent under player's control, player=" + player.getName() + ", cardName=" + cardName, count > 0); if (scope == Filter.ComparisonScope.Any) { - Assert.assertTrue("There is no such creature under player's control with specified p/t of " + power + '/' + toughness + ", player=" + player.getName() + assertTrue("There is no such creature under player's control with specified p/t of " + power + '/' + toughness + ", player=" + player.getName() + ", cardName=" + cardName + " (found similar: " + found + ", one of them: power=" + foundPower + " toughness=" + foundToughness + ')', fit > 0); } } @@ -908,11 +910,11 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement Assert.assertNotNull("There is no such permanent under player's control, player=" + player.getName() + ", cardName=" + cardName, found); - Assert.assertTrue("There is more than one such permanent under player's control, player=" + player.getName() + assertTrue("There is more than one such permanent under player's control, player=" + player.getName() + ", cardName=" + cardName, count == 1); for (Ability ability : abilities) { - Assert.assertTrue("No such ability=" + ability.toString() + ", player=" + player.getName() + assertTrue("No such ability=" + ability.toString() + ", player=" + player.getName() + ", cardName" + cardName, found.getAbilities().contains(ability)); } } @@ -944,11 +946,11 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement Assert.assertNotNull("There is no such permanent under player's control, player=" + player.getName() + ", cardName=" + cardName, found); - Assert.assertTrue("There is another number (" + foundCount + ") as defined (" + count + ") of such permanents under player's control, player=" + player.getName() + assertTrue("There is another number (" + foundCount + ") as defined (" + count + ") of such permanents under player's control, player=" + player.getName() + ", cardName=" + cardName, count == foundCount); if (mustHave) { - Assert.assertTrue("No such ability=" + ability.toString() + ", player=" + player.getName() + assertTrue("No such ability=" + ability.toString() + ", player=" + player.getName() + ", cardName" + cardName, found.getAbilities(currentGame).containsRule(ability)); } else { Assert.assertFalse("Card shouldn't have such ability=" + ability.toString() + ", player=" + player.getName() @@ -1118,7 +1120,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement Assert.assertNotNull("There is no such permanent on the battlefield, cardName=" + cardName, found); - Assert.assertTrue("(Battlefield) card type " + (mustHave ? "not " : "") + assertTrue("(Battlefield) card type " + (mustHave ? "not " : "") + "found (" + cardName + ':' + type + ')', (found.getCardType(currentGame).contains(type) == mustHave)); } @@ -1133,9 +1135,9 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement public void assertType(String cardName, CardType type, SubType subType) throws AssertionError { //Assert.assertNotEquals("", cardName); Permanent found = getPermanent(cardName); - Assert.assertTrue("(Battlefield) card type not found (" + cardName + ':' + type + ')', found.getCardType(currentGame).contains(type)); + assertTrue("(Battlefield) card type not found (" + cardName + ':' + type + ')', found.getCardType(currentGame).contains(type)); if (subType != null) { - Assert.assertTrue("(Battlefield) card sub-type not equal (" + cardName + ':' + subType.getDescription() + ')', found.hasSubtype(subType, currentGame)); + assertTrue("(Battlefield) card sub-type not equal (" + cardName + ':' + subType.getDescription() + ')', found.hasSubtype(subType, currentGame)); } } @@ -1175,7 +1177,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement //Assert.assertNotEquals("", cardName); Permanent found = getPermanent(cardName); if (subType != null) { - Assert.assertTrue("(Battlefield) card sub-type equal (" + cardName + ':' + subType.getDescription() + ')', found.hasSubtype(subType, currentGame)); + assertTrue("(Battlefield) card sub-type equal (" + cardName + ':' + subType.getDescription() + ')', found.hasSubtype(subType, currentGame)); } } @@ -1375,7 +1377,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement } } - Assert.assertTrue("There is no card named " + cardName + " found in exile, with subtype " + subType, found); + assertTrue("There is no card named " + cardName + " found in exile, with subtype " + subType, found); } /** @@ -1536,6 +1538,23 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement Assert.assertEquals(isRevealed, player.isTopCardRevealed()); } + public void assertIsAttachedTo(TestPlayer thePlayer, String theAttachment, String thePermanent) { + + List permanents = currentGame.getBattlefield().getAllActivePermanents().stream() + .filter(permanent -> permanent.isControlledBy(thePlayer.getId())) + .filter(permanent -> permanent.getName().equals(thePermanent)) + .collect(Collectors.toList()); + assertTrue(theAttachment + " was not attached to " + thePermanent, + permanents.stream() + .anyMatch(permanent -> permanent.getAttachments() + .stream() + .map(id -> currentGame.getCard(id)) + .map(MageObject::getName) + .collect(Collectors.toList()).contains(theAttachment))); + + + } + public Permanent getPermanent(String cardName, UUID controller) { assertAliaseSupportInActivateCommand(cardName, false); Permanent found = null; @@ -2039,7 +2058,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement } public void addTargetAmount(TestPlayer player, String target) { - Assert.assertTrue("Only skip command allows here", target.equals(TestPlayer.TARGET_SKIP)); + assertTrue("Only skip command allows here", target.equals(TestPlayer.TARGET_SKIP)); addTargetAmount(player, target, 0); } @@ -2111,7 +2130,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement public void assertWonTheGame(Player player) { - Assert.assertTrue(player.getName() + " has not won the game.", player.hasWon()); + assertTrue(player.getName() + " has not won the game.", player.hasWon()); } public void assertHasNotWonTheGame(Player player) { @@ -2121,7 +2140,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement public void assertLostTheGame(Player player) { - Assert.assertTrue(player.getName() + " has not lost the game.", player.hasLost()); + assertTrue(player.getName() + " has not lost the game.", player.hasLost()); } public void assertHasNotLostTheGame(Player player) {