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).

This commit is contained in:
Oleg Agafonov 2019-03-14 05:42:29 +04:00
parent 43ba6685eb
commit e7984c6dd4
2 changed files with 27 additions and 10 deletions

View file

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

View file

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