diff --git a/Mage.Common/src/main/java/mage/utils/testers/AmountTestableResult.java b/Mage.Common/src/main/java/mage/utils/testers/AmountTestableResult.java index 96b3f1892af..5b92ba19745 100644 --- a/Mage.Common/src/main/java/mage/utils/testers/AmountTestableResult.java +++ b/Mage.Common/src/main/java/mage/utils/testers/AmountTestableResult.java @@ -9,7 +9,11 @@ import java.util.List; */ public class AmountTestableResult extends BaseTestableResult { - int amount = 0; + Integer amount = null; + + boolean aiAssertEnabled = false; + int aiAssertMinAmount = 0; + int aiAssertMaxAmount = 0; public void onFinish(String resDebugSource, boolean status, List info, int amount) { this.onFinish(resDebugSource, status, info); @@ -18,12 +22,38 @@ public class AmountTestableResult extends BaseTestableResult { @Override public String getResAssert() { - return null; // TODO: implement + if (!this.aiAssertEnabled) { + return null; + } + + // not finished + if (this.amount == null) { + return null; + } + + if (!this.getResStatus()) { + return String.format("Wrong status: need %s, but get %s", + true, // res must be true all the time + this.getResStatus() + ); + } + + // wrong amount + if (this.amount < this.aiAssertMinAmount || this.amount > this.aiAssertMaxAmount) { + return String.format("Wrong amount: need [%d, %d], but get %d", + this.aiAssertMinAmount, + this.aiAssertMaxAmount, + this.amount + ); + } + + // all fine + return ""; } @Override public void onClear() { super.onClear(); - this.amount = 0; + this.amount = null; } } diff --git a/Mage.Common/src/main/java/mage/utils/testers/AnnounceXTestableDialog.java b/Mage.Common/src/main/java/mage/utils/testers/AnnounceXTestableDialog.java index 558deedab8d..5d3b6d5fd41 100644 --- a/Mage.Common/src/main/java/mage/utils/testers/AnnounceXTestableDialog.java +++ b/Mage.Common/src/main/java/mage/utils/testers/AnnounceXTestableDialog.java @@ -34,6 +34,15 @@ class AnnounceXTestableDialog extends BaseTestableDialog { this.max = max; } + private AnnounceXTestableDialog aiMustChoose(int minAmount, int maxAmount) { + // require min/max cause AI logic uses random choices + AmountTestableResult res = ((AmountTestableResult) this.getResult()); + res.aiAssertEnabled = true; + res.aiAssertMinAmount = minAmount; + res.aiAssertMaxAmount = maxAmount; + return this; + } + @Override public void showDialog(Player player, Ability source, Game game, Player opponent) { Player choosingPlayer = this.isYou ? player : opponent; @@ -51,17 +60,17 @@ class AnnounceXTestableDialog extends BaseTestableDialog { List isManas = Arrays.asList(false, true); for (boolean isYou : isYous) { for (boolean isMana : isManas) { - runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 0, 0)); - runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 0, 1)); - runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 0, 3)); - runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 0, 50)); - runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 0, 500)); - runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 1, 1)); - runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 1, 3)); - runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 1, 50)); - runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 3, 3)); - runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 3, 10)); - runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 10, 10)); + runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 0, 0).aiMustChoose(0, 0)); + runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 0, 1).aiMustChoose(0, 1)); + runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 0, 3).aiMustChoose(0, 3)); + runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 0, 50).aiMustChoose(0, 50)); + runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 0, 500).aiMustChoose(0, 500)); + runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 1, 1).aiMustChoose(1, 1)); + runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 1, 3).aiMustChoose(1, 3)); + runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 1, 50).aiMustChoose(1, 50)); + runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 3, 3).aiMustChoose(3, 3)); + runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 3, 10).aiMustChoose(3, 10)); + runner.registerDialog(new AnnounceXTestableDialog(isYou, isMana, 10, 10).aiMustChoose(10, 10)); } } } diff --git a/Mage.Common/src/main/java/mage/utils/testers/GetAmountTestableDialog.java b/Mage.Common/src/main/java/mage/utils/testers/GetAmountTestableDialog.java index 569284c239d..2007af09a56 100644 --- a/Mage.Common/src/main/java/mage/utils/testers/GetAmountTestableDialog.java +++ b/Mage.Common/src/main/java/mage/utils/testers/GetAmountTestableDialog.java @@ -36,6 +36,15 @@ class GetAmountTestableDialog extends BaseTestableDialog { this.max = max; } + private GetAmountTestableDialog aiMustChoose(int minAmount, int maxAmount) { + // require min/max cause AI logic uses random choices + AmountTestableResult res = ((AmountTestableResult) this.getResult()); + res.aiAssertEnabled = true; + res.aiAssertMinAmount = minAmount; + res.aiAssertMaxAmount = maxAmount; + return this; + } + @Override public void showDialog(Player player, Ability source, Game game, Player opponent) { Player choosingPlayer = this.isYou ? player : opponent; @@ -51,17 +60,20 @@ class GetAmountTestableDialog extends BaseTestableDialog { static public void register(TestableDialogsRunner runner) { List isYous = Arrays.asList(false, true); for (boolean isYou : isYous) { - runner.registerDialog(new GetAmountTestableDialog(isYou, 0, 0)); - runner.registerDialog(new GetAmountTestableDialog(isYou, 0, 1)); - runner.registerDialog(new GetAmountTestableDialog(isYou, 0, 3)); - runner.registerDialog(new GetAmountTestableDialog(isYou, 0, 50)); - runner.registerDialog(new GetAmountTestableDialog(isYou, 0, 500)); - runner.registerDialog(new GetAmountTestableDialog(isYou, 1, 1)); - runner.registerDialog(new GetAmountTestableDialog(isYou, 1, 3)); - runner.registerDialog(new GetAmountTestableDialog(isYou, 1, 50)); - runner.registerDialog(new GetAmountTestableDialog(isYou, 3, 3)); - runner.registerDialog(new GetAmountTestableDialog(isYou, 3, 10)); - runner.registerDialog(new GetAmountTestableDialog(isYou, 10, 10)); + // TODO: add good and bad effects: + // - on good: choose random big value + // - on bad: choose lower value + runner.registerDialog(new GetAmountTestableDialog(isYou, 0, 0).aiMustChoose(0, 0)); + runner.registerDialog(new GetAmountTestableDialog(isYou, 0, 1).aiMustChoose(0, 1)); + runner.registerDialog(new GetAmountTestableDialog(isYou, 0, 3).aiMustChoose(0, 3)); + runner.registerDialog(new GetAmountTestableDialog(isYou, 0, 50).aiMustChoose(0, 50)); + runner.registerDialog(new GetAmountTestableDialog(isYou, 0, 500).aiMustChoose(0, 500)); + runner.registerDialog(new GetAmountTestableDialog(isYou, 1, 1).aiMustChoose(1, 1)); + runner.registerDialog(new GetAmountTestableDialog(isYou, 1, 3).aiMustChoose(1, 3)); + runner.registerDialog(new GetAmountTestableDialog(isYou, 1, 50).aiMustChoose(1, 50)); + runner.registerDialog(new GetAmountTestableDialog(isYou, 3, 3).aiMustChoose(3, 3)); + runner.registerDialog(new GetAmountTestableDialog(isYou, 3, 10).aiMustChoose(3, 10)); + runner.registerDialog(new GetAmountTestableDialog(isYou, 10, 10).aiMustChoose(10, 10)); } } }