diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/continuous/SwarmSurgeTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/continuous/SwarmSurgeTest.java new file mode 100644 index 00000000000..6812117331e --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/continuous/SwarmSurgeTest.java @@ -0,0 +1,78 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package org.mage.test.cards.continuous; + +import mage.abilities.keyword.FirstStrikeAbility; +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.filter.Filter; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class SwarmSurgeTest extends CardTestPlayerBase { + + @Test + public void testSwarmSurge() { + addCard(Zone.BATTLEFIELD, playerA, "Forest", 1); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 9); + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); + // Devoid + // When Birthing Hulk enters the battlefield, put two 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have "Sacrifice this creature: Add {C} to your mana pool." + // {1}{C}: Regenerate Birthing Hulk. + addCard(Zone.HAND, playerA, "Birthing Hulk"); // {6}{G} 5/4 + // Devoid + // Creatures you control get +2/+0 until end of turn. + // Colorless creatures you control also gain first strike until end of turn. + addCard(Zone.HAND, playerA, "Swarm Surge"); // {2}{B} + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Birthing Hulk"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Swarm Surge"); + + attack(1, playerA, "Silvercoat Lion"); + + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertGraveyardCount(playerA, "Swarm Surge", 1); + + assertPowerToughness(playerA, "Birthing Hulk", 7, 4); + assertAbility(playerA, "Birthing Hulk", FirstStrikeAbility.getInstance(), true); + assertPowerToughness(playerA, "Eldrazi Scion", 3, 1, Filter.ComparisonScope.All); + assertAbility(playerA, "Eldrazi Scion", FirstStrikeAbility.getInstance(), true, 2); + assertPowerToughness(playerA, "Silvercoat Lion", 4, 2); + assertAbility(playerA, "Silvercoat Lion", FirstStrikeAbility.getInstance(), false); + + assertLife(playerA, 20); + assertLife(playerB, 16); + } + +} 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 9a02e9bcf80..28b0b0e0ea8 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 @@ -507,6 +507,10 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement } } + public void assertAbility(Player player, String cardName, Ability ability, boolean flag) throws AssertionError { + assertAbility(player, cardName, ability, flag, 1); + } + /** * * @param player @@ -514,23 +518,24 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement * @param ability * @param flag true if creature should contain ability, false if it should * NOT contain it instead + * @param count number of permanents with that ability * @throws AssertionError */ - public void assertAbility(Player player, String cardName, Ability ability, boolean flag) throws AssertionError { - int count = 0; + public void assertAbility(Player player, String cardName, Ability ability, boolean flag, int count) throws AssertionError { + int foundCount = 0; Permanent found = null; for (Permanent permanent : currentGame.getBattlefield().getAllActivePermanents(player.getId())) { if (permanent.getName().equals(cardName)) { found = permanent; - count++; + foundCount++; } } Assert.assertNotNull("There is no such permanent under player's control, player=" + player.getName() + ", cardName=" + cardName, found); - Assert.assertTrue("There is more than one such permanent under player's control, player=" + player.getName() - + ", cardName=" + cardName, count == 1); + Assert.assertTrue("There is another number (" + foundCount + ") as defined (" + count + ") of such permanents under player's control, player=" + player.getName() + + ", cardName=" + cardName, count == foundCount); if (flag) { Assert.assertTrue("No such ability=" + ability.toString() + ", player=" + player.getName() diff --git a/Mage/src/main/java/mage/abilities/condition/CompoundCondition.java b/Mage/src/main/java/mage/abilities/condition/CompoundCondition.java index 65805a10ca4..ff30b21f1d5 100644 --- a/Mage/src/main/java/mage/abilities/condition/CompoundCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/CompoundCondition.java @@ -25,7 +25,6 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package mage.abilities.condition; import java.util.ArrayList; @@ -34,14 +33,15 @@ import mage.abilities.Ability; import mage.game.Game; /** - * Combines conditions to one compound conditon, all single conditons - * must be true to return true for the compound condtion. + * Combines conditions to one compound conditon, all single conditons must be + * true to return true for the compound condtion. * * @author LevelX2 */ public class CompoundCondition implements Condition { - private final ArrayList conditions = new ArrayList(); + private final ArrayList conditions = new ArrayList<>(); + private final String text; public CompoundCondition(Condition... conditions) { @@ -55,7 +55,7 @@ public class CompoundCondition implements Condition { @Override public boolean apply(Game game, Ability source) { - for (Condition condition: conditions) { + for (Condition condition : conditions) { if (!condition.apply(game, source)) { return false; } diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/BoostControlledEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/BoostControlledEffect.java index 763e78028b5..297d871d6af 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/BoostControlledEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/BoostControlledEffect.java @@ -70,7 +70,7 @@ public class BoostControlledEffect extends ContinuousEffectImpl { } public BoostControlledEffect(int power, int toughness, Duration duration, FilterCreaturePermanent filter, boolean excludeSource) { - this(new StaticValue(power), new StaticValue(toughness), duration, filter, excludeSource); + this(new StaticValue(power), new StaticValue(toughness), duration, filter, excludeSource, true); } public BoostControlledEffect(DynamicValue power, DynamicValue toughness, Duration duration, FilterCreaturePermanent filter, boolean excludeSource) {