AI, tests: added testable use cases for getAmount and announceX dialogs (part of #13638, #13766)

This commit is contained in:
Oleg Agafonov 2025-06-29 18:13:27 +04:00
parent 6568c1f18a
commit b4519a3361
3 changed files with 76 additions and 25 deletions

View file

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

View file

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

View file

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