package test;
import static org.junit.Assert.*;
import org.junit.BeforeClass;
import org.junit.Test;
import org.ojim.client.ai.commands.AcceptCommand;
import org.ojim.client.ai.commands.BuildHouseCommand;
import org.ojim.client.ai.commands.NullCommand;
import org.ojim.client.ai.commands.ToggleMortgageCommand;
import org.ojim.client.ai.valuation.Valuator;
import org.ojim.logic.Logic;
import org.ojim.logic.rules.GameRules;
import org.ojim.logic.state.GameState;
import org.ojim.logic.state.Player;
import org.ojim.logic.state.fields.BuyableField;
import org.ojim.logic.state.fields.Field;
import org.ojim.logic.state.fields.Street;
import org.ojim.logic.state.fields.StreetFieldGroup;
import org.ojim.server.OjimServer;
import org.ojim.iface.Rules;
import edu.kit.iti.pse.iface.IServer;
public class ValuatorTest {
private static MyGameState state;
private static MyGameRules rules;
private static MyLogic logic;
private static Street testStreet;
private static IServer server;
private static Valuator valuator;
private static StreetFieldGroup group;
@BeforeClass
public static void setup() {
testStreet = new Street("Sumpf", 1, new int[] { 40, 200, 600, 1800, 3200, 5000 }, 0, 1200,
null);
server = new MyServer("Test");
state = new MyGameState();
rules = new MyGameRules(state, new Rules());
logic = new MyLogic(state, rules);
group = new StreetFieldGroup(0, "test", 0);
testStreet.setFieldGroup(group);
group.addField(testStreet);
valuator = new Valuator(logic, server, 0);
}
// TODO Fabian?
@Test(expected = NullPointerException.class)
public void testValuator() {
valuator = new Valuator(null, null, 0);
}
@Test(expected = IllegalArgumentException.class)
public void testReturnBestCommandWithIllegalPosition() {
valuator.returnBestCommand(41);
}
@Test
public void testReturnBestCommand() {
// Buy street
testStreet.buy(null);
MyPlayer.mySetBalance(100000);
assertTrue(valuator.returnBestCommand(1) instanceof AcceptCommand);
}
@Test
public void testPaybackMortgages() {
IServer server = new OjimServer("Test");
Valuator valuator = new Valuator(logic, server, 0);
testStreet.setMortgaged(true);
MyPlayer.mySetBalance(100000);
assertTrue(valuator.paybackMortgages() instanceof ToggleMortgageCommand);
MyPlayer.mySetBalance(0);
assertTrue(valuator.paybackMortgages() instanceof NullCommand);
}
@Test(expected = IllegalStateException.class)
public void testNegativeWithNegative() {
IServer server = new OjimServer("Test");
MyPlayer.mySetBalance(1);
Valuator valuator = new Valuator(logic, server, 0);
valuator.negative();
}
@Test
public void testNegativeWithPositive() {
IServer server = new OjimServer("Test");
MyPlayer.mySetBalance(1);
Valuator valuator = new Valuator(logic, server, 0);
MyPlayer.mySetBalance(-1);
valuator = new Valuator(logic, server, 0);
assertTrue(valuator.negative() instanceof ToggleMortgageCommand);
}
public final static class MyLogic extends Logic {
public MyLogic(MyGameState state, GameRules rules) {
super(state, rules);
}
}
public final static class MyPlayer extends Player {
public static int balance = 0;
public MyPlayer(int id) {
super("Test", 1, 0, id, 0);
}
@Override
public int getBalance() {
return balance;
}
public static void mySetBalance(int balance) {
MyPlayer.balance = balance;
}
@Override
public BuyableField[] getFields() {
BuyableField[] result = new BuyableField[1];
result[0] = testStreet;
return result;
}
}
public final static class MyGameState extends GameState {
private static MyPlayer myPlayer = new MyPlayer(0);
@Override
public Player getPlayerById(int id) {
return myPlayer;
}
@Override
public Player getActivePlayer() {
return myPlayer;
}
@Override
public Player[] getPlayers() {
Player[] result = new Player[2];
result[0] = myPlayer;
result[1] = new MyPlayer(1);
return result;
}
@Override
public Field getFieldAt(int position) {
return testStreet;
}
}
public final static class MyGameRules extends GameRules {
public MyGameRules(GameState state, Rules rules) {
super(state, rules);
}
@Override
public boolean isFieldMortgageable(Player player, Field field) {
return true;
}
@Override
public boolean isFieldUpgradable(Player player, Field field, int levelChange) {
return testStreet.getOwner() != null;
}
}
public final static class MyServer extends OjimServer {
public MyServer(String name) {
super(name);
}
@Override
public int getEstateHousePrice(int position) {
return 10;
}
}
}