package com.hearthsim.test.minion;
import com.hearthsim.card.Card;
import com.hearthsim.card.CharacterIndex;
import com.hearthsim.card.basic.minion.BoulderfistOgre;
import com.hearthsim.card.basic.minion.RaidLeader;
import com.hearthsim.card.basic.minion.WaterElemental;
import com.hearthsim.card.minion.Minion;
import com.hearthsim.exception.HSException;
import com.hearthsim.model.BoardModel;
import com.hearthsim.model.PlayerModel;
import com.hearthsim.model.PlayerSide;
import com.hearthsim.util.tree.HearthTreeNode;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class TestWaterElemental {
private HearthTreeNode board;
private PlayerModel currentPlayer;
private PlayerModel waitingPlayer;
@Before
public void setup() throws HSException {
board = new HearthTreeNode(new BoardModel());
currentPlayer = board.data_.getCurrentPlayer();
waitingPlayer = board.data_.getWaitingPlayer();
Card fb = new WaterElemental();
currentPlayer.placeCardHand(fb);
currentPlayer.setMana((byte) 8);
currentPlayer.setMaxMana((byte) 8);
board.data_.placeMinion(PlayerSide.WAITING_PLAYER, new RaidLeader());
board.data_.placeMinion(PlayerSide.WAITING_PLAYER, new BoulderfistOgre());
}
@Test
public void testFreezesMinionOnAttack() throws HSException {
Card theCard = currentPlayer.getHand().get(0);
HearthTreeNode ret = theCard.useOn(PlayerSide.CURRENT_PLAYER, CharacterIndex.HERO, board);
assertEquals(board, ret);
Minion waterElemental = currentPlayer.getCharacter(CharacterIndex.MINION_1);
assertTrue(waterElemental instanceof WaterElemental);
waterElemental.hasAttacked(false); // unset summoning sickness
waterElemental.attack(PlayerSide.WAITING_PLAYER, CharacterIndex.MINION_2, board);
assertTrue(waitingPlayer.getCharacter(CharacterIndex.MINION_2).getFrozen());
}
@Test
public void testFreezesHeroOnAttack() throws HSException {
Card theCard = currentPlayer.getHand().get(0);
HearthTreeNode ret = theCard.useOn(PlayerSide.CURRENT_PLAYER, CharacterIndex.HERO, board);
assertEquals(board, ret);
Minion waterElemental = currentPlayer.getCharacter(CharacterIndex.MINION_1);
assertTrue(waterElemental instanceof WaterElemental);
waterElemental.hasAttacked(false); // unset summoning sickness
waterElemental.attack(PlayerSide.WAITING_PLAYER, CharacterIndex.HERO, board);
assertTrue(waitingPlayer.getCharacter(CharacterIndex.HERO).getFrozen());
}
}