mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
[M3C] Desert Warfare tests
This commit is contained in:
parent
0352d84ca5
commit
1b80010e68
2 changed files with 278 additions and 9 deletions
|
|
@ -5,10 +5,8 @@ import java.util.UUID;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
||||
import mage.abilities.common.delayed.AtTheBeginOfPlayersNextEndStepDelayedTriggeredAbility;
|
||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
||||
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
|
|
@ -24,7 +22,6 @@ import mage.constants.*;
|
|||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.SacrificedPermanentEvent;
|
||||
import mage.game.events.ZoneChangeEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.permanent.token.SandWarriorToken;
|
||||
|
|
@ -91,10 +88,6 @@ class DesertWarfareTriggeredAbility extends TriggeredAbilityImpl {
|
|||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
if (!(event instanceof ZoneChangeEvent) && !(event instanceof SacrificedPermanentEvent)) {
|
||||
return false;
|
||||
}
|
||||
Effect effect = new ReturnToBattlefieldUnderYourControlTargetEffect();
|
||||
if (event instanceof ZoneChangeEvent) {
|
||||
ZoneChangeEvent zce = (ZoneChangeEvent) event;
|
||||
Card card = game.getCard(event.getTargetId());
|
||||
|
|
@ -106,7 +99,6 @@ class DesertWarfareTriggeredAbility extends TriggeredAbilityImpl {
|
|||
&& zce.getFromZone() != Zone.LIBRARY)) {
|
||||
return false;
|
||||
}
|
||||
effect.setTargetPointer(new FixedTarget(card, game));
|
||||
} else {
|
||||
Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId());
|
||||
if (permanent == null
|
||||
|
|
@ -114,8 +106,9 @@ class DesertWarfareTriggeredAbility extends TriggeredAbilityImpl {
|
|||
|| !permanent.hasSubtype(SubType.DESERT, game)) {
|
||||
return false;
|
||||
}
|
||||
effect.setTargetPointer(new FixedTarget(permanent, game));
|
||||
}
|
||||
Effect effect = new ReturnToBattlefieldUnderYourControlTargetEffect();
|
||||
effect.setTargetPointer(new FixedTarget(event.getTargetId(), game));
|
||||
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect, TargetController.YOU), this);
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,276 @@
|
|||
package org.mage.test.cards.single.m3c;
|
||||
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.Zone;
|
||||
import org.junit.Test;
|
||||
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||
|
||||
/**
|
||||
* @author balazskristof
|
||||
*/
|
||||
public class DesertWarfareTest extends CardTestPlayerBase {
|
||||
|
||||
@Test
|
||||
public void TestTokens() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Desert Warfare");
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Desert", 4);
|
||||
addCard(Zone.HAND, playerA, "Desert");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
execute();
|
||||
assertTokenCount(playerA, "Sand Warrior Token", 0);
|
||||
|
||||
setStopAt(2, PhaseStep.BEGIN_COMBAT);
|
||||
execute();
|
||||
assertTokenCount(playerA, "Sand Warrior Token", 0);
|
||||
|
||||
playLand(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Desert");
|
||||
setStopAt(3, PhaseStep.BEGIN_COMBAT);
|
||||
execute();
|
||||
assertTokenCount(playerA, "Sand Warrior Token", 5);
|
||||
|
||||
setStopAt(4, PhaseStep.BEGIN_COMBAT);
|
||||
execute();
|
||||
assertTokenCount(playerA, "Sand Warrior Token", 5);
|
||||
|
||||
setStopAt(5, PhaseStep.BEGIN_COMBAT);
|
||||
execute();
|
||||
assertTokenCount(playerA, "Sand Warrior Token", 10);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestSacrifice() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Desert Warfare");
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Desert");
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Akki Avalanchers");
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Sacrifice");
|
||||
setChoice(playerA, "Desert");
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
execute();
|
||||
|
||||
assertGraveyardCount(playerA, "Desert", 1);
|
||||
assertPermanentCount(playerA, "Desert", 0);
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
assertGraveyardCount(playerA, "Desert", 0);
|
||||
assertPermanentCount(playerA, "Desert", 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestSacrificeOpponentsTurn() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Desert Warfare");
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Desert");
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Akki Avalanchers");
|
||||
|
||||
activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerA, "Sacrifice");
|
||||
setChoice(playerA, "Desert");
|
||||
|
||||
setStopAt(2, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
assertGraveyardCount(playerA, "Desert", 1);
|
||||
assertPermanentCount(playerA, "Desert", 0);
|
||||
|
||||
setStopAt(3, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
assertGraveyardCount(playerA, "Desert", 0);
|
||||
assertPermanentCount(playerA, "Desert", 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestDestroy() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Desert Warfare");
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Desert");
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Mountain", 4);
|
||||
addCard(Zone.HAND, playerB, "Volcanic Upheaval");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Volcanic Upheaval");
|
||||
addTarget(playerB, "Desert");
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
assertGraveyardCount(playerA, "Desert", 1);
|
||||
assertPermanentCount(playerA, "Desert", 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestDiscard() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Desert Warfare");
|
||||
|
||||
skipInitShuffling();
|
||||
addCard(Zone.LIBRARY, playerA, "Island");
|
||||
addCard(Zone.LIBRARY, playerA, "Desert");
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Mountain");
|
||||
addCard(Zone.HAND, playerA, "Mountain", 2);
|
||||
addCard(Zone.HAND, playerA, "Faithless Looting");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Faithless Looting");
|
||||
setChoice(playerA, "Island^Desert");
|
||||
//setChoice(playerA, "Desert");
|
||||
|
||||
setStrictChooseMode(true);
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
assertGraveyardCount(playerA, "Desert", 0);
|
||||
assertGraveyardCount(playerA, "Island", 1);
|
||||
assertPermanentCount(playerA, "Desert", 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestDiscardOpponentsTurn() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Desert Warfare");
|
||||
|
||||
skipInitShuffling();
|
||||
addCard(Zone.LIBRARY, playerA, "Island");
|
||||
addCard(Zone.LIBRARY, playerA, "Desert");
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Mountain");
|
||||
addCard(Zone.HAND, playerA, "Mountain", 2);
|
||||
addCard(Zone.HAND, playerA, "Faithless Looting");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Faithless Looting");
|
||||
setChoice(playerA, "Island");
|
||||
setChoice(playerA, "Desert");
|
||||
|
||||
setStrictChooseMode(true);
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
execute();
|
||||
assertGraveyardCount(playerA, "Desert", 0);
|
||||
assertGraveyardCount(playerA, "Island", 1);
|
||||
assertPermanentCount(playerA, "Desert", 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestCycling() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Desert Warfare");
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2);
|
||||
addCard(Zone.HAND, playerA, "Desert of the Fervent");
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cycling {1}{R}");
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
assertGraveyardCount(playerA, "Desert of the Fervent", 0);
|
||||
assertPermanentCount(playerA, "Desert of the Fervent", 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestCyclingOpponentsTurn() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Desert Warfare");
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2);
|
||||
addCard(Zone.HAND, playerA, "Desert of the Fervent");
|
||||
|
||||
activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerA, "Cycling {1}{R}");
|
||||
|
||||
setStopAt(2, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
assertGraveyardCount(playerA, "Desert of the Fervent", 1);
|
||||
assertPermanentCount(playerA, "Desert of the Fervent", 0);
|
||||
|
||||
setStopAt(3, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
assertGraveyardCount(playerA, "Desert of the Fervent", 0);
|
||||
assertPermanentCount(playerA, "Desert of the Fervent", 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestMill() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Desert Warfare");
|
||||
|
||||
skipInitShuffling();
|
||||
addCard(Zone.LIBRARY, playerA, "Plains");
|
||||
addCard(Zone.LIBRARY, playerA, "Island");
|
||||
addCard(Zone.LIBRARY, playerA, "Desert");
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Swamp");
|
||||
addCard(Zone.HAND, playerA, "Stitcher's Supplier");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Stitcher's Supplier");
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
assertGraveyardCount(playerA, "Desert", 0);
|
||||
assertPermanentCount(playerA, "Desert", 1);
|
||||
assertGraveyardCount(playerA, "Plains", 1);
|
||||
assertGraveyardCount(playerA, "Island", 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestMillOpponentsTurn() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Desert Warfare");
|
||||
|
||||
skipInitShuffling();
|
||||
addCard(Zone.LIBRARY, playerA, "Plains");
|
||||
addCard(Zone.LIBRARY, playerA, "Island");
|
||||
addCard(Zone.LIBRARY, playerA, "Desert");
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Stitcher's Supplier");
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerB, "Mountain");
|
||||
addCard(Zone.HAND, playerB, "Shock");
|
||||
|
||||
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Shock");
|
||||
addTarget(playerB, "Stitcher's Supplier");
|
||||
|
||||
setStopAt(2, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
assertPermanentCount(playerA, "Desert", 0);
|
||||
assertGraveyardCount(playerA, "Desert", 1);
|
||||
assertGraveyardCount(playerA, "Plains", 1);
|
||||
assertGraveyardCount(playerA, "Island", 1);
|
||||
|
||||
setStopAt(3, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
assertPermanentCount(playerA, "Desert", 1);
|
||||
assertGraveyardCount(playerA, "Desert", 0);
|
||||
assertGraveyardCount(playerA, "Plains", 1);
|
||||
assertGraveyardCount(playerA, "Island", 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestDuneChanter() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Desert Warfare");
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Dune Chanter");
|
||||
|
||||
skipInitShuffling();
|
||||
addCard(Zone.LIBRARY, playerA, "Plains");
|
||||
addCard(Zone.LIBRARY, playerA, "Island");
|
||||
addCard(Zone.LIBRARY, playerA, "Desert");
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Swamp");
|
||||
addCard(Zone.HAND, playerA, "Stitcher's Supplier");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Stitcher's Supplier");
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
assertGraveyardCount(playerA, "Desert", 0);
|
||||
assertGraveyardCount(playerA, "Plains", 0);
|
||||
assertGraveyardCount(playerA, "Island", 0);
|
||||
assertPermanentCount(playerA, "Desert", 1);
|
||||
assertPermanentCount(playerA, "Plains", 1);
|
||||
assertPermanentCount(playerA, "Island", 1);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue