Add testThatCardIsHandledAsNewInstanceAfterCloudshift (issue with reference to object after multiple zone changing)

This commit is contained in:
Quercitron 2014-08-15 02:41:49 +04:00
parent 5ede7221c8
commit cdbe09890d
4 changed files with 49 additions and 4 deletions

View file

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

View file

@ -119,7 +119,7 @@ public class PersistTest extends CardTestPlayerBase {
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Lightning Bolt", "Safehold Elite"); castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Lightning Bolt", "Safehold Elite");
// choose triggered ability order // 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."); 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); setStopAt(1, PhaseStep.END_TURN);
execute(); execute();

View file

@ -115,7 +115,7 @@ public class TestPlayer extends ComputerPlayer {
String command = action.getAction(); String command = action.getAction();
command = command.substring(command.indexOf("activate:") + 9); command = command.substring(command.indexOf("activate:") + 9);
String[] groups = command.split(";"); String[] groups = command.split(";");
if (!checkSpellOnStackCondition(groups, game)) { if (!checkSpellOnStackCondition(groups, game) || !checkSpellOnTopOfStackCondition(groups, game)) {
break; break;
} }
for (Ability ability: this.getPlayable(game, true)) { for (Ability ability: this.getPlayable(game, true)) {
@ -371,7 +371,21 @@ public class TestPlayer extends ComputerPlayer {
if (groups.length > 2 && groups[2].startsWith("spellOnStack=")) { if (groups.length > 2 && groups[2].startsWith("spellOnStack=")) {
String spellOnStack = groups[2].substring(13); String spellOnStack = groups[2].substring(13);
for (StackObject stackObject: game.getStack()) { 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; return true;
} }
} }
@ -384,7 +398,7 @@ public class TestPlayer extends ComputerPlayer {
boolean result = true; boolean result = true;
for (int i = 1; i < groups.length; i++) { for (int i = 1; i < groups.length; i++) {
String group = groups[i]; String group = groups[i];
if (group.startsWith("spellOnStack")) { if (group.startsWith("spellOnStack") || group.startsWith("spellOnTopOfStack")) {
break; break;
} }
if (ability instanceof SpellAbility && ((SpellAbility) ability).getSpellAbilityType().equals(SpellAbilityType.SPLIT_FUSED)) { if (ability instanceof SpellAbility && ((SpellAbility) ability).getSpellAbilityType().equals(SpellAbilityType.SPLIT_FUSED)) {

View file

@ -671,6 +671,17 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
player.addAction(turnNum, step, "activate:Cast " + cardName + ";target=" + targetName + ";spellOnStack=" + spellOnStack); 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) { public void activateAbility(int turnNum, PhaseStep step, TestPlayer player, String ability) {
player.addAction(turnNum, step, "activate:" + ability); player.addAction(turnNum, step, "activate:" + ability);
} }