Fixed test, fixed some code warnings

This commit is contained in:
Oleg Agafonov 2023-02-25 15:21:48 +04:00
parent 5c30467c48
commit e8ffe90d41
10 changed files with 21 additions and 20 deletions

View file

@ -49,6 +49,8 @@ public final class FirstComeFirstServed extends CardImpl {
} }
class FirstComeFirstServedPredicate implements Predicate<Permanent> { class FirstComeFirstServedPredicate implements Predicate<Permanent> {
private static final Pattern partNumberPattern = Pattern.compile("\\d+");
@Override @Override
public boolean apply(Permanent input, Game game) { public boolean apply(Permanent input, Game game) {
@ -67,8 +69,11 @@ class FirstComeFirstServedPredicate implements Predicate<Permanent> {
public int parseCardNumber(Permanent input) { public int parseCardNumber(Permanent input) {
String str = input.getCardNumber(); String str = input.getCardNumber();
Matcher matcher = Pattern.compile("\\d+").matcher(str); Matcher matcher = partNumberPattern.matcher(str);
matcher.find(); if (matcher.find()) {
return Integer.parseInt(matcher.group()); return Integer.parseInt(matcher.group());
} else {
throw new IllegalStateException("Unknown card number format [" + input.getCardNumber() + "] for permanent " + input.getName());
}
} }
} }

View file

@ -166,7 +166,7 @@ class KotoseTheSilentSpiderWatcher extends Watcher {
morMap.values() morMap.values()
.stream() .stream()
.flatMap(Collection::stream) .flatMap(Collection::stream)
.map(set -> set.removeIf(mor -> !mor.zoneCounterIsCurrent(game))); .forEach(set -> set.removeIf(mor -> !mor.zoneCounterIsCurrent(game)));
morMap.values().removeIf(Set::isEmpty); morMap.values().removeIf(Set::isEmpty);
return; return;
} }

View file

@ -119,7 +119,6 @@ class MaddeningImpCreateDelayedTriggeredAbilityEffect extends OneShotEffect {
} }
AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility
= new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new MaddeningImpDelayedDestroyEffect(activeCreatures), TargetController.ANY, new InvertCondition(TargetAttackedThisTurnCondition.instance)); = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new MaddeningImpDelayedDestroyEffect(activeCreatures), TargetController.ANY, new InvertCondition(TargetAttackedThisTurnCondition.instance));
delayedAbility.getDuration();
game.addDelayedTriggeredAbility(delayedAbility, source); game.addDelayedTriggeredAbility(delayedAbility, source);
return true; return true;
} }

View file

@ -116,7 +116,7 @@ class NashiMoonSagesScionWatcher extends Watcher {
morMap.values() morMap.values()
.stream() .stream()
.flatMap(Collection::stream) .flatMap(Collection::stream)
.map(set -> set.removeIf(mor -> !mor.zoneCounterIsCurrent(game))); .forEach(set -> set.removeIf(mor -> !mor.zoneCounterIsCurrent(game)));
morMap.values().removeIf(Set::isEmpty); morMap.values().removeIf(Set::isEmpty);
return; return;
} }

View file

@ -104,7 +104,6 @@ class NettlingImpDelayedDestroyEffect extends OneShotEffect {
effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game)); effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game));
AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility
= new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect, TargetController.ANY, new InvertCondition(TargetAttackedThisTurnCondition.instance)); = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect, TargetController.ANY, new InvertCondition(TargetAttackedThisTurnCondition.instance));
delayedAbility.getDuration();
delayedAbility.getTargets().addAll(source.getTargets()); delayedAbility.getTargets().addAll(source.getTargets());
game.addDelayedTriggeredAbility(delayedAbility, source); game.addDelayedTriggeredAbility(delayedAbility, source);
return true; return true;

View file

@ -105,7 +105,6 @@ class NorrittDelayedDestroyEffect extends OneShotEffect {
effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game)); effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game));
AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility
= new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect, TargetController.ANY, new InvertCondition(TargetAttackedThisTurnCondition.instance)); = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect, TargetController.ANY, new InvertCondition(TargetAttackedThisTurnCondition.instance));
delayedAbility.getDuration();
delayedAbility.getTargets().addAll(source.getTargets()); delayedAbility.getTargets().addAll(source.getTargets());
game.addDelayedTriggeredAbility(delayedAbility, source); game.addDelayedTriggeredAbility(delayedAbility, source);
return true; return true;

View file

@ -110,7 +110,7 @@ class StanggEchoWarriorEffect extends OneShotEffect {
CreateTokenCopyTargetEffect effect = new CreateTokenCopyTargetEffect(); CreateTokenCopyTargetEffect effect = new CreateTokenCopyTargetEffect();
effect.setSavedPermanent(attachment); effect.setSavedPermanent(attachment);
effect.apply(game, source); effect.apply(game, source);
effect.getAddedPermanents().stream().map(t -> permanent.addAttachment(t.getId(), source, game)); effect.getAddedPermanents().forEach(t -> permanent.addAttachment(t.getId(), source, game));
toSacrifice.addAll(effect.getAddedPermanents()); toSacrifice.addAll(effect.getAddedPermanents());
} }
} }

View file

@ -4,6 +4,7 @@ import mage.cards.s.Storyweave;
import mage.constants.PhaseStep; import mage.constants.PhaseStep;
import mage.constants.Zone; import mage.constants.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase; import org.mage.test.serverside.base.CardTestPlayerBase;
@ -56,12 +57,12 @@ public class StoryweaveTest extends CardTestPlayerBase {
assertCounterCount(playerA, fang, CounterType.P1P1, 0); assertCounterCount(playerA, fang, CounterType.P1P1, 0);
assertPermanentCount(playerA, "Centaur Token", 2); assertPermanentCount(playerA, "Centaur Token", 2);
currentGame Assert.assertTrue(currentGame
.getBattlefield() .getBattlefield()
.getAllActivePermanents() .getAllActivePermanents()
.stream() .stream()
.filter(permanent -> "Centaur Token".equals(permanent.getName())) .filter(permanent -> "Centaur Token".equals(permanent.getName()))
.noneMatch(permanent -> permanent.getCounters(currentGame).getCount(CounterType.P1P1) != 2); .noneMatch(permanent -> permanent.getCounters(currentGame).getCount(CounterType.P1P1) != 2));
} }
@Test @Test
@ -80,11 +81,11 @@ public class StoryweaveTest extends CardTestPlayerBase {
assertCounterCount(playerA, fang, CounterType.P1P1, 2); assertCounterCount(playerA, fang, CounterType.P1P1, 2);
assertPermanentCount(playerA, "Centaur Token", 2); assertPermanentCount(playerA, "Centaur Token", 2);
currentGame Assert.assertTrue(currentGame
.getBattlefield() .getBattlefield()
.getAllActivePermanents() .getAllActivePermanents()
.stream() .stream()
.filter(permanent -> "Centaur Token".equals(permanent.getName())) .filter(permanent -> "Centaur Token".equals(permanent.getName()))
.noneMatch(permanent -> permanent.getCounters(currentGame).getCount(CounterType.P1P1) != 0); .noneMatch(permanent -> permanent.getCounters(currentGame).getCount(CounterType.P1P1) != 0));
} }
} }

View file

@ -111,11 +111,9 @@ class BecomeMonstrousSourceEffect extends OneShotEffect {
} }
private String setText(int monstrosityValue) { private String setText(int monstrosityValue) {
StringBuilder sb = new StringBuilder("Monstrosity "); return "Monstrosity " + (monstrosityValue == Integer.MAX_VALUE ? "X" : monstrosityValue) +
sb.append(monstrosityValue == Integer.MAX_VALUE ? "X" : monstrosityValue) ". <i>(If this creature isn't monstrous, put " +
.append(". <i>(If this creature isn't monstrous, put ") (monstrosityValue == Integer.MAX_VALUE ? "X" : CardUtil.numberToText(monstrosityValue)) +
.append(monstrosityValue == Integer.MAX_VALUE ? "X" : CardUtil.numberToText(monstrosityValue)) " +1/+1 counters on it and it becomes monstrous.)</i>";
.append(" +1/+1 counters on it and it becomes monstrous.)</i>").toString();
return sb.toString();
} }
} }

View file

@ -103,7 +103,7 @@ public abstract class TargetImpl implements Target {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
int min = getMinNumberOfTargets(); int min = getMinNumberOfTargets();
int max = getMaxNumberOfTargets(); int max = getMaxNumberOfTargets();
if (min != 1 || max != 1) { if (!getTargetName().startsWith("X") && (min != 1 || max != 1)) {
if (min < max && max != Integer.MAX_VALUE) { if (min < max && max != Integer.MAX_VALUE) {
if (min == 1 && max == 2) { if (min == 1 && max == 2) {
sb.append("one or "); sb.append("one or ");