* Added a test for #4659 - it's not reproducable (closes #4659).

This commit is contained in:
LevelX2 2020-06-26 17:41:10 +02:00
parent 329f7fd609
commit 166d898168
2 changed files with 56 additions and 14 deletions

View file

@ -1,8 +1,8 @@
package org.mage.test.rollback;
import mage.constants.PhaseStep;
import mage.constants.Zone;
import org.junit.Assert;
import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase;
@ -74,4 +74,54 @@ public class DemonicPactTest extends CardTestPlayerBase {
assertLife(playerB, 16);
}
/**
* Rollback problem with Pact of Negation etc [cards] #4659
*
* Potential bug here for [Pact of Negation] and similar cards with 0 cost
* and demand to pay or lose the next turn.
*
* So can you check the following scenario where I think the game is buggy:
* an opponent casts pact of negation on my turn, his next turn he requests
* a rollback to beginning of his turn -- bingo I'm a winner and he loses
* the game. The log says I'm the winner and the opponent lost and that is
* immediately after rollback request.
*/
@Test
public void testPactOfNegationRollback() {
addCard(Zone.HAND, playerA, "Silvercoat Lion", 1);
addCard(Zone.BATTLEFIELD, playerA, "Plains", 2);
addCard(Zone.BATTLEFIELD, playerB, "Island", 5);
// Counter target spell.
// At the beginning of your next upkeep, pay {3}{U}{U}. If you don't, you lose the game.
addCard(Zone.HAND, playerB, "Pact of Negation"); // Instant {0}
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion");
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Pact of Negation", "Silvercoat Lion", "Silvercoat Lion");
setChoice(playerB, "Yes");
rollbackTurns(2, PhaseStep.PRECOMBAT_MAIN, playerB, 0);
setStrictChooseMode(true);
setStopAt(2, PhaseStep.BEGIN_COMBAT);
execute();
assertAllCommandsUsed();
assertGraveyardCount(playerA, "Silvercoat Lion", 1);
assertGraveyardCount(playerB, "Pact of Negation", 1);
Assert.assertTrue("Player A is still in game", playerA.isInGame());
Assert.assertTrue("Player B is still in game", playerB.isInGame());
assertTappedCount("Island", true, 5);
}
}