From f05afca73d884915ca0967d95f3ed0790dcfb90b Mon Sep 17 00:00:00 2001 From: drmDev Date: Thu, 3 Mar 2016 20:10:27 -0500 Subject: [PATCH 1/2] Disrupting Shoal tests for fuse cards (reported bug) --- .../counterspell/DisruptingShoalTest.java | 110 +++++++++++++++++- 1 file changed, 107 insertions(+), 3 deletions(-) diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/counterspell/DisruptingShoalTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/counterspell/DisruptingShoalTest.java index c1b2a801a9..aa3e257c2f 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/counterspell/DisruptingShoalTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/counterspell/DisruptingShoalTest.java @@ -75,8 +75,112 @@ public class DisruptingShoalTest extends CardTestPlayerBase { assertHandCount(playerA, "Spell Snare", 1); // Can't be cast -> no valid target assertGraveyardCount(playerA, "Pillarfield Ox", 1); - - - } + + /** + * Test that Disrupting Shoal can be played with alternate casting costs + * And the X Value can be equal to either half of a fuse card. + * + * Reported bug: "Casting Disrupting Shoal pitching Far // Away does not counter spells with converted mana cost 2 or 3, + * which it should. Instead it does counter spells with converted mana cost 5, which it shouldn't". + */ + @Test + public void testWithFuseCardCounterCMCTwo() { + + // CMC 2 and CMC 3 + addCard(Zone.HAND, playerA, "Grizzly Bears"); // 2/2 {1}{G} + + addCard(Zone.BATTLEFIELD, playerA, "Forest", 2); + + /** + * Far {1}{U} Instant Return target creature to its owner's hand. Away + * {2}{B} Instant Target player sacrifices a creature. Fuse (You may + * cast one or both halves of this card from your hand.) + */ + addCard(Zone.HAND, playerB, "Disrupting Shoal", 1); + addCard(Zone.HAND, playerB, "Far // Away", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Grizzly Bears"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Disrupting Shoal", "Grizzly Bears", "Grizzly Bears"); + playerB.addChoice("Yes"); // use alternate costs = 2 CMC = Far + + setStopAt(1, PhaseStep.CLEANUP); + execute(); + + assertExileCount(playerB, 1); // Far // Away should be exiled as part of Disrupting alternative cost + assertGraveyardCount(playerB,"Disrupting Shoal", 1); + assertPermanentCount(playerA, "Grizzly Bears", 0); // should have been countered by Shoal + assertGraveyardCount(playerA, "Grizzly Bears", 1); + } + + /** + * Test that Disrupting Shoal can be played with alternate casting costs + * And the X Value can be equal to either half of a fuse card. + * + * Reported bug: "Casting Disrupting Shoal pitching Far // Away does not counter spells with converted mana cost 2 or 3, + * which it should. Instead it does counter spells with converted mana cost 5, which it shouldn't". + */ + @Test + public void testWithFuseCardCounterCMCThree() { + + addCard(Zone.HAND, playerA, "Centaur Courser"); // 3/3 {2}{G} + addCard(Zone.BATTLEFIELD, playerA, "Forest", 3); + + /** + * Far {1}{U} Instant Return target creature to its owner's hand. Away + * {2}{B} Instant Target player sacrifices a creature. Fuse (You may + * cast one or both halves of this card from your hand.) + */ + addCard(Zone.HAND, playerB, "Disrupting Shoal", 1); + addCard(Zone.HAND, playerB, "Far // Away", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Centaur Courser"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Disrupting Shoal", "Centaur Courser", "Centaur Courser"); + playerB.addChoice("Yes"); // use alternate costs = 3 CMC = Away + + setStopAt(1, PhaseStep.CLEANUP); + execute(); + + assertExileCount(playerB, 1); // Far // Away should be exiled as part of Disrupting alternative cost + assertGraveyardCount(playerB,"Disrupting Shoal", 1); + assertPermanentCount(playerA, "Centaur Courser", 0); // should have been countered by Shoal + assertGraveyardCount(playerA, "Centaur Courser", 1); + } + + /** + * Test that Disrupting Shoal can be played with alternate casting costs + * And the X Value can be equal to either half of a fuse card. Not the combined cost of both. + * + * Reported bug: "Casting Disrupting Shoal pitching Far // Away does not counter spells with converted mana cost 2 or 3, + * which it should. Instead it does counter spells with converted mana cost 5, which it shouldn't". + */ + @Test + public void testWithFuseCardShouldNotCounterCMCFive() { + + addCard(Zone.HAND, playerA, "Air Elemental"); // 4/4 Flying {3}{U}{U} + addCard(Zone.BATTLEFIELD, playerA, "Island", 5); + + /** + * Far {1}{U} Instant Return target creature to its owner's hand. Away + * {2}{B} Instant Target player sacrifices a creature. Fuse (You may + * cast one or both halves of this card from your hand.) + */ + addCard(Zone.HAND, playerB, "Disrupting Shoal", 1); + addCard(Zone.HAND, playerB, "Far // Away", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Air Elemental"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Disrupting Shoal", "Air Elemental", "Air Elemental"); + playerB.addChoice("Yes"); // use alternate costs = 3 CMC = Away + + setStopAt(1, PhaseStep.CLEANUP); + execute(); + + assertExileCount(playerB, 1); // Far // Away should be exiled as part of Disrupting alternative cost + assertGraveyardCount(playerB,"Disrupting Shoal", 1); + assertPermanentCount(playerA, "Air Elemental", 0); // should have been countered by Shoal + assertGraveyardCount(playerA, "Air Elemental", 1); + } } \ No newline at end of file From f1bbc16a757f94df3ab739ced43d9d0602c45a1a Mon Sep 17 00:00:00 2001 From: drmDev Date: Thu, 3 Mar 2016 20:33:50 -0500 Subject: [PATCH 2/2] Fixed disrupting shoal test for CMC 5 --- .../abilities/oneshot/counterspell/DisruptingShoalTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/counterspell/DisruptingShoalTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/counterspell/DisruptingShoalTest.java index aa3e257c2f..5900a91788 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/counterspell/DisruptingShoalTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/counterspell/DisruptingShoalTest.java @@ -173,14 +173,14 @@ public class DisruptingShoalTest extends CardTestPlayerBase { castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Air Elemental"); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Disrupting Shoal", "Air Elemental", "Air Elemental"); - playerB.addChoice("Yes"); // use alternate costs = 3 CMC = Away + playerB.addChoice("Yes"); // use alternate costs = 2 or 3 CMC = Far // Away, not the combined cost! setStopAt(1, PhaseStep.CLEANUP); execute(); assertExileCount(playerB, 1); // Far // Away should be exiled as part of Disrupting alternative cost assertGraveyardCount(playerB,"Disrupting Shoal", 1); - assertPermanentCount(playerA, "Air Elemental", 0); // should have been countered by Shoal - assertGraveyardCount(playerA, "Air Elemental", 1); + assertPermanentCount(playerA, "Air Elemental", 1); // should NOT have been countered by Shoal + assertGraveyardCount(playerA, "Air Elemental", 0); } } \ No newline at end of file