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);
}
}