diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ProliferateTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ProliferateTest.java index d8d9751f26c..316543911b2 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ProliferateTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ProliferateTest.java @@ -69,4 +69,48 @@ public class ProliferateTest extends CardTestPlayerBase{ assertCounterCount("Chandra, Pyromaster", CounterType.LOYALTY, 5); // 4 + 1 from proliferate } + + /** + * Counters aren't cancelling each other out. Reproducible with any creature (graft and bloodthirst in my case) + * with a single +1/+1 counter on it, with a single -1/-1 placed on it (Grim Affliction, Instill Infection, etc). + * The counters should cancel each other out, leaving neither on the creature, which they don't (though visually + * there aren't any counters sitting on the card). Triggering proliferate at any point now (Thrumming Bird, + * Steady Progress, etc) will give you the option to add another of either counter, where you shouldn't have any as an option. + */ + @Test + public void testValidTargets() { + addCard(Zone.BATTLEFIELD, playerA, "Forest", 1); + addCard(Zone.BATTLEFIELD, playerA, "Island", 3); + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); + // Put a +1/+1 counter on target creature. + addCard(Zone.HAND, playerA, "Battlegrowth"); // {G} + // Proliferate. (You choose any number of permanents and/or players with counters on them, then give each another counter of a kind already there.) + // Draw a card. + addCard(Zone.HAND, playerA, "Steady Progress"); // {U}{2} + + addCard(Zone.BATTLEFIELD, playerB, "Sporeback Troll"); // has two +1/+1 counter + addCard(Zone.BATTLEFIELD, playerB, "Swamp", 3); + // Put a -1/-1 counter on target creature, then proliferate. + addCard(Zone.HAND, playerB, "Grim Affliction"); // {B}{2} + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Battlegrowth", "Silvercoat Lion"); + + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Grim Affliction", "Silvercoat Lion"); + // proliferate Sporeback Troll + + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerA, "Steady Progress"); + // Silvercoat Lion may not be a valid target now + + setStopAt(2, PhaseStep.BEGIN_COMBAT); + execute(); + + + assertGraveyardCount(playerA, "Battlegrowth", 1); + assertGraveyardCount(playerA, "Steady Progress", 1); + assertGraveyardCount(playerB, "Grim Affliction", 1); + + assertCounterCount("Silvercoat Lion", CounterType.P1P1, 0); // no valid target because no counter + assertCounterCount("Sporeback Troll", CounterType.P1P1, 3); // 2 + 1 from proliferate + + } } diff --git a/Mage/src/mage/counters/Counters.java b/Mage/src/mage/counters/Counters.java index d842c335417..fd304bea445 100644 --- a/Mage/src/mage/counters/Counters.java +++ b/Mage/src/mage/counters/Counters.java @@ -57,7 +57,7 @@ public class Counters extends HashMap implements Serializable { this.put(name, new Counter(name)); } this.get(name).add(); - } + } public void addCounter(String name, int amount) { if (!this.containsKey(name)) { @@ -76,7 +76,11 @@ public class Counters extends HashMap implements Serializable { public void removeCounter(String name) { if (this.containsKey(name)) { - this.get(name).remove(); + Counter counter = this.get(name); + counter.remove(); + if (counter.getCount() == 0) { + this.remove(name); + } } }