From 80fc87a7f707d43c9133d6f0895ed56770f2b42f Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 7 Dec 2013 15:51:10 +0100 Subject: [PATCH] * Fixed a problem if some of multiple targets can't be targeted during resolution (e.g. target got hexproof meanwhile) it was still targeted (e.g. it happens for INto the void). --- Mage.Tests/pom.xml | 30 ++++---- .../abilities/keywords/HexproofTest.java | 69 +++++++++++++++++++ .../targetpointer/FirstTargetPointer.java | 12 +++- 3 files changed, 96 insertions(+), 15 deletions(-) create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/HexproofTest.java diff --git a/Mage.Tests/pom.xml b/Mage.Tests/pom.xml index 621061ddc96..56062bf06af 100644 --- a/Mage.Tests/pom.xml +++ b/Mage.Tests/pom.xml @@ -61,23 +61,27 @@ - + + - org.apache.maven.plugins - maven-compiler-plugin - - 1.6 - 1.6 - + org.apache.maven.plugins + maven-surefire-plugin + 2.16 - maven-resources-plugin - - UTF-8 - + org.apache.maven.plugins + maven-compiler-plugin + 3.1 - - + + maven-resources-plugin + 2.6 + + UTF-8 + + + + mage-tests diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/HexproofTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/HexproofTest.java new file mode 100644 index 00000000000..b23a5819a1c --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/HexproofTest.java @@ -0,0 +1,69 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package org.mage.test.cards.abilities.keywords; + +import mage.abilities.keyword.HexproofAbility; +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class HexproofTest extends CardTestPlayerBase { + + /** + * Tests one target gets hexproof + */ + @Test + public void testOneTargetOneGainingHexproof() { + addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); + addCard(Zone.BATTLEFIELD, playerA, "Elder of Laurels"); + addCard(Zone.HAND, playerA, "Ranger's Guile"); + + addCard(Zone.BATTLEFIELD, playerB, "Island", 4); + addCard(Zone.HAND, playerB, "Into the Void"); + + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Into the Void", "Elder of Laurels"); + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerA, "Ranger's Guile", "Elder of Laurels"); + + setStopAt(2, PhaseStep.END_TURN); + execute(); + + // because of hexproof the Elder should be onto the battlefield + assertPermanentCount(playerA, "Elder of Laurels", 1); + assertPowerToughness(playerA, "Elder of Laurels", 3, 4); + assertAbility(playerA, "Elder of Laurels", HexproofAbility.getInstance(), true); + } + /** + * Tests one target gets hexproof + */ + @Test + public void testTwoTargetsOneGainingHexproof() { + addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); + addCard(Zone.BATTLEFIELD, playerA, "Elder of Laurels"); + addCard(Zone.BATTLEFIELD, playerA, "Arbor Elf"); + addCard(Zone.HAND, playerA, "Ranger's Guile"); + + addCard(Zone.BATTLEFIELD, playerB, "Island", 4); + addCard(Zone.HAND, playerB, "Into the Void"); + + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Into the Void", "Elder of Laurels^Arbor Elf"); + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerA, "Ranger's Guile", "Elder of Laurels"); + + setStopAt(2, PhaseStep.END_TURN); + execute(); + + // because of hexproof the Elder should be onto the battlefield + assertPermanentCount(playerA, "Elder of Laurels", 1); + assertPowerToughness(playerA, "Elder of Laurels", 3, 4); + assertAbility(playerA, "Elder of Laurels", HexproofAbility.getInstance(), true); + assertPermanentCount(playerA, "Arbor Elf", 0); + } +} diff --git a/Mage/src/mage/target/targetpointer/FirstTargetPointer.java b/Mage/src/mage/target/targetpointer/FirstTargetPointer.java index 04d2d24e00d..040526ff1c3 100644 --- a/Mage/src/mage/target/targetpointer/FirstTargetPointer.java +++ b/Mage/src/mage/target/targetpointer/FirstTargetPointer.java @@ -1,10 +1,14 @@ package mage.target.targetpointer; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; import mage.abilities.Ability; import mage.cards.Card; import mage.game.Game; - -import java.util.*; +import mage.target.Target; public class FirstTargetPointer implements TargetPointer { @@ -40,12 +44,16 @@ public class FirstTargetPointer implements TargetPointer { public List getTargets(Game game, Ability source) { ArrayList target = new ArrayList(); if (source.getTargets().size() > 0) { + Target currentTarget = source.getTargets().get(0); for (UUID targetId : source.getTargets().get(0).getTargets()) { Card card = game.getCard(targetId); if (card != null && zoneChangeCounter.containsKey(targetId) && card.getZoneChangeCounter() != zoneChangeCounter.get(targetId)) { continue; } + if (!currentTarget.canTarget(targetId, source, game)) { + continue; + } target.add(targetId); } }