From 54d28550b42a40a71c253ca0f0808b6136fd363b Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Wed, 4 Nov 2015 12:28:48 +0100 Subject: [PATCH] Added a test. --- .../mage/sets/urzassaga/IllGottenGains.java | 4 +- .../replacement/LeylineOfTheVoidTest.java | 45 +++++++++++++++---- .../java/org/mage/test/player/TestPlayer.java | 42 +++++++---------- 3 files changed, 56 insertions(+), 35 deletions(-) diff --git a/Mage.Sets/src/mage/sets/urzassaga/IllGottenGains.java b/Mage.Sets/src/mage/sets/urzassaga/IllGottenGains.java index f731566dde..6e2a10f1d8 100644 --- a/Mage.Sets/src/mage/sets/urzassaga/IllGottenGains.java +++ b/Mage.Sets/src/mage/sets/urzassaga/IllGottenGains.java @@ -94,12 +94,12 @@ class IllGottenGainsEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - for (UUID playerId : controller.getInRange()) { + for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { Player player = game.getPlayer(playerId); if (player != null) { Target target = new TargetCardInYourGraveyard(0, 3, new FilterCard()); if (target.choose(Outcome.ReturnToHand, player.getId(), source.getSourceId(), game)) { - controller.moveCards(new CardsImpl(target.getTargets()), null, Zone.HAND, source, game); + player.moveCards(new CardsImpl(target.getTargets()), Zone.HAND, source, game); } } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/LeylineOfTheVoidTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/LeylineOfTheVoidTest.java index 20b7bdec98..56e196a91f 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/LeylineOfTheVoidTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/LeylineOfTheVoidTest.java @@ -29,7 +29,6 @@ package org.mage.test.cards.replacement; import mage.constants.PhaseStep; import mage.constants.Zone; -import org.junit.Assert; import org.junit.Test; import org.mage.test.serverside.base.CardTestPlayerBase; @@ -37,7 +36,6 @@ import org.mage.test.serverside.base.CardTestPlayerBase; * * @author LevelX2 */ - public class LeylineOfTheVoidTest extends CardTestPlayerBase { /** @@ -57,20 +55,51 @@ public class LeylineOfTheVoidTest extends CardTestPlayerBase { // If Leyline of the Void is in your opening hand, you may begin the game with it on the battlefield. // If a card would be put into an opponent's graveyard from anywhere, exile it instead. addCard(Zone.BATTLEFIELD, playerA, "Leyline of the Void"); - + // {X}, {T}: Target opponent puts cards from the top of his or her library into his or her graveyard until a creature card or X cards are put into that graveyard this way, whichever comes first. If a creature card is put into that graveyard this way, sacrifice Helm of Obedience and put that card onto the battlefield under your control. X can't be 0. addCard(Zone.BATTLEFIELD, playerA, "Helm of Obedience"); - activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{X},{T}: Target opponent puts cards", playerB); setChoice(playerA, "X=1"); setStopAt(1, PhaseStep.END_TURN); execute(); - + assertExileCount(playerB, 71); // All cards go to exile replaced from Leyline of the void } - + + /** + * Today i casted Ill-gotten Gains in EDH (with a leyline of the veil in + * play) and the spell simply discarded both players hands not letting + * either of us choose cards to get back, this ended up with me losing the + * game as i was going to combo off some cards in yard. + */ + @Test + public void testIllgottenGains() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 4); + + // If Leyline of the Void is in your opening hand, you may begin the game with it on the battlefield. + // If a card would be put into an opponent's graveyard from anywhere, exile it instead. + addCard(Zone.BATTLEFIELD, playerA, "Leyline of the Void"); + + // Exile Ill-Gotten Gains. + // Each player discards his or her hand, + // then returns up to three cards from his or her graveyard to his or her hand. + addCard(Zone.HAND, playerA, "Ill-Gotten Gains"); // Sorcery - {2}{B}{B} + addCard(Zone.HAND, playerA, "Silvercoat Lion", 4); + addCard(Zone.HAND, playerB, "Silvercoat Lion", 4); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Ill-Gotten Gains"); + setChoice(playerA, "Silvercoat Lion^Silvercoat Lion^Silvercoat Lion"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertExileCount(playerB, 4); + assertHandCount(playerB, 0); + + assertExileCount(playerA, 1); + assertHandCount(playerA, 3); + } + } - - diff --git a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java index 795e12ae9b..1166c5a2da 100644 --- a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java +++ b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java @@ -29,7 +29,6 @@ package org.mage.test.player; import java.io.Serializable; import java.util.ArrayList; -import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -94,7 +93,6 @@ import mage.target.TargetPermanent; import mage.target.TargetPlayer; import mage.target.TargetSource; import mage.target.TargetSpell; -import mage.target.common.TargetCardInGraveyard; import mage.target.common.TargetCardInHand; import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCreaturePermanentAmount; @@ -638,42 +636,36 @@ public class TestPlayer implements Player { } } } - if (target instanceof TargetCardInGraveyard) { - TargetCardInGraveyard targetCardInGraveyard = ((TargetCardInGraveyard) target); - Set possibleTargets = new HashSet<>(); - for (UUID playerId : this.getInRange()) { - Player player = game.getPlayer(playerId); - if (player != null) { - possibleTargets.addAll(player.getGraveyard()); - } - } - + if (target instanceof TargetCard) { + TargetCard targetCard = ((TargetCard) target); + Set possibleTargets = targetCard.possibleTargets(sourceId, target.getTargetController() == null ? getId() : target.getTargetController(), game); for (String choose2 : choices) { String[] targetList = choose2.split("\\^"); boolean targetFound = false; - for (UUID targetId : possibleTargets) { - MageObject targetObject = game.getObject(targetId); - if (targetObject != null) { - for (String targetName : targetList) { + Choice: + for (String targetName : targetList) { + for (UUID targetId : possibleTargets) { + MageObject targetObject = game.getObject(targetId); + if (targetObject != null) { if (targetObject.getName().equals(targetName)) { - List alreadyTargetted = targetCardInGraveyard.getTargets(); - if (targetCardInGraveyard.canTarget(targetObject.getId(), game)) { - if (alreadyTargetted != null && !alreadyTargetted.contains(targetObject.getId())) { - targetCardInGraveyard.add(targetObject.getId(), game); + if (targetCard.canTarget(targetObject.getId(), game)) { + if (targetCard.getTargets() != null && !targetCard.getTargets().contains(targetObject.getId())) { + targetCard.add(targetObject.getId(), game); targetFound = true; if (target.getTargets().size() >= target.getMaxNumberOfTargets()) { - break; + break Choice; } } } } } - if (targetFound && targetCardInGraveyard.isChosen()) { - choices.remove(choose2); - return true; - } + } } + if (targetFound && targetCard.isChosen()) { + choices.remove(choose2); + return true; + } } } if (target instanceof TargetSource) {