/*
* PreRaceTest.java
*
* Copyright 2003 (C) Chris Ward <frugal@purplewombat.co.uk>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Created on 13-Jan-2004
*
* Current Ver: $Revision$
*
*
*
*/
package pcgen.core.prereq;
import junit.framework.Test;
import junit.framework.TestSuite;
import junit.textui.TestRunner;
import pcgen.AbstractCharacterTestCase;
import pcgen.cdom.enumeration.ListKey;
import pcgen.cdom.enumeration.ObjectKey;
import pcgen.cdom.enumeration.RaceSubType;
import pcgen.cdom.enumeration.RaceType;
import pcgen.cdom.enumeration.Type;
import pcgen.cdom.reference.CDOMDirectSingleRef;
import pcgen.core.Globals;
import pcgen.core.PlayerCharacter;
import pcgen.core.Race;
/**
* @author wardc
*
*/
@SuppressWarnings("nls")
public class PreRaceTest extends AbstractCharacterTestCase
{
/**
* Runs the test.
* @param args
*/
public static void main(final String[] args)
{
TestRunner.run(PreRaceTest.class);
}
/**
* Returns a TestSuite consisting of all the tests in this class.
*
* @return Test
*/
public static Test suite()
{
return new TestSuite(PreRaceTest.class);
}
/**
* Test to ensure that we return false when races don't match.
*
* @throws Exception
*/
public void testFail() throws Exception
{
final PlayerCharacter character = getCharacter();
final Race race = new Race();
race.setName("Human");
Globals.getContext().getReferenceContext().importObject(race);
character.setRace(race);
final Prerequisite prereq = new Prerequisite();
prereq.setKind("race");
prereq.setKey("Orc");
prereq.setOperator(PrerequisiteOperator.EQ);
final boolean passes = PrereqHandler.passes(prereq, character, null);
assertFalse(passes);
}
/**
* Test to make sure we return false when race is equal but NOT is specificed.
*
* @throws Exception
*/
public void testNeqFails() throws Exception
{
final PlayerCharacter character = getCharacter();
final Race race = new Race();
race.setName("Human");
Globals.getContext().getReferenceContext().importObject(race);
character.setRace(race);
final Prerequisite prereq = new Prerequisite();
prereq.setKind("race");
prereq.setKey("Human");
prereq.setOperator(PrerequisiteOperator.NEQ);
final boolean passes = PrereqHandler.passes(prereq, character, null);
assertFalse(passes);
}
/**
* Test to make sure that NOT returns true if races don't match.
*
* @throws Exception
*/
public void testNeqPasses() throws Exception
{
final PlayerCharacter character = getCharacter();
final Race race = new Race();
race.setName("Human");
Globals.getContext().getReferenceContext().importObject(race);
character.setRace(race);
final Prerequisite prereq = new Prerequisite();
prereq.setKind("race");
prereq.setKey("Orc");
prereq.setOperator(PrerequisiteOperator.NEQ);
final boolean passes = PrereqHandler.passes(prereq, character, null);
assertTrue(passes);
}
/**
* Test to make sure that we return true when races are equal.
*
* @throws Exception
*/
public void testPass() throws Exception
{
final PlayerCharacter character = getCharacter();
final Race race = new Race();
race.setName("Human");
Globals.getContext().getReferenceContext().importObject(race);
character.setRace(race);
final Prerequisite prereq = new Prerequisite();
prereq.setKind("race");
prereq.setKey("human");
prereq.setOperator(PrerequisiteOperator.EQ);
final boolean passes = PrereqHandler.passes(prereq, character, null);
assertTrue(passes);
}
/**
* Test to make sure that we return true when races are equal using ServesAs.
*
* @throws Exception
*/
public void testPassServesAsName() throws Exception
{
final PlayerCharacter character = getCharacter();
final Race race = new Race();
race.setName("Human");
Globals.getContext().getReferenceContext().importObject(race);
final Race fake = new Race();
fake.setName("NotHuman");
Globals.getContext().getReferenceContext().importObject(fake);
fake.addToListFor(ListKey.SERVES_AS_RACE, CDOMDirectSingleRef.getRef(race));
character.setRace(fake);
final Prerequisite prereq = new Prerequisite();
prereq.setKind("race");
prereq.setKey(race.getKeyName());
prereq.setOperator(PrerequisiteOperator.EQ);
final boolean passes = PrereqHandler.passes(prereq, character, null);
assertTrue("Expected prereq " + prereq + " to pass for race " + fake
+ " with SERVESAS", passes);
}
public void testRaceTypeEq()
{
final PlayerCharacter character = getCharacter();
final Race race = new Race();
race.setName("Human");
race.put(ObjectKey.RACETYPE, RaceType.getConstant("Humanoid"));
Globals.getContext().getReferenceContext().importObject(race);
character.setRace(race);
final Prerequisite prereq = new Prerequisite();
prereq.setKind("race");
prereq.setKey("RACETYPE=Humanoid");
prereq.setOperator(PrerequisiteOperator.EQ);
final boolean passes = PrereqHandler.passes(prereq, character, null);
assertTrue(prereq + " should pass", passes);
}
public void testRaceTypeNeq()
{
final PlayerCharacter character = getCharacter();
final Race race = new Race();
race.setName("Human");
race.put(ObjectKey.RACETYPE, RaceType.getConstant("Humanoid"));
Globals.getContext().getReferenceContext().importObject(race);
character.setRace(race);
final Prerequisite prereq = new Prerequisite();
prereq.setKind("race");
prereq.setKey("RACETYPE=Dragon");
prereq.setOperator(PrerequisiteOperator.LT);
boolean passes = PrereqHandler.passes(prereq, character, null);
assertTrue(prereq + " should pass", passes);
prereq.setKey("RACETYPE=Humanoid");
passes = PrereqHandler.passes(prereq, character, null);
assertFalse(prereq + " should not pass", passes);
}
/**
* Test to make sure that we return true when races RACESUBTYPE are equal using ServesAs.
*
* @throws Exception
*/
public void testPassServesAsRaceSubType() throws Exception
{
final PlayerCharacter character = getCharacter();
final Race race = new Race();
race.setName("Human");
race.addToListFor(ListKey.TYPE, Type.getConstant("Outsider"));
race.addToListFor(ListKey.RACESUBTYPE, RaceSubType.getConstant("aquatic"));
race.addToListFor(ListKey.RACESUBTYPE, RaceSubType.getConstant("foo"));
Globals.getContext().getReferenceContext().importObject(race);
final Race fake = new Race();
fake.setName("NotHuman");
fake.addToListFor(ListKey.TYPE, Type.getConstant("Humanoid"));
fake.addToListFor(ListKey.RACESUBTYPE, RaceSubType.getConstant("desert"));
fake.addToListFor(ListKey.RACESUBTYPE, RaceSubType.getConstant("none"));
Globals.getContext().getReferenceContext().importObject(fake);
fake.addToListFor(ListKey.SERVES_AS_RACE, CDOMDirectSingleRef.getRef(race));
final Race gnome = new Race();
gnome.setName("Gnome");
gnome.addToListFor(ListKey.RACESUBTYPE, RaceSubType.getConstant("SpikyHair"));
Globals.getContext().getReferenceContext().importObject(gnome);
final Race bugbear = new Race();
bugbear.setName("Bugbear");
bugbear.addToListFor(ListKey.RACESUBTYPE, RaceSubType.getConstant("SpikyClub"));
Globals.getContext().getReferenceContext().importObject(bugbear);
bugbear.addToListFor(ListKey.SERVES_AS_RACE, CDOMDirectSingleRef.getRef(gnome));
character.setRace(fake);
final Prerequisite prereq = new Prerequisite();
prereq.setKind("race");
prereq.setKey("RACESUBTYPE=aquatic");
prereq.setOperator(PrerequisiteOperator.EQ);
boolean passes = PrereqHandler.passes(prereq, character, null);
assertTrue(passes);
final Prerequisite prereq2 = new Prerequisite();
prereq2.setKind("race");
prereq2.setKey("RACESUBTYPE=foo");
prereq2.setOperator(PrerequisiteOperator.EQ);
passes = PrereqHandler.passes(prereq2, character, null);
assertTrue(passes);
prereq.setKey("RACESUBTYPE=SpikyHair");
passes = PrereqHandler.passes(prereq, character, null);
assertFalse("Prereq " + prereq
+ " should not be passed by character without a "
+ "race or servesas link.", passes);
}
/**
* Test to make sure that we return true when races RACETYPE are equal using ServesAs.
*
* @throws Exception
*/
public void testPassServesAsRaceType() throws Exception
{
final PlayerCharacter character = getCharacter();
final Race race = new Race();
race.setName("Human");
race.put(ObjectKey.RACETYPE, RaceType.getConstant("Outsider"));
race.addToListFor(ListKey.TYPE, Type.getConstant("Outsider"));
Globals.getContext().getReferenceContext().importObject(race);
final Race fake = new Race();
fake.setName("NotHuman");
fake.put(ObjectKey.RACETYPE, RaceType.getConstant("Humanoid"));
fake.addToListFor(ListKey.TYPE, Type.getConstant("Humanoid"));
Globals.getContext().getReferenceContext().importObject(fake);
fake.addToListFor(ListKey.SERVES_AS_RACE, CDOMDirectSingleRef.getRef(race));
final Race gnome = new Race();
gnome.setName("Gnome");
gnome.put(ObjectKey.RACETYPE, RaceType.getConstant("Smaller"));
Globals.getContext().getReferenceContext().importObject(gnome);
character.setRace(fake);
final Prerequisite prereq = new Prerequisite();
prereq.setKind("race");
prereq.setKey("RACETYPE=Outsider");
prereq.setOperator(PrerequisiteOperator.EQ);
boolean passes = PrereqHandler.passes(prereq, character, null);
assertTrue("Prereq " + prereq + " should pass due to SERVESAS",passes);
prereq.setKey("RACETYPE=Smaller");
passes = PrereqHandler.passes(prereq, character, null);
assertFalse("Prereq " + prereq
+ " should not be passed by character without a "
+ "race or servesas link.", passes);
}
/**
* Test to make sure that we return true when races TYPE are equal.
*
* @throws Exception
*/
public void testPassServesAsType() throws Exception
{
final PlayerCharacter character = getCharacter();
final Race race = new Race();
race.setName("Human");
race.addToListFor(ListKey.TYPE, Type.getConstant("Outsider"));
Globals.getContext().getReferenceContext().importObject(race);
final Race fake = new Race();
fake.setName("NotHuman");
fake.addToListFor(ListKey.TYPE, Type.getConstant("Humanoid"));
Globals.getContext().getReferenceContext().importObject(fake);
fake.addToListFor(ListKey.SERVES_AS_RACE, CDOMDirectSingleRef.getRef(race));
final Race gnome = new Race();
gnome.setName("Gnome");
gnome.addToListFor(ListKey.TYPE, Type.getConstant("Smaller"));
Globals.getContext().getReferenceContext().importObject(gnome);
character.setRace(fake);
final Prerequisite prereq = new Prerequisite();
prereq.setKind("race");
prereq.setKey("TYPE=Outsider");
prereq.setOperator(PrerequisiteOperator.EQ);
boolean passes = PrereqHandler.passes(prereq, character, null);
assertTrue("Prereq " + prereq + " should pass due to SERVESAS",passes);
prereq.setKey("TYPE=Smaller");
passes = PrereqHandler.passes(prereq, character, null);
assertFalse("Prereq " + prereq
+ " should not be passed by character without a "
+ "race or servesas link.", passes);
}
/**
* Test to make sure that PRERACE with wildcarded names functions
* correctly with SERVESAS
*/
public void testPassServesAsNameWildcard()
{
final PlayerCharacter character = getCharacter();
final Race race = new Race();
race.setName("Human");
Globals.getContext().getReferenceContext().importObject(race);
final Race fake = new Race();
fake.setName("NotHuman");
Globals.getContext().getReferenceContext().importObject(fake);
fake.addToListFor(ListKey.SERVES_AS_RACE, CDOMDirectSingleRef
.getRef(race));
final Race gnome = new Race();
gnome.setName("Gnome");
Globals.getContext().getReferenceContext().importObject(gnome);
character.setRace(fake);
// Check the servesas condition
final Prerequisite prereq = new Prerequisite();
prereq.setKind("race");
prereq.setKey("human%");
prereq.setOperator(PrerequisiteOperator.EQ);
boolean passes = PrereqHandler.passes(prereq, character, null);
assertTrue("PRERACE:1,human% should have been passed", passes);
prereq.setKey("NotHuman%");
passes = PrereqHandler.passes(prereq, character, null);
assertTrue("PRERACE:1,NotHuman% should have been passed", passes);
prereq.setKey("Elf%");
passes = PrereqHandler.passes(prereq, character, null);
assertFalse("PRERACE:1,Elf% should not have been passed", passes);
prereq.setKey("Gno%");
passes = PrereqHandler.passes(prereq, character, null);
assertFalse("PRERACE:1,Gno% should not have been passed", passes);
}
}