package org.mage.test.cards.abilities.keywords; import mage.constants.PhaseStep; import mage.constants.Zone; import org.junit.Test; import org.mage.test.serverside.base.CardTestPlayerBase; /** * @author klayhamn */ public class RippleTest extends CardTestPlayerBase { /** * 702.59.Ripple * 702.59a Ripple is a triggered ability that functions only while the card with ripple is on the stack. “Ripple N” means * “When you cast this spell, you may reveal the top N cards of your library, or, if there are fewer than N cards in your * library, you may reveal all the cards in your library. If you reveal cards from your library this way, you may cast any * of those cards with the same name as this spell without paying their mana costs, then put all revealed cards not cast * this way on the bottom of your library in any order.” * 702.59b If a spell has multiple instances of ripple, each triggers separately. */ @Test public void testRippleWhenSameCardNotFound() { addCard(Zone.BATTLEFIELD, playerA, "Swamp", 4); addCard(Zone.HAND, playerA, "Surging Dementia",2 ); addCard(Zone.LIBRARY, playerA, "Swamp", 4); addCard(Zone.HAND, playerB, "Island", 3); addCard(Zone.LIBRARY, playerB, "Island", 3); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Surging Dementia", playerB); setChoice(playerA, "Yes"); setStopAt(2, PhaseStep.END_TURN); execute(); assertHandCount(playerB, 3); // should have 1 less assertHandCount(playerA, 1); // after cast, one remains assertGraveyardCount(playerA, "Surging Dementia", 1); // 1 cast assertGraveyardCount(playerB, "Island", 1); // 1 discarded } @Test public void testRippleWhenSameCardFoundOnce() { removeAllCardsFromLibrary(playerA); addCard(Zone.BATTLEFIELD, playerA, "Swamp", 4); addCard(Zone.HAND, playerA, "Surging Dementia",2 ); addCard(Zone.LIBRARY, playerA, "Surging Dementia",1); addCard(Zone.LIBRARY, playerA, "Swamp", 3); addCard(Zone.HAND, playerB, "Island", 3); addCard(Zone.LIBRARY, playerB, "Island", 3); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Surging Dementia", playerB); setChoice(playerA, "Yes"); addTarget(playerA, playerB); setStopAt(2, PhaseStep.END_TURN); execute(); assertHandCount(playerB, 2); // should have 2 less assertHandCount(playerA, 1); // after cast, one remains in hand assertGraveyardCount(playerA, "Surging Dementia", 2); // 2 were cast assertGraveyardCount(playerB, "Island", 2); // 2 were discarded } @Test public void testRippleWhenSameCardFoundMoreThanOnce() { removeAllCardsFromLibrary(playerA); skipInitShuffling(); addCard(Zone.BATTLEFIELD, playerA, "Swamp", 4); addCard(Zone.HAND, playerA, "Surging Dementia",2 ); addCard(Zone.LIBRARY, playerA, "Surging Dementia",1); addCard(Zone.LIBRARY, playerA, "Swamp", 2); addCard(Zone.LIBRARY, playerA, "Surging Dementia",1); addCard(Zone.LIBRARY, playerA, "Swamp", 2); addCard(Zone.HAND, playerB, "Island", 3); addCard(Zone.LIBRARY, playerB, "Island", 3); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Surging Dementia", playerB); setChoice(playerA, "Yes"); addTarget(playerA, playerB); setStopAt(2, PhaseStep.END_TURN); execute(); assertHandCount(playerB, 1); // should have 3 less assertHandCount(playerA, 1); // after cast, one remains in hand assertGraveyardCount(playerA, "Surging Dementia", 3); // 3 were cast assertGraveyardCount(playerB, "Island", 3); // 3 were discarded } }