package test; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; import org.ojim.iface.Rules; import org.ojim.logic.state.Card; import org.ojim.logic.state.GetOutOfJailCard; import org.ojim.logic.state.ServerGameState; import org.ojim.logic.state.fields.BuyableField; import org.ojim.logic.state.fields.Field; import org.ojim.logic.state.fields.Jail; import org.ojim.logic.state.fields.Street; import org.ojim.server.OjimServer; public class TestOjimServer { OjimServer server; TestClient2 client1, client2; int id1, id2; @Before public void setUp() throws Exception { server = new OjimServer("test"); server.initGame(2, 0); client1 = new TestClient2(server); client2 = new TestClient2(server); id1 = client1.id; id2 = client2.id; server.setPlayerReady(id1); server.setPlayerReady(id2); } @Test public void testOjimServer() { String name = "testServerName"; server = new OjimServer(name); if (!server.getName().equals(name)) { fail("name is " + server.getName() + " ,should be " + name); } } @Test public void testInitRMIGame() { // TODO Add test } // Nearly Impossible to test, I will test the rest without JUnit @Test public synchronized void testInitEndGame() { // for(int x = 0; x <= 8; x++) // for(int y = 0; y <= 8; y++) { // System.out.println("x:" + x + " y:" + y); // server = new OjimServer("test"); // boolean b = server.initGame(x,y); // if(x > 1 && x+y <= 8) { // if(server.getMaxClients() != x) { // fail("playerCount is " + server.getMaxClients() + ", should be " + // x); // } // if(!b) { // fail("Unable to init game!"); // } // // if(server.getConnectedClients() != y && x >= y) { // // fail("AI count is " + server.getConnectedClients() + // ", should be " + y + ", maxClients is " + server.getMaxClients()); // // } // } // System.out.println("ending, players on Server:" + // server.getConnectedClients()); // if(!server.endGame()) { // fail("Ending game was not successful!"); // } // } } @Test public void testTrade() { assertSame(server.getTradeState(), -1); for (int i = 0; i < 3; i++) { server.rollDice(id1); } server.initTrade(id1, id2); assertSame(server.getTradeState(), 0); int[] pars = { 0, 1, 10, 100, 1000, -1 }; for (int i = 0; i < 6; i++) { assertSame(10, 10); server.offerCash(id1, pars[i]); assertSame(pars[i] - server.getOfferedCash(), 0); } for (int i = 0; i < 6; i++) { server.requireCash(id1, pars[i]); assertSame(server.getRequiredCash() - pars[i], 0); } if (server.getPartner() != id2) { fail("Wrong trade partner:" + server.getPartner() + ", should be:" + id2); } server.proposeTrade(id1); if (server.getTradeState() != 1) { fail("TradeState was not 1 after proposal"); } server.decline(id2); if (server.getTradeState() != 2) { fail("TradeState was not 2 after decline"); } server.initTrade(id1, id2); server.offerCash(id1, 10); server.cancelTrade(id1); if (server.getTradeState() != -1) { fail("TradeState was not -1 after trade canceling by acting player"); } server.initTrade(id1, id2); server.offerCash(id1, 10); server.proposeTrade(id1); server.accept(id2); if (server.getTradeState() != 3) { fail("TradeState was not 3 after successful trade"); } } /* * @Test public void testGetAuctionState() { fail("Not yet implemented"); // * TODO } * * @Test public void testGetAuctionedEstate() { fail("Not yet implemented"); * // TODO } * * @Test public void testGetHighestBid() { fail("Not yet implemented"); // * TODO } * * @Test public void testGetBidder() { fail("Not yet implemented"); // TODO * } * * @Test public void testPlaceBid() { fail("Not yet implemented"); // TODO } */ @Test public void testGetPlayerPiecePosition() { ServerGameState state = server.getGameState(); for (int i = 0; i < 40; i++) { state.getPlayerById(id1).setPosition(i); if (server.getPlayerPiecePosition(id1) != i) { fail("Position is:" + server.getPlayerPiecePosition(id1) + ", should be:" + i); } } } @Test public void testAddCurrentCard() { Card card = new GetOutOfJailCard("testCard", null, null); server.addCurrentCard(card); if (server.getCurrentCards().size() != 1 || !server.getCurrentCards().get(0).equals(card)) { fail("fail"); } } @Test public void testAddPlayer() { server = new OjimServer("test"); server.initGame(2, 1); int old = server.getConnectedClients(); server.addPlayer(new TestClient2()); if (old + 1 != server.getConnectedClients()) { fail("fail while adding Player, oldPlayerCount:" + old + ", newPlayerCount:" + server.getConnectedClients()); } } @Test public void testSetPlayerReady() { server.setPlayerReady(id1); if (server.getGameState().getPlayerById(id1).getIsReady() == false) { fail("Player " + id1 + " not set ready"); } server.setPlayerReady(id2); } @Test public void testGetPlayerName() { if (server.getPlayerName(id1) != "aName") { fail("wrong name returned:" + server.getPlayerName(id1)); } } @Test public void testGetPlayerColor() { if (server.getPlayerColor(id1) < 0 || server.getPlayerColor(id1) == server.getPlayerColor(id2)) { fail("color1:" + server.getPlayerColor(id1) + ", color2:" + server.getPlayerColor(id2)); } } @Test public void testGetRules() { Rules rules = server.getRules(); if (rules == null) { fail("no Rules set!"); } } @Test public void testGetEstateName() { for (int i = 0; i < 40; i++) { if (!server.getEstateName(i, 0).endsWith( server.getGameState().getFieldAt(i).getName())) { fail("name is: " + server.getEstateName(i, 0) + ", should be " + server.getGameState().getFieldAt(i).getName()); } } } @Test public void testGetEstateColorGroup() { for (int i = 0; i < 40; i++) { if (!(server.getEstateColorGroup(i) == server.getGameState() .getFieldAt(i).getFieldGroup().getColor())) { fail("Color of Fieldgroup is set wrong"); } } } @Test public void testGetEstateHouses() { for (int i = 0; i < 40; i++) { server.getEstateHouses(i); if (server.getGameState().getFieldAt(i) instanceof Street) { if (!(server.getEstateHouses(i) == ((Street) server .getGameState().getFieldAt(i)).getBuiltLevel())) { fail("Wrong Buildlevel"); } } } } @Test public void testGetEstatePrice() { for (int i = 0; i < 40; i++) { server.getEstatePrice(i); if (server.getGameState().getFieldAt(i) instanceof BuyableField) { if (!(server.getEstatePrice(i) == ((BuyableField) server .getGameState().getFieldAt(i)).getPrice())) { fail("Wrong Price: '" + server.getEstatePrice(i) + "' should be '" + ((BuyableField) server.getGameState().getFieldAt( i)).getPrice() + "'"); } } } } @Test public void testGetEstateRent() { for (int i = 0; i < 40; i++) { if (server.getGameState().getFieldAt(i) instanceof Street) { if (!(server.getEstateRent(i, ((Street) server.getGameState() .getFieldAt(i)).getBuiltLevel()) == ((Street) server .getGameState().getFieldAt(i)).getRent())) { fail("Wrong Rent: '" + (server.getEstateRent( i, ((Street) server.getGameState().getFieldAt( i)).getBuiltLevel()) + "' should be '" + ((Street) server .getGameState().getFieldAt(i)).getRent()) + "'"); } } } } @Test public void testIsMortgaged() { for (int i = 0; i < 40; i++) { server.isMortgaged(i); if (server.getGameState().getFieldAt(i) instanceof BuyableField) { if (!(server.isMortgaged(i) == ((BuyableField) server .getGameState().getFieldAt(i)).isMortgaged())) { fail("Field is not Mortgaged"); } } } } @Test public void testGetOwner() { for (int i = 0; i < 40; i++) { server.getOwner(i); if (server.getGameState().getFieldAt(i) instanceof BuyableField && ((BuyableField) server.getGameState().getFieldAt(i)) .getOwner() != null) { if (!(server.getOwner(i) == ((BuyableField) server .getGameState().getFieldAt(i)).getOwner().getId())) { fail("Field has the wrong owner"); } } else { if (!(server.getOwner(i) == -1)) { fail("Field should have no owner"); } } } } @Test public void testGetDiceValue() { server.rollDice(id1); if (server.getDiceValue() != (server.getGameState().getDices() .getResultSum())) { fail("Dicesum is different"); } } @Test public void testGetDiceValues() { server.rollDice(id1); if (server.getDiceValues()[0] != server.getGameState().getDices() .getResult()[0] || server.getDiceValues()[1] != server.getGameState() .getDices().getResult()[1]) { fail("Dices are not the same"); } } @Test public void testGetPlayerCash() { for (int i = 0; i < 9; i++) { server.getPlayerCash(i); if (server.getGameState().getPlayerById(i) != null) { if (server.getPlayerCash(i) != server.getGameState() .getPlayerById(i).getBalance()) { fail("Wrong Player Cash"); } } } } @Test public void testGetPlayerOnTurn() { server = new OjimServer("test"); server.initGame(2, 0); client1 = new TestClient2(server); client2 = new TestClient2(server); id1 = client1.id; id2 = client2.id; if (server.getPlayerOnTurn() != -1) { fail("Player should not be turned on, Player on turn:" + server.getPlayerOnTurn()); } server.setPlayerReady(id1); server.setPlayerReady(id2); if (server.getPlayerOnTurn() == -1) { fail("A player should be turned on."); } } @Test public void testGetNumberOfGetOutOfJailCards() { if (server.getNumberOfGetOutOfJailCards(id1) != server.getGameState() .getPlayerById(id1).getNumberOfGetOutOfJailCards()) { fail("Wrong count of GooJC"); } } @Test public void testGetNumberOfHousesLeft() { int old = server.getNumberOfHousesLeft(); for (int i = 0; i < 4; i++) { if (server.getGameState().getFieldAt(i) instanceof Street) server.getLogic().changeFieldOwner( server.getGameState().getPlayerById(id1), (BuyableField) server.getGameState().getFieldAt(i)); } server.construct(id1, 1); if (old - 1 != server.getNumberOfHousesLeft()) { fail("constructing didnt use a house"); } } @Test public void testGetNumberOfHotelsLeft() { int old = server.getNumberOfHotelsLeft(); server.getGameState().getPlayerById(id1).setBalance(10000000); for (int i = 0; i < 4; i++) { if (server.getGameState().getFieldAt(i) instanceof Street) server.getLogic().changeFieldOwner( server.getGameState().getPlayerById(id1), (BuyableField) server.getGameState().getFieldAt(i)); } for (int j = 0; j < 4; j++) { for (int i = 0; i < 4; i++) { if (server.getGameState().getFieldAt(i) instanceof Street) server.construct(id1, i); } } server.construct(id1, 1); if (old - 1 != server.getNumberOfHotelsLeft()) { fail("constructing didnt use a hotel"); } } @Test public void testRollDice() { int old = server.getDiceValue(); if (!server.rollDice(id1) || old == server.getDiceValue()) { fail("Player on turn was unable to Roll dices"); } old = server.getDiceValue(); if (server.rollDice(id2) || old != server.getDiceValue()) { fail("Player on turn was able to roll dices"); } } @Test public void testEndTurn() { server.rollDice(id1); server.accept(id1); server.rollDice(id1); server.accept(id1); server.rollDice(id1); server.accept(id1); if (!server.endTurn(id1)) { fail("Turn did not end"); } if (server.getPlayerOnTurn() == id1) { fail("still old Player on turn"); } } @Test public void testDeclareBankruptcy() { server.declareBankruptcy(id1); if (server.getGameState().getPlayerById(id1).getBalance() >= 0 || !server.getGameState().getPlayerById(id1).getIsBankrupt()) { fail("Setting Player bankrupt was not successful"); } } @Test public void testConstruct() { if (server.construct(id1, 1)) { fail("Player was able to construct a house while not owning the Street"); } server.getLogic().changeFieldOwner( server.getGameState().getPlayerById(id1), (BuyableField) server.getGameState().getFieldAt(1)); if (server.construct(id1, 1)) { fail("Player was able to construct a house while not owning all Streets of the Group"); } for (int i = 0; i < 4; i++) { if (server.getGameState().getFieldAt(i) instanceof Street) server.getLogic().changeFieldOwner( server.getGameState().getPlayerById(id1), (BuyableField) server.getGameState().getFieldAt(i)); } if (!server.construct(id1, 1)) { fail("Player was not able to construct"); } } @Test public void testDeconstruct() { if (server.deconstruct(id1, 1)) { fail("Player was able to deconstruct a house while not owning the Street"); } server.getLogic().changeFieldOwner( server.getGameState().getPlayerById(id1), (BuyableField) server.getGameState().getFieldAt(1)); if (server.deconstruct(id1, 1)) { fail("Player was able to deconstruct a house while not owning all Streets of the Group"); } for (int i = 0; i < 4; i++) { if (server.getGameState().getFieldAt(i) instanceof Street) server.getLogic().changeFieldOwner( server.getGameState().getPlayerById(id1), (BuyableField) server.getGameState().getFieldAt(i)); } if (server.deconstruct(id1, 1)) { fail("Player able to deconstruct a street with no houses"); } server.construct(id1, 1); if (server.deconstruct(id1, 1)) { fail("Player was not able to deconstruct"); } } @Test public void testToggleMortgage() { server.getLogic().changeFieldOwner( server.getGameState().getPlayerById(id1), (BuyableField) server.getGameState().getFieldAt(1)); server.toggleMortgage(id1, 1); if (!server.isMortgaged(1)) { fail("not mortaged while it should be"); } server.toggleMortgage(id1, 1); if (server.isMortgaged(1)) { fail("mortaged while it should be not"); } } @Test public void testSendMessage() { String test = "testMessage"; server.sendMessage(test, id2); if (!client1.lastMessage.equals(test) || client1.lastMessagePrivate) { fail("fail while messaging"); } } @Test public void testSendPrivateMessage() { String test = "testMessage"; server.sendPrivateMessage(test, id2, id1); if (!client1.lastMessage.equals(test) || !client1.lastMessagePrivate) { fail("fail while messaging"); } } @Test public void testGetName() { server = new OjimServer("test"); if (!server.getName().equals("test")) { fail("fail setting the Server name"); } } @Test public void testGetMaxClients() { server = new OjimServer("g"); for (int i = 2; i < 9; i++) { server.initGame(i, 0); if (server.getMaxClients() != i) { fail("maxCount:" + server.getMaxClients() + ", should be:" + i); } server = new OjimServer("g"); } } @Test public void testGetConnectedClients() { server = new OjimServer("g"); server.initGame(3, 0); if(server.getConnectedClients() != 0) { fail("Player on Server who should not be there"); } client1 = new TestClient2(server); client2 = new TestClient2(server); if(server.getConnectedClients() != 2) { fail("Player count incorrect"); } } @Test public void testGetTurnsInPrison() { server.getLogic().sendPlayerToJail(server.getGameState().getPlayerById(id1), (Jail)server.getGameState().getFieldAt(10)); if(server.getTurnsInPrison(id1) != server.getGameState().getPlayerById(id1).getRoundsInJail()) { fail("turns in prison are:" + server.getTurnsInPrison(id1) + ", should be:" + server.getGameState().getPlayerById(id1).getRoundsInJail()); } } @Test public void testPayFine() { server.getLogic().sendPlayerToJail(server.getGameState().getPlayerById(id1), (Jail)server.getGameState().getFieldAt(10)); server.endTurn(id1); server.rollDice(id2); server.accept(id2); server.rollDice(id2); server.accept(id2); server.rollDice(id2); server.accept(id2); server.endTurn(id2); server.payFine(id1); if(server.getGameState().getPlayerById(id1).getJail() != null) { fail("Player still in Jail"); } } @Test public void testGetMaximumBuiltLevel() { if(server.getMaximumBuiltLevel() != server.getRules().maxNumOfHouses) { fail("Maximum built level wrong"); } } @Test public void testGetEstateHousePrice() { for(int i = 0; i < 40; i++) { int price = server.getEstateHousePrice(i); Field f = server.getGameState().getFieldAt(i); if(f instanceof Street){ if(price != ((Street)f).getFieldGroup().getHousePrice()) { fail("house price is:" + price + ", should be" + ((Street)f).getFieldGroup().getHousePrice()); } } else { if(price != -1) { fail("fail"); } } } } @Test public void testGetMoneyToPay() { if(server.getMoneyToPay(10) != ((Jail)server.getGameState().getFieldAt(10)).getMoneyToPay()) { fail("is:" + server.getMoneyToPay(10) + ", should be:" + ((Jail)server.getGameState().getFieldAt(10)).getMoneyToPay()); } } @Test public void testGetClients() { server = new OjimServer("g"); server.initGame(3, 0); if(server.getClients().size() != 0) { fail("there is " + server.getClients().size() + " Client while there should be 0"); } client1 = new TestClient2(server); client2 = new TestClient2(server); if(server.getClients().size() != 2 || !server.getClients().contains(client1) || !server.getClients().contains(client2)) { fail("fail"); } } @Test public void testGetRoundsToWait() { if(server.getRoundsToWait(10) != ((Jail)server.getGameState().getFieldAt(10)).getRoundsToWait()) { fail("is:" + server.getRoundsToWait(10) + ", should be:" + ((Jail)server.getGameState().getFieldAt(10)).getRoundsToWait()); } } }