mirror of
https://github.com/magefree/mage.git
synced 2025-12-22 03:22:00 -08:00
Improve DealsCombatDamageEquippedTriggeredAbility (#10767)
* improve variable name * add test for Jitte trample damage * fix duplicated triggers when trampling over to player * bring corresponding ability into alignment * adjust authorship, comment
This commit is contained in:
parent
9ba0da00ff
commit
35a5cc48a7
4 changed files with 166 additions and 19 deletions
|
|
@ -0,0 +1,51 @@
|
|||
package org.mage.test.cards.single.bok;
|
||||
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.Zone;
|
||||
import mage.counters.CounterType;
|
||||
import org.junit.Test;
|
||||
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||
|
||||
/**
|
||||
* @author xenohedron
|
||||
*/
|
||||
public class UmezawasJitteTest extends CardTestPlayerBase {
|
||||
|
||||
private static final String jitte = "Umezawa's Jitte";
|
||||
// Whenever equipped creature deals combat damage, put two charge counters on Umezawa’s Jitte.
|
||||
// Equip 2
|
||||
private static final String attacker = "Spiked Baloth"; // 4/2 trample
|
||||
private static final String defender1 = "Memnite"; // 1/1 vanilla
|
||||
private static final String defender2 = "Darksteel Myr"; // 0/1 indestructible
|
||||
|
||||
@Test
|
||||
public void testTrampleSingleDamageTrigger() {
|
||||
// Reported bug: #10763
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, jitte);
|
||||
addCard(Zone.BATTLEFIELD, playerA, attacker);
|
||||
addCard(Zone.BATTLEFIELD, playerB, defender1);
|
||||
addCard(Zone.BATTLEFIELD, playerB, defender2);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Wastes", 2);
|
||||
|
||||
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Equip", attacker);
|
||||
|
||||
attack(1, playerA, attacker, playerB);
|
||||
block(1, playerB, defender1, attacker);
|
||||
block(1, playerB, defender2, attacker);
|
||||
// Blockers are ordered in order added by the test framework
|
||||
setChoice(playerA, "X=1"); // 1 damage to first defender
|
||||
setChoice(playerA, "X=1"); // 1 damage to second defender
|
||||
|
||||
setStrictChooseMode(true);
|
||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
execute();
|
||||
|
||||
assertLife(playerB, 20 - 2);
|
||||
assertGraveyardCount(playerB, defender1, 1);
|
||||
assertPermanentCount(playerB, defender2, 1);
|
||||
assertCounterCount(playerA, jitte, CounterType.CHARGE, 2);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
package org.mage.test.cards.triggers.damage;
|
||||
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.Zone;
|
||||
import org.junit.Test;
|
||||
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||
|
||||
/**
|
||||
* @author xenohedron
|
||||
*/
|
||||
public class DealsCombatDamageTriggerTest extends CardTestPlayerBase {
|
||||
|
||||
private static final String drinker = "Drinker of Sorrow"; // 5/3
|
||||
// Whenever Drinker of Sorrow deals combat damage, sacrifice a permanent.
|
||||
private static final String memnite = "Memnite"; // 1/1
|
||||
|
||||
@Test
|
||||
public void triggerSourceDealsDamage() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, drinker);
|
||||
addCard(Zone.BATTLEFIELD, playerA, memnite);
|
||||
|
||||
attack(1, playerA, drinker, playerB);
|
||||
|
||||
addTarget(playerA, memnite); // to sacrifice
|
||||
|
||||
setStrictChooseMode(true);
|
||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
execute();
|
||||
|
||||
assertLife(playerB, 20 - 5);
|
||||
assertPermanentCount(playerA, drinker, 1);
|
||||
assertGraveyardCount(playerA, memnite, 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void noTriggerOtherDealsDamage() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, drinker);
|
||||
addCard(Zone.BATTLEFIELD, playerA, memnite);
|
||||
|
||||
attack(1, playerA, memnite, playerB);
|
||||
|
||||
setStrictChooseMode(true);
|
||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
execute();
|
||||
|
||||
assertLife(playerB, 20 - 1);
|
||||
assertPermanentCount(playerA, drinker, 1);
|
||||
assertPermanentCount(playerA, memnite, 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void triggerTwoSourcesDealDamage() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, drinker, 2);
|
||||
|
||||
attack(1, playerA, drinker, playerB);
|
||||
attack(1, playerA, drinker, playerB);
|
||||
|
||||
setChoice(playerA, "Whenever"); // order identical triggers
|
||||
addTarget(playerA, drinker); // to sacrifice
|
||||
addTarget(playerA, drinker); // to sacrifice
|
||||
|
||||
setStrictChooseMode(true);
|
||||
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||
execute();
|
||||
|
||||
assertLife(playerB, 20 - 10);
|
||||
assertGraveyardCount(playerA, drinker, 2);
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue