mirror of
https://github.com/magefree/mage.git
synced 2025-12-24 20:41:58 -08:00
add Shifting Woodland Test ; one ignored to reproduce #12433 bug
This commit is contained in:
parent
d2f5379d35
commit
9c4b11368e
1 changed files with 125 additions and 0 deletions
|
|
@ -0,0 +1,125 @@
|
|||
package org.mage.test.cards.single.mh3;
|
||||
|
||||
import mage.cards.Card;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author Susucr
|
||||
*/
|
||||
public class ShiftingWoodlandTest extends CardTestPlayerBase {
|
||||
|
||||
/**
|
||||
* {@link mage.cards.s.ShiftingWoodland Shifting Woodland} Shifting Woodland
|
||||
* Land
|
||||
* Shifting Woodland enters the battlefield tapped unless you control a Forest.
|
||||
* {T}: Add {G}.
|
||||
* Delirium — {2}{G}{G}: Shifting Woodland becomes a copy of target permanent card in your graveyard until end of turn. Activate only if there are four or more card types among cards in your graveyard.
|
||||
*/
|
||||
private static final String woodland = "Shifting Woodland";
|
||||
|
||||
@Test
|
||||
public void test_NoDelirium() {
|
||||
setStrictChooseMode(true);
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Forest", 4);
|
||||
addCard(Zone.BATTLEFIELD, playerA, woodland);
|
||||
addCard(Zone.GRAVEYARD, playerA, "Grizzly Bears");
|
||||
addCard(Zone.GRAVEYARD, playerA, "Plains");
|
||||
addCard(Zone.GRAVEYARD, playerA, "Memnite");
|
||||
|
||||
checkPlayableAbility("no Delirium condition", 1, PhaseStep.PRECOMBAT_MAIN, playerA, "<i>Delirium</i> — {2}{G}{G}:", false);
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
execute();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_Copy_StopEndOfTurn() {
|
||||
setStrictChooseMode(true);
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Yavimaya Coast", 4); // to be sure not to activate Woodland
|
||||
addCard(Zone.BATTLEFIELD, playerA, woodland);
|
||||
addCard(Zone.GRAVEYARD, playerA, "Grizzly Bears");
|
||||
addCard(Zone.GRAVEYARD, playerA, "Plains");
|
||||
addCard(Zone.GRAVEYARD, playerA, "Memnite");
|
||||
addCard(Zone.GRAVEYARD, playerA, "Divination");
|
||||
|
||||
activateManaAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Add {G}. {this} deals 1 damage to you.", 4);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "<i>Delirium</i> — {2}{G}{G}:", "Grizzly Bears");
|
||||
|
||||
attack(1, playerA, "Grizzly Bears", playerB);
|
||||
|
||||
setStopAt(2, PhaseStep.UPKEEP);
|
||||
execute();
|
||||
|
||||
assertLife(playerA, 20 - 4);
|
||||
assertLife(playerB, 20 - 2);
|
||||
assertPermanentCount(playerA, woodland, 1);
|
||||
assertType(woodland, CardType.CREATURE, false);
|
||||
assertType(woodland, CardType.LAND, true);
|
||||
assertColor(playerA, woodland, "Green", false);
|
||||
}
|
||||
|
||||
@Ignore // CopyEffect is not discarded properly. See #12433
|
||||
@Test
|
||||
public void test_Copy_StopOnLTB() {
|
||||
setStrictChooseMode(true);
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Yavimaya Coast", 4); // to be sure not to activate Woodland
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2);
|
||||
addCard(Zone.BATTLEFIELD, playerA, woodland);
|
||||
addCard(Zone.HAND, playerA, "Shoot the Sheriff");
|
||||
addCard(Zone.GRAVEYARD, playerA, "Grizzly Bears");
|
||||
addCard(Zone.GRAVEYARD, playerA, "Plains");
|
||||
addCard(Zone.GRAVEYARD, playerA, "Memnite");
|
||||
addCard(Zone.GRAVEYARD, playerA, "Divination");
|
||||
|
||||
activateManaAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Add {G}. {this} deals 1 damage to you.", 4);
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "<i>Delirium</i> — {2}{G}{G}:", "Grizzly Bears");
|
||||
|
||||
attack(1, playerA, "Grizzly Bears", playerB);
|
||||
|
||||
castSpell(1, PhaseStep.END_COMBAT, playerA, "Shoot the Sheriff", "Grizzly Bears", true);
|
||||
|
||||
runCode("check that the copy effect ended", 1, PhaseStep.END_COMBAT, playerA, (info, player, game) -> {
|
||||
Card card = player.getGraveyard().getCards(game).stream().filter(c -> c.getName().equals(woodland)).findFirst().orElse(null);
|
||||
if (card == null) {
|
||||
Assert.fail("Shifting Woodland is not in the graveyard");
|
||||
}
|
||||
List<String> failReasons = new ArrayList<>();
|
||||
if (!card.isLand(game) || card.getCardType(game).size() != 1) {
|
||||
String type = card.getCardType(game).stream().map(CardType::toString).collect(Collectors.joining(", "));
|
||||
failReasons.add("types is not right, should be back to land, but is [" + type + "]");
|
||||
}
|
||||
if (!card.getSubtype(game).isEmpty()) {
|
||||
String type = card.getSubtype(game).stream().map(SubType::toString).collect(Collectors.joining(", "));
|
||||
failReasons.add("subtypes is not right, should be back to none, but is [" + type + "]");
|
||||
}
|
||||
if (!card.getColor(game).isColorless()) {
|
||||
failReasons.add("color is not right, should be back to colorless, but is " + card.getColor(game));
|
||||
}
|
||||
if (!failReasons.isEmpty()) {
|
||||
String failText = "Shifting Woodland's copy effect did not end properly:\n\t— " + String.join("\n\t— ", failReasons);
|
||||
Assert.fail(failText);
|
||||
}
|
||||
});
|
||||
|
||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
execute();
|
||||
|
||||
assertLife(playerA, 20 - 4);
|
||||
assertLife(playerB, 20 - 2);
|
||||
assertGraveyardCount(playerA, woodland, 1);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue