package org.mage.test.cards.abilities.keywords;
import mage.constants.PhaseStep;
import mage.constants.Zone;
import mage.counters.CounterType;
import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase;
/**
*
* @author escplan9
*/
public class ExertTest extends CardTestPlayerBase {
@Test
public void exertUsedDoesNotUntapNextUntapStep() {
/*
Glory-Bound Initiate {1}{W}
Creature - Human Warrior 3/1
You may exert Glory-Bound Intiate as it attacks. When you do, it gets +1/+3 and gains lifelink until end of turn.
*/
String gbInitiate = "Glory-Bound Initiate";
addCard(Zone.BATTLEFIELD, playerA, gbInitiate);
attack(1, playerA, gbInitiate);
setChoice(playerA, "Yes");
setStopAt(3, PhaseStep.PRECOMBAT_MAIN);
execute();
assertTapped(gbInitiate, true); // does not untap due to exert
assertLife(playerA, 24); // exerted 4/4 lifelink
assertLife(playerB, 16);
}
@Test
public void exertNotUsedRegularAttack() {
/*
Glory-Bound Initiate {1}{W}
Creature - Human Warrior 3/1
You may exert Glory-Bound Intiate as it attacks. When you do, it gets +1/+3 and gains lifelink until end of turn.
*/
String gbInitiate = "Glory-Bound Initiate";
addCard(Zone.BATTLEFIELD, playerA, gbInitiate);
attack(1, playerA, gbInitiate);
setChoice(playerA, "No");
setStopAt(3, PhaseStep.PRECOMBAT_MAIN);
execute();
assertTapped(gbInitiate, false); // untaps as normal
assertLife(playerA, 20);
assertLife(playerB, 17);
}
/*
"If you gain control of another player's creature until end of turn and exert it, it will untap during that player's untap step."
See issue #3183
*/
@Test
public void stolenExertCreatureShouldUntapDuringOwnersUntapStep() {
/*
Glory-Bound Initiate {1}{W}
Creature - Human Warrior 3/1
You may exert Glory-Bound Intiate as it attacks. When you do, it gets +1/+3 and gains lifelink until end of turn.
*/
String gbInitiate = "Glory-Bound Initiate";
String aTreason = "Act of Treason"; // {2}{R} sorcery gain control target creature, untap, gains haste until end of turn
addCard(Zone.HAND, playerA, gbInitiate);
addCard(Zone.BATTLEFIELD, playerA, "Plains", 2);
addCard(Zone.HAND, playerB, aTreason);
addCard(Zone.BATTLEFIELD, playerB, "Mountain", 3);
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, gbInitiate);
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, aTreason, gbInitiate);
attack(2, playerB, gbInitiate);
setChoice(playerB, "Yes");
setStopAt(3, PhaseStep.PRECOMBAT_MAIN);
execute();
assertGraveyardCount(playerB, aTreason, 1);
assertLife(playerA, 16);
assertLife(playerB, 24);
assertTapped(gbInitiate, false); // stolen creature exerted does untap during owner's untap step
}
@Test
public void combatCelebrantExertedCannotExertAgainDuringNextCombatPhase() {
/*
Combat Celebrant 2R
Creature - Human Warrior 4/1
If Combat Celebrant hasn't been exerted this turn, you may exert it as it attacks. When you do, untap all other creatures you control and after this phase, there is an additional combat phase.
*/
String cCelebrant = "Combat Celebrant";
String memnite = "Memnite"; // {0} 1/1
addCard(Zone.BATTLEFIELD, playerA, cCelebrant);
addCard(Zone.BATTLEFIELD, playerA, memnite);
attack(1, playerA, cCelebrant);
attack(1, playerA, memnite);
setChoice(playerA, "Yes"); // exert for extra turn
attack(1, playerA, cCelebrant);
attack(1, playerA, memnite);
setChoice(playerA, "Yes"); // try to exert again
attack(1, playerA, cCelebrant); // should not be able to enter this 3rd combat phase
attack(1, playerA, memnite);
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
execute();
assertLife(playerB, 14); // 4 + 1 + 1 (Celebrant once, Memnite twice)
assertTapped(cCelebrant, true);
assertTapped(memnite, true);
}
/*
* Reported bug: Combat Celebrant able to exert again despite being exerted already if Always Watching is in play. (Or presumably any Vigilance granting effect)
*/
@Test
public void combatCelebrantExertedCannotExertDuringNextCombatPhase_InteractionWithAlwaysWatching() {
/*
Combat Celebrant 2R
Creature - Human Warrior 4/1
If Combat Celebrant hasn't been exerted this turn, you may exert it as it attacks. When you do, untap all other creatures you control and after this phase, there is an additional combat phase.
*/
String cCelebrant = "Combat Celebrant";
/*
Always Watching 1WW
Enchantment
Non-token creatures you control get +1/+1 and have vigilance.
*/
String aWatching = "Always Watching";
String memnite = "Memnite"; // {0} 1/1
addCard(Zone.BATTLEFIELD, playerA, aWatching);
addCard(Zone.BATTLEFIELD, playerA, cCelebrant);
addCard(Zone.BATTLEFIELD, playerA, memnite);
attack(1, playerA, cCelebrant);
attack(1, playerA, memnite);
setChoice(playerA, "Yes"); // exert for extra turn
attack(1, playerA, cCelebrant);
attack(1, playerA, memnite);
setChoice(playerA, "Yes"); // try to exert again
attack(1, playerA, cCelebrant); // should not be able to enter this 3rd combat phase
attack(1, playerA, memnite);
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
execute();
assertTapped(cCelebrant, false);
assertTapped(memnite, false);
assertLife(playerB, 6); // 5 + 2 + 5 + 2 (Celebrant twice, Memnite twice with +1/+1 on both)
}
/*
* Reported bug: Combat Celebrant able to attack again despite being exerted already if Arlinn Kord granted him vigilance.
*/
@Test
public void combatCelebrantExertedCannotExertAgainDuringNextCombatPhase_InteractionWithArlinnKord() {
/*
Combat Celebrant 2R
Creature - Human Warrior 4/1
If Combat Celebrant hasn't been exerted this turn, you may exert it as it attacks. When you do, untap all other creatures you control and after this phase, there is an additional combat phase.
*/
String cCelebrant = "Combat Celebrant";
/*
Arlinn Kord {2}{R}{G}
Planeswalker — Arlinn 3 loyalty
+1: Until end of turn, up to one target creature gets +2/+2 and gains vigilance and haste.
0: Create a 2/2 green Wolf creature token. Transform Arlinn Kord.
*/
String aKord = "Arlinn Kord";
addCard(Zone.BATTLEFIELD, playerA, aKord);
addCard(Zone.BATTLEFIELD, playerA, cCelebrant);
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "+1:"); // grant +2/+2 vig and haste to celebrant
addTarget(playerA, cCelebrant);
attack(1, playerA, cCelebrant);
setChoice(playerA, "Yes"); // exert for extra turn
attack(1, playerA, cCelebrant);
setChoice(playerA, "Yes"); // try to exert again
attack(1, playerA, cCelebrant); // should not be able to enter this 3rd combat phase
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
execute();
assertTapped(cCelebrant, false);
assertCounterCount(aKord, CounterType.LOYALTY, 4);
assertLife(playerB, 8); // 6 + 6 = 12 damage from Celebrant attacking twice
assertPowerToughness(playerA, cCelebrant, 6, 3);
}
}