package org.scotlandyard.tests.engine;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import org.scotlandyard.engine.Game;
import org.scotlandyard.engine.GameException;
import org.scotlandyard.engine.User;
import org.scotlandyard.engine.boardmap.BoardMap;
import org.scotlandyard.engine.boardmap.Coordinate;
import org.scotlandyard.engine.constants.GameStatus;
import org.scotlandyard.engine.player.Player;
import org.scotlandyard.engine.player.PlayerPosition;
import org.scotlandyard.impl.engine.GameEngine;
import org.scotlandyard.impl.engine.GameImpl;
import org.scotlandyard.impl.engine.PlayerPositionImpl;
import org.scotlandyard.impl.engine.UserImpl;
import org.scotlandyard.impl.engine.boardmap.BoardMapImpl;
import org.scotlandyard.impl.engine.player.Detective;
import org.scotlandyard.impl.engine.player.MrX;
/**
* TODO add description
*
* @author Hussain Al-Mutawa
* @version 1.0
* @since Sept 2011
*
*/
public class GameSetPlayerPositionTest {
private transient Game game;
private transient Player detective,mrx;
private transient Coordinate position1;
@Before//TODO add description here
public void setUp() throws Exception {
GameEngine.instance().clearRecords();
final User user1=UserImpl.getNewInstance("hussain", "hussain.mutawa");
final User user2=UserImpl.getNewInstance("ali", "ali.mutawa");
final BoardMap boardMap = BoardMapImpl.getNewInstance("pnth");
boardMap.prepareMap("web/maps/pnth.xml");
game = GameImpl.getNewInstance("game1", user1, boardMap);
mrx=MrX.getNewInstance(game, user1);
detective=Detective.getNewInstance(game,user2);
game.setGameStatus(GameStatus.STARTED);
position1=boardMap.getCoordinate("0");
}
@Test//TODO add description here
public final void testNewPlayerPosition()throws GameException{
int counter=0;
final Object[][] objects = {
{null,null},
{null,position1},
{mrx,null}
};
for(int i=0;i<objects.length;i++){
try{
final Player player = (Player) objects[i][0];
final Coordinate coor = (Coordinate) objects[i][1];
game.setPlayerPosition(new PlayerPositionImpl(game, player, coor)); // this must throw an exception
counter--;// should not reach here
}catch(GameException ex){
counter++;
}
}
Assert.assertEquals(counter, 3);
game.setGameStatus(GameStatus.JUST_CREATED);
final PlayerPosition playerPosition1 = new PlayerPositionImpl(game, detective, position1);
game.setPlayerPosition( playerPosition1 );
try{
//this should throw an exception since it places a player
//at the same position as another one is already there
game.setPlayerPosition( new PlayerPositionImpl(game, mrx, position1));
counter--;
}catch(GameException ex){
counter++;
}
Assert.assertEquals(counter, 4);
}
}