mirror of
https://github.com/correl/mage.git
synced 2024-12-24 03:00:14 +00:00
Add testThatCardIsHandledAsNewInstanceAfterCloudshift (issue with reference to object after multiple zone changing)
This commit is contained in:
parent
5ede7221c8
commit
cdbe09890d
4 changed files with 49 additions and 4 deletions
|
@ -125,4 +125,24 @@ public class CloudshiftTest extends CardTestPlayerBase {
|
|||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testThatCardIsHandledAsNewInstanceAfterCloudshift() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Trostani, Selesnya's Voice");
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Forest", 4);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Plains", 4);
|
||||
addCard(Zone.HAND, playerA, "Grizzly Bears");
|
||||
addCard(Zone.HAND, playerA, "Giant Growth");
|
||||
addCard(Zone.HAND, playerA, "Cloudshift");
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Grizzly Bears");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Giant Growth", "Grizzly Bears", "you gain life equal to that creature's toughness");
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cloudshift", "Grizzly Bears", null, "you gain life equal to that creature's toughness");
|
||||
|
||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
|
||||
execute();
|
||||
|
||||
assertLife(playerA, 27);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -119,7 +119,7 @@ public class PersistTest extends CardTestPlayerBase {
|
|||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Lightning Bolt", "Safehold Elite");
|
||||
// choose triggered ability order
|
||||
playerA.addChoice("When enchanted creature dies, put X 1/1 red and white Soldier creature token with haste onto the battlefield, where X is its power.");
|
||||
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Lightning Bolt", "Safehold Elite", "When enchanted creature dies, put X 1/1 red and white Soldier creature token with haste onto the battlefield, where X is its power");
|
||||
//castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Lightning Bolt", "Safehold Elite", "When enchanted creature dies, put X 1/1 red and white Soldier creature token with haste onto the battlefield, where X is its power");
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
|
|
@ -115,7 +115,7 @@ public class TestPlayer extends ComputerPlayer {
|
|||
String command = action.getAction();
|
||||
command = command.substring(command.indexOf("activate:") + 9);
|
||||
String[] groups = command.split(";");
|
||||
if (!checkSpellOnStackCondition(groups, game)) {
|
||||
if (!checkSpellOnStackCondition(groups, game) || !checkSpellOnTopOfStackCondition(groups, game)) {
|
||||
break;
|
||||
}
|
||||
for (Ability ability: this.getPlayable(game, true)) {
|
||||
|
@ -371,7 +371,21 @@ public class TestPlayer extends ComputerPlayer {
|
|||
if (groups.length > 2 && groups[2].startsWith("spellOnStack=")) {
|
||||
String spellOnStack = groups[2].substring(13);
|
||||
for (StackObject stackObject: game.getStack()) {
|
||||
if (stackObject.getStackAbility().toString().equals(spellOnStack)) {
|
||||
if (stackObject.getStackAbility().toString().indexOf(spellOnStack) >= 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean checkSpellOnTopOfStackCondition(String[] groups, Game game) {
|
||||
if (groups.length > 2 && groups[2].startsWith("spellOnTopOfStack=")) {
|
||||
String spellOnTopOFStack = groups[2].substring(18);
|
||||
if (game.getStack().size() > 0) {
|
||||
StackObject stackObject = game.getStack().getFirst();
|
||||
if (stackObject != null && stackObject.getStackAbility().toString().indexOf(spellOnTopOFStack) >= 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -384,7 +398,7 @@ public class TestPlayer extends ComputerPlayer {
|
|||
boolean result = true;
|
||||
for (int i = 1; i < groups.length; i++) {
|
||||
String group = groups[i];
|
||||
if (group.startsWith("spellOnStack")) {
|
||||
if (group.startsWith("spellOnStack") || group.startsWith("spellOnTopOfStack")) {
|
||||
break;
|
||||
}
|
||||
if (ability instanceof SpellAbility && ((SpellAbility) ability).getSpellAbilityType().equals(SpellAbilityType.SPLIT_FUSED)) {
|
||||
|
|
|
@ -671,6 +671,17 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
|
|||
player.addAction(turnNum, step, "activate:Cast " + cardName + ";target=" + targetName + ";spellOnStack=" + spellOnStack);
|
||||
}
|
||||
|
||||
public void castSpell(int turnNum, PhaseStep step, TestPlayer player, String cardName, String targetName, String spellOnStack, String spellOnTopOfStack) {
|
||||
String action = "activate:Cast " + cardName + ";target=" + targetName;
|
||||
if (spellOnStack != null && !spellOnStack.isEmpty()) {
|
||||
action += ";spellOnStack=" + spellOnStack;
|
||||
}
|
||||
if (spellOnTopOfStack != null && !spellOnTopOfStack.isEmpty()) {
|
||||
action += ";spellOnTopOfStack=" + spellOnTopOfStack;
|
||||
}
|
||||
player.addAction(turnNum, step, action);
|
||||
}
|
||||
|
||||
public void activateAbility(int turnNum, PhaseStep step, TestPlayer player, String ability) {
|
||||
player.addAction(turnNum, step, "activate:" + ability);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue