* Bestow - Fixed a problem that if the target of a bestow enchantment aura got illegal, the bestow permanent did not chnage back to be a creature.

This commit is contained in:
LevelX2 2018-02-12 15:49:16 +01:00
parent f0f407457e
commit a85fa82de0
2 changed files with 51 additions and 2 deletions

View file

@ -27,11 +27,13 @@
*/ */
package org.mage.test.cards.abilities.keywords; package org.mage.test.cards.abilities.keywords;
import mage.abilities.mana.ManaOptions;
import mage.constants.CardType;
import mage.constants.PhaseStep; import mage.constants.PhaseStep;
import mage.constants.SubType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase; import org.mage.test.serverside.base.CardTestPlayerBase;
@ -445,4 +447,48 @@ public class BestowTest extends CardTestPlayerBase {
assertTapped("Elite Vanguard", true); assertTapped("Elite Vanguard", true);
assertPowerToughness(playerA, "Elite Vanguard", 5, 3); // 2/1 + 3/2 = 5/3 assertPowerToughness(playerA, "Elite Vanguard", 5, 3); // 2/1 + 3/2 = 5/3
} }
/**
* When a creature with Nighthowler attatched gets enchanted with Song of
* the Dryads, Nightholwer doesn't become a creature and gets turned into a
* card without stats.
*/
@Test
public void testEnchantedChangedWithSongOfTheDryads() {
// Enchantment Creature Horror
// 0/0
// Bestow {2}{B}{B}
// Nighthowler and enchanted creature each get +X/+X, where X is the number of creature cards in all graveyards.
addCard(Zone.HAND, playerA, "Nighthowler");
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 4);
addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); // {1}{W} 2/2 creature
addCard(Zone.GRAVEYARD, playerA, "Pillarfield Ox");
addCard(Zone.GRAVEYARD, playerB, "Pillarfield Ox");
// Enchant permanent
// Enchanted permanent is a colorless Forest land.
addCard(Zone.BATTLEFIELD, playerB, "Forest", 3);
addCard(Zone.HAND, playerB, "Song of the Dryads"); // Enchantment Aura {2}{G}
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Nighthowler using bestow", "Silvercoat Lion");
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Song of the Dryads", "Silvercoat Lion");
setStopAt(2, PhaseStep.BEGIN_COMBAT);
execute();
assertPermanentCount(playerB, "Song of the Dryads", 1);
ManaOptions options = playerA.getAvailableManaTest(currentGame);
Assert.assertEquals("Player should be able to create 1 green mana", "{G}", options.get(0).toString());
assertPermanentCount(playerA, "Nighthowler", 1);
assertPowerToughness(playerA, "Nighthowler", 2, 2);
assertType("Nighthowler", CardType.CREATURE, true);
assertType("Nighthowler", CardType.ENCHANTMENT, true);
Permanent nighthowler = getPermanent("Nighthowler");
Assert.assertFalse("The unattached Nighthowler may not have the aura subtype.", nighthowler.getSubtype(currentGame).contains(SubType.AURA));
}
} }

View file

@ -1884,6 +1884,7 @@ public abstract class GameImpl implements Game, Serializable {
if (card != null && card.isCreature()) { if (card != null && card.isCreature()) {
UUID wasAttachedTo = perm.getAttachedTo(); UUID wasAttachedTo = perm.getAttachedTo();
perm.attachTo(null, this); perm.attachTo(null, this);
BestowAbility.becomeCreature(perm, this);
fireEvent(new GameEvent(GameEvent.EventType.UNATTACHED, wasAttachedTo, perm.getId(), perm.getControllerId())); fireEvent(new GameEvent(GameEvent.EventType.UNATTACHED, wasAttachedTo, perm.getId(), perm.getControllerId()));
} else if (movePermanentToGraveyardWithInfo(perm)) { } else if (movePermanentToGraveyardWithInfo(perm)) {
somethingHappened = true; somethingHappened = true;
@ -1909,7 +1910,9 @@ public abstract class GameImpl implements Game, Serializable {
if (attachedTo == null if (attachedTo == null
|| !((TargetCard) spellAbility.getTargets().get(0)).canTarget(perm.getControllerId(), perm.getAttachedTo(), spellAbility, this)) { || !((TargetCard) spellAbility.getTargets().get(0)).canTarget(perm.getControllerId(), perm.getAttachedTo(), spellAbility, this)) {
if (movePermanentToGraveyardWithInfo(perm)) { if (movePermanentToGraveyardWithInfo(perm)) {
if (attachedTo != null) {
attachedTo.removeAttachment(perm.getId(), this); attachedTo.removeAttachment(perm.getId(), this);
}
somethingHappened = true; somethingHappened = true;
} }
} }