From e7984c6dd4214033a8bc499f68febaab436e3476 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Thu, 14 Mar 2019 05:42:29 +0400 Subject: [PATCH] Test framework: added `waitStackResolved` command to wait stack resolved before execute next command on the same step (devs can cast and check any number of commands without switch to next step). --- .../java/org/mage/test/player/TestPlayer.java | 26 ++++++++++++------- .../base/impl/CardTestPlayerAPIImpl.java | 11 ++++++++ 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java index 6945700a46d..d139d183aac 100644 --- a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java +++ b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java @@ -270,9 +270,7 @@ public class TestPlayer implements Player { String spellOnTopOFStack = groups[2].substring(18); if (!game.getStack().isEmpty()) { StackObject stackObject = game.getStack().getFirst(); - if (stackObject != null && stackObject.getStackAbility().toString().contains(spellOnTopOFStack)) { - return true; - } + return stackObject != null && stackObject.getStackAbility().toString().contains(spellOnTopOFStack); } return false; } else if (groups[2].startsWith("manaInPool=")) { @@ -577,6 +575,14 @@ public class TestPlayer implements Player { break; } } + } else if (action.getAction().startsWith("waitStackResolved")) { + if (game.getStack().isEmpty()) { + // can use next command + actions.remove(action); + } else { + // need pass to empty stack + break; + } } else if (action.getAction().startsWith("playerAction:")) { String command = action.getAction(); command = command.substring(command.indexOf("playerAction:") + 13); @@ -1371,7 +1377,7 @@ public class TestPlayer implements Player { } if (permanent.getName().equals(targetName)) { - if (target.isNotTarget() || ((TargetPermanent) target).canTarget(computerPlayer.getId(), permanent.getId(), source, game)) { + if (target.isNotTarget() || target.canTarget(computerPlayer.getId(), permanent.getId(), source, game)) { if ((permanent.isCopy() && !originOnly) || (!permanent.isCopy() && !copyOnly)) { target.add(permanent.getId(), game); targetFound = true; @@ -1379,7 +1385,7 @@ public class TestPlayer implements Player { } } } else if ((permanent.getName() + '-' + permanent.getExpansionSetCode()).equals(targetName)) { - if (target.isNotTarget() || ((TargetPermanent) target).canTarget(computerPlayer.getId(), permanent.getId(), source, game)) { + if (target.isNotTarget() || target.canTarget(computerPlayer.getId(), permanent.getId(), source, game)) { if ((permanent.isCopy() && !originOnly) || (!permanent.isCopy() && !copyOnly)) { target.add(permanent.getId(), game); targetFound = true; @@ -1400,7 +1406,7 @@ public class TestPlayer implements Player { for (Player player : game.getPlayers().values()) { for (String choose2 : choices) { if (player.getName().equals(choose2)) { - if (((TargetPlayer) target).canTarget(computerPlayer.getId(), player.getId(), null, game) && !target.getTargets().contains(player.getId())) { + if (target.canTarget(computerPlayer.getId(), player.getId(), null, game) && !target.getTargets().contains(player.getId())) { target.add(player.getId(), game); choices.remove(choose2); return true; @@ -1648,7 +1654,7 @@ public class TestPlayer implements Player { for (String targetName : targetList) { for (Card card : computerPlayer.getHand().getCards(((TargetCardInHand) target).getFilter(), game)) { if (card.getName().equals(targetName) || (card.getName() + '-' + card.getExpansionSetCode()).equals(targetName)) { - if (((TargetCardInHand) target).canTarget(abilityControllerId, card.getId(), source, game) && !target.getTargets().contains(card.getId())) { + if (target.canTarget(abilityControllerId, card.getId(), source, game) && !target.getTargets().contains(card.getId())) { target.add(card.getId(), game); targetFound = true; break; @@ -1857,7 +1863,7 @@ public class TestPlayer implements Player { //Assert.fail("Wrong choice"); } - this.chooseStrictModeFailed(game,abilities.stream().map(this::getInfo).collect(Collectors.joining("; "))); + this.chooseStrictModeFailed(game, abilities.stream().map(this::getInfo).collect(Collectors.joining("; "))); return computerPlayer.chooseTriggeredAbility(abilities, game); } @@ -1914,7 +1920,7 @@ public class TestPlayer implements Player { } } - this.chooseStrictModeFailed(game,getInfo(ability) + "; " + message); + this.chooseStrictModeFailed(game, getInfo(ability) + "; " + message); return computerPlayer.announceXCost(min, max, message, game, ability, null); } @@ -3115,7 +3121,7 @@ public class TestPlayer implements Player { } } - this.chooseStrictModeFailed(game,getInfo(source) + "; " + getInfo(target)); + this.chooseStrictModeFailed(game, getInfo(source) + "; " + getInfo(target)); return computerPlayer.chooseTargetAmount(outcome, target, source, game); } diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java index 93d67373def..9e47af7659c 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java @@ -1299,6 +1299,10 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement player.addAction(turnNum, step, "activate:Cast " + cardName + "$targetPlayer=" + target.getName() + "$manaInPool=" + manaInPool); } + public void waitStackResolved(int turnNum, PhaseStep step, TestPlayer player) { + player.addAction(turnNum, step, "waitStackResolved"); + } + /** * Rollback the number of given turns: 0 = rollback to the start of the * current turn @@ -1574,4 +1578,11 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement Assert.assertEquals("Wrong damage received: ", expected, p.getDamage()); } } + + public void waitStackResolved(int turnNum, PhaseStep step) { + if (playerA != null) waitStackResolved(turnNum, step, playerA); + if (playerB != null) waitStackResolved(turnNum, step, playerB); + if (playerC != null) waitStackResolved(turnNum, step, playerC); + if (playerD != null) waitStackResolved(turnNum, step, playerD); + } }