/* * PreSkillTest.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 12-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.Type; import pcgen.cdom.reference.CDOMDirectSingleRef; import pcgen.core.Globals; import pcgen.core.PCClass; import pcgen.core.PlayerCharacter; import pcgen.core.Skill; import pcgen.core.analysis.SkillRankControl; import pcgen.persistence.lst.prereq.PreParserFactory; import pcgen.rules.context.LoadContext; import pcgen.util.TestHelper; public class PreSkillTest extends AbstractCharacterTestCase { public static void main(final String[] args) { TestRunner.run(PreSkillTest.class); } /** * @return Test */ public static Test suite() { return new TestSuite(PreSkillTest.class); } Skill balance = null; Skill knowledge = null; Skill knowledge2 = null; Skill tumble = null; Skill fake = null; Skill fake2 = null; Skill target = null; Skill target2 = null; /* (non-Javadoc) * @see junit.framework.TestCase#setUp() */ @Override protected void setUp() throws Exception { super.setUp(); final PlayerCharacter character = getCharacter(); final PCClass myClass = new PCClass(); myClass.setName("My Class"); LoadContext context = Globals.getContext(); knowledge = new Skill(); context.unconditionallyProcess(knowledge, "CLASSES", "MyClass"); knowledge.setName("KNOWLEDGE (ARCANA)"); TestHelper.addType(knowledge, "KNOWLEDGE.INT"); context.getReferenceContext().importObject(knowledge); SkillRankControl.modRanks(6.0, myClass, true, character, knowledge); knowledge2 = new Skill(); context.unconditionallyProcess(knowledge2, "CLASSES", "MyClass"); knowledge2.setName("KNOWLEDGE (NATURE)"); TestHelper.addType(knowledge2, "KNOWLEDGE.INT"); context.getReferenceContext().importObject(knowledge2); SkillRankControl.modRanks(8.0, myClass, true, character, knowledge2); tumble = new Skill(); context.unconditionallyProcess(tumble, "CLASSES", "MyClass"); tumble.setName("Tumble"); tumble.addToListFor(ListKey.TYPE, Type.getConstant("DEX")); context.getReferenceContext().importObject(tumble); SkillRankControl.modRanks(8.0, myClass, true, character, tumble); balance = new Skill(); context.unconditionallyProcess(balance, "CLASSES", "MyClass"); balance.setName("Balance"); balance.addToListFor(ListKey.TYPE, Type.getConstant("DEX")); context.getReferenceContext().importObject(balance); SkillRankControl.modRanks(4.0, myClass, true, character, balance); target = new Skill(); context.unconditionallyProcess(target, "CLASSES", "MyClass"); target.setName("Target"); target.addToListFor(ListKey.TYPE, Type.getConstant("STR")); context.getReferenceContext().importObject(target); target2 = new Skill(); context.unconditionallyProcess(target2, "CLASSES", "MyClass"); target2.setName("Target2"); target2.addToListFor(ListKey.TYPE, Type.getConstant("STR")); context.getReferenceContext().importObject(target2); fake = new Skill(); context.unconditionallyProcess(fake, "CLASSES", "MyClass"); fake.setName("Fake"); fake.addToListFor(ListKey.TYPE, Type.getConstant("WIS")); fake.addToListFor(ListKey.SERVES_AS_SKILL, CDOMDirectSingleRef.getRef(target)); fake.addToListFor(ListKey.SERVES_AS_SKILL, CDOMDirectSingleRef.getRef(target2)); context.getReferenceContext().importObject(fake); SkillRankControl.modRanks(6.0, myClass, true, character, fake); fake2 = new Skill(); context.unconditionallyProcess(fake2, "CLASSES", "MyClass"); fake2.setName("Fake 2"); fake2.addToListFor(ListKey.TYPE, Type.getConstant("INT")); context.getReferenceContext().importObject(fake2); SkillRankControl.modRanks(8.0, myClass, true, character, fake2); context.getReferenceContext().buildDerivedObjects(); context.getReferenceContext().resolveReferences(null); } /* (non-Javadoc) * @see junit.framework.TestCase#tearDown() */ @Override protected void tearDown() throws Exception { knowledge = null; balance = null; tumble = null; super.tearDown(); } /** * @throws Exception */ public void testDexType() throws Exception { final Prerequisite prereq = new Prerequisite(); prereq.setKind("skill"); prereq.setKey("TYPE.DEX"); prereq.setOperator(PrerequisiteOperator.GTEQ); prereq.setOperand("5"); final PlayerCharacter character = getCharacter(); final boolean passes = PrereqHandler.passes(prereq, character, null); assertTrue(passes); } /** * @throws Exception */ public void testDexTypeEqualsFails() throws Exception { final Prerequisite prereq = new Prerequisite(); prereq.setKind("skill"); prereq.setKey("TYPE.DEX"); prereq.setOperator(PrerequisiteOperator.EQ); prereq.setOperand("5"); final PlayerCharacter character = getCharacter(); final boolean passes = PrereqHandler.passes(prereq, character, null); assertFalse(passes); } /** * @throws Exception */ public void testDexTypeEqualsPasses() throws Exception { final Prerequisite prereq = new Prerequisite(); prereq.setKind("skill"); prereq.setKey("TYPE.DEX"); prereq.setOperator(PrerequisiteOperator.EQ); prereq.setOperand("8"); final PlayerCharacter character = getCharacter(); final boolean passes = PrereqHandler.passes(prereq, character, null); assertTrue(passes); } /** * @throws Exception */ public void testKnowedgeSubType() throws Exception { final Prerequisite prereq = new Prerequisite(); prereq.setKind("skill"); prereq.setKey("knowledge"); prereq.setSubKey("arcana"); prereq.setOperator(PrerequisiteOperator.GTEQ); prereq.setOperand("2"); final PlayerCharacter character = getCharacter(); final boolean passes = PrereqHandler.passes(prereq, character, null); assertTrue(passes); } /** * @throws Exception */ public void testKnowedgeSubTypeFail() throws Exception { final Prerequisite prereq = new Prerequisite(); prereq.setKind("skill"); prereq.setKey("knowledge"); prereq.setSubKey("arcana"); prereq.setOperator(PrerequisiteOperator.GTEQ); prereq.setOperand("9"); final PlayerCharacter character = getCharacter(); final boolean passes = PrereqHandler.passes(prereq, character, null); assertFalse(passes); } /** * @throws Exception */ public void testKnowedgeSubTypePasesExact() throws Exception { final Prerequisite prereq = new Prerequisite(); prereq.setKind("skill"); prereq.setKey("knowledge"); prereq.setSubKey("arcana"); prereq.setOperator(PrerequisiteOperator.GTEQ); prereq.setOperand("6"); final PlayerCharacter character = getCharacter(); final boolean passes = PrereqHandler.passes(prereq, character, null); assertTrue(passes); } /** * @throws Exception */ public void testKnowedgeType() throws Exception { final Prerequisite prereq = new Prerequisite(); prereq.setKind("skill"); prereq.setKey("TYPE.knowledge"); prereq.setOperator(PrerequisiteOperator.GTEQ); prereq.setOperand("8"); final PlayerCharacter character = getCharacter(); final boolean passes = PrereqHandler.passes(prereq, character, null); assertTrue(passes); } /** * @throws Exception */ public void testKnowedgeWrongSubType() throws Exception { final Prerequisite prereq = new Prerequisite(); prereq.setKind("skill"); prereq.setKey("knowledge"); prereq.setSubKey("religion"); prereq.setOperator(PrerequisiteOperator.GTEQ); prereq.setOperand("8"); final PlayerCharacter character = getCharacter(); final boolean passes = PrereqHandler.passes(prereq, character, null); assertFalse(passes); } /** * @throws Exception */ public void testPass() throws Exception { final PlayerCharacter character = getCharacter(); final PCClass myClass = new PCClass(); myClass.setName("My Class"); final Prerequisite prereq = new Prerequisite(); prereq.setKind("skill"); prereq.setKey("tumble"); prereq.setOperator(PrerequisiteOperator.GTEQ); prereq.setOperand("2"); final boolean passes = PrereqHandler.passes(prereq, character, null); assertTrue(passes); } /** * @throws Exception */ public void testTotalType() throws Exception { // PreSkillTotalParser producer = new PreSkillTotalParser(); // Prerequisite prereq = producer.parse("SKILLTOT","TYPE.Knowledge=20", false, false); final Prerequisite prereq = new Prerequisite(); prereq.setOperator(PrerequisiteOperator.GTEQ); prereq.setOperand("10"); final Prerequisite subreq = new Prerequisite(); subreq.setKind("skill"); subreq.setKey("TYPE.DEX"); subreq.setOperator(PrerequisiteOperator.GTEQ); subreq.setOperand("1"); subreq.setTotalValues(true); prereq.addPrerequisite(subreq); final PlayerCharacter character = getCharacter(); final boolean passes = PrereqHandler.passes(prereq, character, null); assertTrue(passes); } /** * @throws Exception */ public void testType() throws Exception { final Prerequisite subreq = new Prerequisite(); subreq.setKind("skill"); subreq.setKey("TYPE.DEX"); subreq.setOperator(PrerequisiteOperator.GTEQ); subreq.setOperand("7"); subreq.setTotalValues(true); final PlayerCharacter character = getCharacter(); final boolean passes = PrereqHandler.passes(subreq, character, null); assertTrue(passes); } public void testLevelsTwoClasses() throws Exception { final PlayerCharacter character = getCharacter(); final PreParserFactory factory = PreParserFactory.getInstance(); Prerequisite prereq = factory.parse("PRESKILL:2,Balance=4,Tumble=2"); assertEquals(true, PrereqHandler.passes(prereq, character, null)); } public void testServesAsExactMatch() throws Exception { final PlayerCharacter character = getCharacter(); final PreParserFactory factory = PreParserFactory.getInstance(); Prerequisite prereq = factory.parse("PRESKILL:2,Target=4,Target2=4"); assertEquals(true, PrereqHandler.passes(prereq, character, null)); prereq = factory.parse("PRESKILL:1,Target=5,Target2=5"); assertEquals(true, PrereqHandler.passes(prereq, character, null)); prereq = factory.parse("PRESKILL:2,Target=7,Target2=7"); assertEquals(false, PrereqHandler.passes(prereq, character, null)); prereq = factory.parse("PRESKILL:2,Target=4,Target2=7"); assertEquals(false, PrereqHandler.passes(prereq, character, null)); } public void testServesAsTypeMatch() throws Exception { final PlayerCharacter character = getCharacter(); final PreParserFactory factory = PreParserFactory.getInstance(); Prerequisite prereq = factory.parse("PRESKILL:1,TYPE.INT=4"); assertEquals(true, PrereqHandler.passes(prereq, character, null)); prereq = factory.parse("PRESKILL:1,TYPE.STR=6"); assertEquals(true, PrereqHandler.passes(prereq, character, null)); prereq = factory.parse("PRESKILL:1,TYPE.ST%=6"); assertEquals(true, PrereqHandler.passes(prereq, character, null)); prereq = factory.parse("PRESKILL:1,TYPE.STR=7"); assertEquals(false, PrereqHandler.passes(prereq, character, null)); prereq = factory.parse("PRESKILL:1,TYPE.ST%=7"); assertEquals(false, PrereqHandler.passes(prereq, character, null)); prereq = factory.parse("PRESKILL:1,TYPE.CHA=1"); assertEquals(false, PrereqHandler.passes(prereq, character, null)); prereq = factory.parse("PRESKILL:1,TYPE.CH%=7"); assertEquals(false, PrereqHandler.passes(prereq, character, null)); } public void testServesAsTotalsMatch() throws Exception { final PlayerCharacter character = getCharacter(); final PreParserFactory factory = PreParserFactory.getInstance(); Prerequisite prereq = factory.parse("PRESKILLTOT:Tumble,Target=18"); assertEquals(false, PrereqHandler.passes(prereq, character, null)); prereq = factory.parse("PRESKILLTOT:Tumble,Target2=14"); assertEquals(true, PrereqHandler.passes(prereq, character, null)); prereq = factory.parse("PRESKILLTOT:Foo,Target=40"); assertEquals(false, PrereqHandler.passes(prereq, character, null)); } }