package jrummikub.control.turn; import static org.junit.Assert.*; import java.awt.Color; import jrummikub.model.GameSettings; import jrummikub.model.IHand; import jrummikub.model.IPlayer; import jrummikub.model.ITable; import jrummikub.model.Player; import jrummikub.model.PlayerSettings; import jrummikub.model.PlayerSettings.Type; import jrummikub.model.Position; import jrummikub.model.Stone; import jrummikub.model.StoneColor; import jrummikub.model.Table; import jrummikub.util.IListener; import jrummikub.util.IListener1; import jrummikub.view.MockView; import org.junit.Before; import org.junit.Test; /** */ public class AIControlTest { ITurnControl aiControl; GameSettings gameSettings; PlayerSettings playerSettings; IPlayer player; ITable table; MockView view; boolean turnEnded; boolean redealt; /** */ @Before public void setUp() { aiControl = TurnControlFactory.getFactory(Type.COMPUTER).create(); ((AIControl) aiControl).useBackgroundThread = false; gameSettings = new GameSettings(); playerSettings = new PlayerSettings("ROBOT_01", Color.GRAY); player = new Player(playerSettings); table = new Table(gameSettings); view = new MockView(); turnEnded = false; redealt = false; aiControl.getEndOfTurnEvent().add(new IListener1() { @Override public void handle(ITable newTable) { turnEnded = true; } }); aiControl.getRedealEvent().add(new IListener() { @Override public void handle() { redealt = true; } }); IHand hand = player.getHand(); hand.drop(new Stone(11, StoneColor.RED), new Position(0, 0)); hand.drop(new Stone(12, StoneColor.RED), new Position(0, 0)); hand.drop(new Stone(13, StoneColor.RED), new Position(0, 0)); } /** * @throws InterruptedException * if timeout */ @Test(timeout = 10000) public void testTurnZeroNoRedealing() throws InterruptedException { aiControl.setup( new ITurnControl.TurnInfo(table, player.getHand(), player.getLaidOut(), TurnMode.MAY_REDEAL), gameSettings, view); aiControl.startTurn(); assertTrue(turnEnded); assertFalse(redealt); assertEquals(table.getSize(), 0); } /** * @throws InterruptedException * if timeout */ @Test(timeout = 10000) public void testTurnZeroNotMelding() throws InterruptedException { aiControl.setup( new ITurnControl.TurnInfo(table, player.getHand(), player.getLaidOut(), TurnMode.INSPECT_ONLY), gameSettings, view); aiControl.startTurn(); assertTrue(turnEnded); assertFalse(redealt); assertEquals(table.getSize(), 0); } /** * @throws InterruptedException * if timeout */ @Test(timeout = 10000) public void testNormalTurnMelding() throws InterruptedException { aiControl.setup( new ITurnControl.TurnInfo(table, player.getHand(), player.getLaidOut(), TurnMode.NORMAL_TURN), gameSettings, view); aiControl.startTurn(); assertTrue(turnEnded); assertFalse(redealt); assertEquals(table.getSize(), 1); assertEquals(player.getHand().getSize(), 0); } }