[M3C] Desert Warfare tests

This commit is contained in:
balazskristof 2025-05-17 14:48:15 +02:00
parent 0352d84ca5
commit 1b80010e68
No known key found for this signature in database
GPG key ID: 15994E5E8D5F877B
2 changed files with 278 additions and 9 deletions

View file

@ -5,10 +5,8 @@ import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl; import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
import mage.abilities.common.delayed.AtTheBeginOfPlayersNextEndStepDelayedTriggeredAbility;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
@ -24,7 +22,6 @@ import mage.constants.*;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.events.SacrificedPermanentEvent;
import mage.game.events.ZoneChangeEvent; import mage.game.events.ZoneChangeEvent;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.game.permanent.token.SandWarriorToken; import mage.game.permanent.token.SandWarriorToken;
@ -91,10 +88,6 @@ class DesertWarfareTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public boolean checkTrigger(GameEvent event, Game game) { public boolean checkTrigger(GameEvent event, Game game) {
if (!(event instanceof ZoneChangeEvent) && !(event instanceof SacrificedPermanentEvent)) {
return false;
}
Effect effect = new ReturnToBattlefieldUnderYourControlTargetEffect();
if (event instanceof ZoneChangeEvent) { if (event instanceof ZoneChangeEvent) {
ZoneChangeEvent zce = (ZoneChangeEvent) event; ZoneChangeEvent zce = (ZoneChangeEvent) event;
Card card = game.getCard(event.getTargetId()); Card card = game.getCard(event.getTargetId());
@ -106,7 +99,6 @@ class DesertWarfareTriggeredAbility extends TriggeredAbilityImpl {
&& zce.getFromZone() != Zone.LIBRARY)) { && zce.getFromZone() != Zone.LIBRARY)) {
return false; return false;
} }
effect.setTargetPointer(new FixedTarget(card, game));
} else { } else {
Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId()); Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId());
if (permanent == null if (permanent == null
@ -114,8 +106,9 @@ class DesertWarfareTriggeredAbility extends TriggeredAbilityImpl {
|| !permanent.hasSubtype(SubType.DESERT, game)) { || !permanent.hasSubtype(SubType.DESERT, game)) {
return false; 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); game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect, TargetController.YOU), this);
return true; return true;
} }

View file

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