/**
* Copyright (C) 2002-2012 The FreeCol Team
*
* This file is part of FreeCol.
*
* FreeCol is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* FreeCol is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with FreeCol. If not, see <http://www.gnu.org/licenses/>.
*/
package net.sf.freecol.common.model;
import net.sf.freecol.server.model.ServerUnit;
import net.sf.freecol.util.test.FreeColTestCase;
public class ScopeTest extends FreeColTestCase {
UnitType carpenter = spec().getUnitType("model.unit.masterCarpenter");
UnitType frigate = spec().getUnitType("model.unit.frigate");
public void testEmptyScope(){
Scope testScope = new Scope();
// empty scope applies to all
assertTrue(testScope.appliesTo(carpenter));
assertTrue(testScope.appliesTo(frigate));
// unless negated
testScope.setMatchNegated(true);
assertFalse(testScope.appliesTo(carpenter));
assertFalse(testScope.appliesTo(frigate));
}
public void testTypeScope() {
Scope testScope = new Scope();
testScope.setType("model.unit.frigate");
assertTrue(testScope.appliesTo(frigate));
assertFalse(testScope.appliesTo(carpenter));
testScope.setMatchNegated(true);
assertFalse(testScope.appliesTo(frigate));
assertTrue(testScope.appliesTo(carpenter));
testScope.setMatchNegated(false);
testScope.setType("model.unit.masterCarpenter");
assertFalse(testScope.appliesTo(frigate));
assertTrue(testScope.appliesTo(carpenter));
testScope.setMatchNegated(true);
assertTrue(testScope.appliesTo(frigate));
assertFalse(testScope.appliesTo(carpenter));
}
public void testAbilityScope() {
Scope testScope = new Scope();
testScope.setAbilityID(Ability.NAVAL_UNIT);
assertEquals(frigate.hasAbility(Ability.NAVAL_UNIT),
testScope.appliesTo(frigate));
assertEquals(carpenter.hasAbility(Ability.NAVAL_UNIT),
testScope.appliesTo(carpenter));
}
public void testMethodScope() {
Scope testScope = new Scope();
testScope.setMethodName("getLineOfSight");
testScope.setMethodValue("1");
assertTrue(frigate.getLineOfSight() != 1);
assertFalse(testScope.appliesTo(frigate));
assertTrue(carpenter.getLineOfSight() == 1);
assertTrue(testScope.appliesTo(carpenter));
}
public void testCombinedScope() {
Scope testScope = new Scope();
testScope.setType("model.unit.frigate");
testScope.setAbilityID(Ability.NAVAL_UNIT);
testScope.setMethodName("getLineOfSight");
testScope.setMethodValue("2");
assertTrue(testScope.appliesTo(frigate));
testScope.setMethodValue("1");
assertFalse(testScope.appliesTo(frigate));
testScope.setMethodValue("2");
testScope.setAbilityID("model.ability.foundColony");
assertFalse(testScope.appliesTo(frigate));
}
public void testMatchesNull() {
Scope testScope = new Scope();
testScope.setType("model.unit.frigate");
assertTrue(testScope.appliesTo(frigate));
assertTrue(testScope.appliesTo(null));
testScope.setMatchesNull(false);
assertTrue(testScope.appliesTo(frigate));
assertFalse(testScope.appliesTo(null));
}
public void testEquality() {
Scope testScope1 = new Scope();
testScope1.setType("model.unit.frigate");
testScope1.setAbilityID(Ability.NAVAL_UNIT);
testScope1.setMethodName("getLineOfSight");
testScope1.setMethodValue("2");
testScope1.setMatchesNull(true);
testScope1.setMatchNegated(false);
assertTrue(testScope1.equals(testScope1));
Scope testScope2 = new Scope();
testScope2.setType("model.unit.frigate");
testScope2.setAbilityID(Ability.NAVAL_UNIT);
testScope2.setMethodName("getLineOfSight");
testScope2.setMethodValue("2");
testScope2.setMatchesNull(true);
testScope2.setMatchNegated(false);
assertTrue(testScope2.equals(testScope2));
assertTrue(testScope1.equals(testScope2));
assertTrue(testScope2.equals(testScope1));
testScope1.setType("model.unit.carpenter");
assertFalse(testScope1.equals(testScope2));
assertFalse(testScope2.equals(testScope1));
testScope1.setType("model.unit.frigate");
testScope1.setAbilityID("model.ability.foundColony");
assertFalse(testScope1.equals(testScope2));
assertFalse(testScope2.equals(testScope1));
testScope1.setAbilityID(Ability.NAVAL_UNIT);
testScope1.setAbilityValue(false);
assertFalse(testScope1.equals(testScope2));
assertFalse(testScope2.equals(testScope1));
testScope1.setAbilityValue(true);
testScope1.setMethodName("getOffence");
assertFalse(testScope1.equals(testScope2));
assertFalse(testScope2.equals(testScope1));
testScope1.setMethodName("getLineOfSight");
testScope1.setMethodValue("9");
assertFalse(testScope1.equals(testScope2));
assertFalse(testScope2.equals(testScope1));
testScope1.setMethodValue("2");
assertTrue(testScope1.equals(testScope2));
assertTrue(testScope2.equals(testScope1));
testScope1.setMatchesNull(false);
assertFalse(testScope1.equals(testScope2));
assertFalse(testScope2.equals(testScope1));
testScope1.setMatchesNull(true);
assertTrue(testScope1.equals(testScope2));
assertTrue(testScope2.equals(testScope1));
testScope1.setMatchNegated(true);
assertFalse(testScope1.equals(testScope2));
assertFalse(testScope2.equals(testScope1));
testScope1.setMatchNegated(false);
assertTrue(testScope1.equals(testScope2));
assertTrue(testScope2.equals(testScope1));
}
public void testGameObjects() {
Game game = getStandardGame();
Player dutch = game.getPlayer("model.nation.dutch");
Map map = getTestMap();
game.setMap(map);
Tile unitTile = map.getTile(6, 8);
UnitType colonistType = spec().getUnitType("model.unit.freeColonist");
Unit unit = new ServerUnit(game, unitTile, dutch, colonistType);
Scope scope = new Scope();
scope.setAbilityID("model.ability.foundColony");
assertTrue(scope.appliesTo(unit));
scope.setType("model.unit.freeColonist");
assertTrue(scope.appliesTo(unit));
scope.setType("model.unit.hardyPioneer");
assertFalse(scope.appliesTo(unit));
}
}