From: <th...@us...> - 2007-05-28 15:58:45
|
Revision: 3068 http://svn.sourceforge.net/pcgen/?rev=3068&view=rev Author: thpr Date: 2007-05-28 08:58:44 -0700 (Mon, 28 May 2007) Log Message: ----------- CDOM: Additional CDOM Implementation of PRExxx Tokens Modified Paths: -------------- branches/cdom/code/src/java/pcgen/cdom/enumeration/AssociationKey.java branches/cdom/code/src/java/pcgen/core/PlayerCharacter.java branches/cdom/code/src/java/pcgen/core/prereq/PreEquippedTester.java branches/cdom/code/src/java/plugin/pretokens/test/PreEquipBothTester.java branches/cdom/code/src/java/plugin/pretokens/test/PreEquipPrimaryTester.java branches/cdom/code/src/java/plugin/pretokens/test/PreEquipSecondaryTester.java branches/cdom/code/src/java/plugin/pretokens/test/PreEquipTester.java branches/cdom/code/src/java/plugin/pretokens/test/PreEquipTwoWeaponTester.java branches/cdom/code/src/test/pcgen/core/prereq/PreClassTest.java branches/cdom/code/src/test/pcgen/core/prereq/PreSkillTest.java branches/cdom/code/src/utest/plugin/pretokens/test/AbstractCDOMObjectTestCase.java Added Paths: ----------- branches/cdom/code/src/java/pcgen/cdom/content/EquipmentSet.java branches/cdom/code/src/java/pcgen/cdom/helper/EquipmentSetFacade.java branches/cdom/code/src/utest/plugin/pretokens/test/AbstractCDOMPreEquipTestCase.java branches/cdom/code/src/utest/plugin/pretokens/test/PreEquipBothTesterTest.java branches/cdom/code/src/utest/plugin/pretokens/test/PreEquipPrimaryTesterTest.java branches/cdom/code/src/utest/plugin/pretokens/test/PreEquipSecondaryTesterTest.java branches/cdom/code/src/utest/plugin/pretokens/test/PreEquipTesterTest.java branches/cdom/code/src/utest/plugin/pretokens/test/PreEquipTwoWeaponTesterTest.java Removed Paths: ------------- branches/cdom/code/src/java/pcgen/cdom/helper/EquipmentSet.java Copied: branches/cdom/code/src/java/pcgen/cdom/content/EquipmentSet.java (from rev 3065, branches/cdom/code/src/java/pcgen/cdom/helper/EquipmentSet.java) =================================================================== --- branches/cdom/code/src/java/pcgen/cdom/content/EquipmentSet.java (rev 0) +++ branches/cdom/code/src/java/pcgen/cdom/content/EquipmentSet.java 2007-05-28 15:58:44 UTC (rev 3068) @@ -0,0 +1,8 @@ +package pcgen.cdom.content; + +import pcgen.cdom.base.ConcretePrereqObject; + +public class EquipmentSet extends ConcretePrereqObject +{ + +} Modified: branches/cdom/code/src/java/pcgen/cdom/enumeration/AssociationKey.java =================================================================== --- branches/cdom/code/src/java/pcgen/cdom/enumeration/AssociationKey.java 2007-05-28 08:19:48 UTC (rev 3067) +++ branches/cdom/code/src/java/pcgen/cdom/enumeration/AssociationKey.java 2007-05-28 15:58:44 UTC (rev 3068) @@ -102,6 +102,9 @@ public static final AssociationKey<Integer> WEIGHT = new AssociationKey<Integer>(); + public static final AssociationKey<Integer> EQUIPMENT_LOCATION = + new AssociationKey<Integer>(); + private static CaseInsensitiveMap<AssociationKey<?>> map = null; private AssociationKey() Deleted: branches/cdom/code/src/java/pcgen/cdom/helper/EquipmentSet.java =================================================================== --- branches/cdom/code/src/java/pcgen/cdom/helper/EquipmentSet.java 2007-05-28 08:19:48 UTC (rev 3067) +++ branches/cdom/code/src/java/pcgen/cdom/helper/EquipmentSet.java 2007-05-28 15:58:44 UTC (rev 3068) @@ -1,22 +0,0 @@ -package pcgen.cdom.helper; - -import java.util.Collection; - -import pcgen.core.Equipment; - -public class EquipmentSet -{ - - public Collection<Equipment> getEquipment() - { - // TODO Auto-generated method stub - return null; - } - - public Collection<Equipment> getEquipment(int location) - { - // TODO Auto-generated method stub - return null; - } - -} Added: branches/cdom/code/src/java/pcgen/cdom/helper/EquipmentSetFacade.java =================================================================== --- branches/cdom/code/src/java/pcgen/cdom/helper/EquipmentSetFacade.java (rev 0) +++ branches/cdom/code/src/java/pcgen/cdom/helper/EquipmentSetFacade.java 2007-05-28 15:58:44 UTC (rev 3068) @@ -0,0 +1,92 @@ +package pcgen.cdom.helper; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import pcgen.base.graph.visitor.DirectedBreadthFirstTraverseAlgorithm; +import pcgen.cdom.base.PrereqObject; +import pcgen.cdom.content.EquipmentSet; +import pcgen.cdom.enumeration.AssociationKey; +import pcgen.cdom.graph.PCGenGraph; +import pcgen.cdom.graph.PCGraphEdge; +import pcgen.core.Equipment; + +public class EquipmentSetFacade +{ + + private final Class<Equipment> EQUIPMENT_CLASS = Equipment.class; + + private final PCGenGraph graph; + + private final EquipmentSet set; + + public EquipmentSetFacade(PCGenGraph pcgg, EquipmentSet activeSet) + { + if (pcgg == null) + { + throw new IllegalArgumentException("Graph cannot be null"); + } + if (activeSet == null) + { + throw new IllegalArgumentException( + "Active EquipmentSet cannot be null"); + } + graph = pcgg; + set = activeSet; + } + + public Collection<Equipment> getEquipment() + { + DirectedBreadthFirstTraverseAlgorithm<PrereqObject, PCGraphEdge> trav = + new DirectedBreadthFirstTraverseAlgorithm<PrereqObject, PCGraphEdge>( + graph); + trav.traverseFromNode(set); + List<Equipment> list = new ArrayList<Equipment>(); + for (PrereqObject po : trav.getVisitedNodes()) + { + if (EQUIPMENT_CLASS.isInstance(po)) + { + list.add(EQUIPMENT_CLASS.cast(po)); + } + } + return list; + } + + public Collection<Equipment> getEquipment(final int location) + { + DirectedBreadthFirstTraverseAlgorithm<PrereqObject, PCGraphEdge> trav = + new DirectedBreadthFirstTraverseAlgorithm<PrereqObject, PCGraphEdge>( + graph) + { + + @Override + protected boolean canTraverseEdge(PCGraphEdge edge, + PrereqObject gn, int type) + { + if (super.canTraverseEdge(edge, gn, type)) + { + Integer loc = + edge + .getAssociation(AssociationKey.EQUIPMENT_LOCATION); + if (loc != null) + { + return loc.intValue() == location; + } + } + return false; + } + + }; + trav.traverseFromNode(set); + List<Equipment> list = new ArrayList<Equipment>(); + for (PrereqObject po : trav.getVisitedNodes()) + { + if (EQUIPMENT_CLASS.isInstance(po)) + { + list.add(EQUIPMENT_CLASS.cast(po)); + } + } + return list; + } +} Modified: branches/cdom/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- branches/cdom/code/src/java/pcgen/core/PlayerCharacter.java 2007-05-28 08:19:48 UTC (rev 3067) +++ branches/cdom/code/src/java/pcgen/core/PlayerCharacter.java 2007-05-28 15:58:44 UTC (rev 3068) @@ -57,13 +57,14 @@ import pcgen.cdom.base.CDOMList; import pcgen.cdom.base.CDOMObject; import pcgen.cdom.base.PrereqObject; +import pcgen.cdom.content.EquipmentSet; import pcgen.cdom.enumeration.AssociationKey; import pcgen.cdom.enumeration.Gender; import pcgen.cdom.enumeration.IntegerKey; import pcgen.cdom.enumeration.ObjectKey; import pcgen.cdom.graph.PCGenGraph; import pcgen.cdom.graph.PCGraphEdge; -import pcgen.cdom.helper.EquipmentSet; +import pcgen.cdom.helper.EquipmentSetFacade; import pcgen.core.bonus.Bonus; import pcgen.core.bonus.BonusObj; import pcgen.core.character.CharacterSpell; @@ -17665,10 +17666,20 @@ return null; } - public EquipmentSet getEquipped() + public EquipmentSetFacade getEquipped() { - // TODO Auto-generated method stub - return null; + List<EquipmentSet> list = activeGraph.getGrantedNodeList(EquipmentSet.class); + int size = list.size(); + if (size == 0) + { + return null; + } + else if (size == 1) + { + return new EquipmentSetFacade(activeGraph, list.get(0)); + } + throw new IllegalStateException( + "Character can only have one Granted Equipment Set"); } public int getTotalWeight(PrereqObject pro) @@ -17677,10 +17688,9 @@ { return -1; } - PCGenGraph graph = getActiveGraph(); DirectedNodeWeightCalculation<PrereqObject, PCGraphEdge> calc = new DirectedNodeWeightCalculation<PrereqObject, PCGraphEdge>( - graph) + activeGraph) { @Override protected int getEdgeWeight(int weight, PCGraphEdge edge) Modified: branches/cdom/code/src/java/pcgen/core/prereq/PreEquippedTester.java =================================================================== --- branches/cdom/code/src/java/pcgen/core/prereq/PreEquippedTester.java 2007-05-28 08:19:48 UTC (rev 3067) +++ branches/cdom/code/src/java/pcgen/core/prereq/PreEquippedTester.java 2007-05-28 15:58:44 UTC (rev 3068) @@ -27,6 +27,10 @@ package pcgen.core.prereq; import java.util.StringTokenizer; + +import pcgen.cdom.enumeration.ListKey; +import pcgen.cdom.enumeration.Type; +import pcgen.cdom.helper.EquipmentSetFacade; import pcgen.core.Equipment; import pcgen.core.PlayerCharacter; import pcgen.core.character.WieldCategory; @@ -35,19 +39,25 @@ /** * @author wardc */ -public abstract class PreEquippedTester extends AbstractPrerequisiteTest { +public abstract class PreEquippedTester extends AbstractPrerequisiteTest +{ /** * Process the tokens and return the number that is not passed. - * + * * @param prereq - * @param character The pc to use. - * @param equippedType The equipped type to look for (e.g. Equipment.EQUIPPED_TWO_HANDS) - * + * @param character + * The pc to use. + * @param equippedType + * The equipped type to look for (e.g. + * Equipment.EQUIPPED_TWO_HANDS) + * * @return the number that did not pass * @throws PrerequisiteException */ - public int passesPreEquipHandleTokens(final Prerequisite prereq, final PlayerCharacter character, final int equippedType) throws PrerequisiteException + public int passesPreEquipHandleTokens(final Prerequisite prereq, + final PlayerCharacter character, final int equippedType) + throws PrerequisiteException { // TODO refactor this code with PreEquipTester boolean isEquipped = false; @@ -55,28 +65,33 @@ if (!character.getEquipmentList().isEmpty()) { final String aString = prereq.getKey(); - for ( Equipment eq : character.getEquipmentList() ) + for (Equipment eq : character.getEquipmentList()) { // // Only check equipment of the type we are interested in // - if (!eq.isEquipped() || (eq.getLocation() != equippedType)) + if (!eq.isEquipped() || (eq.getLocation() != equippedType)) { continue; } - if (aString.startsWith("WIELDCATEGORY=") || aString.startsWith("WIELDCATEGORY.")) + if (aString.startsWith("WIELDCATEGORY=") + || aString.startsWith("WIELDCATEGORY.")) { - final WieldCategory wCat = eq.getEffectiveWieldCategory(character); - if ((wCat != null) && wCat.getName().equalsIgnoreCase(aString.substring(14))) + final WieldCategory wCat = + eq.getEffectiveWieldCategory(character); + if ((wCat != null) + && wCat.getName().equalsIgnoreCase( + aString.substring(14))) { isEquipped = true; break; } } - else if (aString.startsWith("TYPE=") || aString.startsWith("TYPE.")) //$NON-NLS-1$ //$NON-NLS-2$ + else if (aString.startsWith("TYPE=") || aString.startsWith("TYPE.")) //$NON-NLS-1$ //$NON-NLS-2$ { - StringTokenizer tok = new StringTokenizer(aString.substring(5), "."); + StringTokenizer tok = + new StringTokenizer(aString.substring(5), "."); boolean match = false; if (tok.hasMoreTokens()) { @@ -85,7 +100,7 @@ // // Must match all listed types in order to qualify // - while(tok.hasMoreTokens()) + while (tok.hasMoreTokens()) { final String type = tok.nextToken(); if (!eq.isType(type)) @@ -100,15 +115,17 @@ break; } } - else //not a TYPE string + else + // not a TYPE string { final String eqName = eq.getName(); if (aString.indexOf('%') >= 0) { - //handle wildcards (always assume they + // handle wildcards (always assume they // end the line) final int percentPos = aString.indexOf('%'); - if (eqName.regionMatches(true, 0, aString, 0, percentPos)) + if (eqName.regionMatches(true, 0, aString, 0, + percentPos)) { isEquipped = true; break; @@ -116,7 +133,7 @@ } else if (eqName.equalsIgnoreCase(aString)) { - //just a straight String compare + // just a straight String compare isEquipped = true; break; } @@ -127,7 +144,8 @@ final PrerequisiteOperator operator = prereq.getOperator(); int runningTotal; - if (operator.equals(PrerequisiteOperator.EQ) || operator.equals(PrerequisiteOperator.GTEQ)) + if (operator.equals(PrerequisiteOperator.EQ) + || operator.equals(PrerequisiteOperator.GTEQ)) { runningTotal = isEquipped ? 1 : 0; } @@ -138,11 +156,115 @@ else { throw new PrerequisiteException(PropertyFactory.getFormattedString( - "PreEquipped.error.invalid_comparison", prereq.toString())); //$NON-NLS-1$ + "PreEquipped.error.invalid_comparison", prereq.toString())); //$NON-NLS-1$ } return countedTotal(prereq, runningTotal); } + /** + * Process the tokens and return the number that is not passed. + * + * @param prereq + * @param character + * The pc to use. + * @param equippedType + * The equipped type to look for (e.g. + * Equipment.EQUIPPED_TWO_HANDS) + * + * @return the number that did not pass + * @throws PrerequisiteException + */ + public int passesCDOMPreEquipHandleTokens(final Prerequisite prereq, + final PlayerCharacter character, final int equippedType) + throws PrerequisiteException + { + EquipmentSetFacade set = character.getEquipped(); + boolean isEquipped = false; + + if (set != null) + { + String aString = prereq.getKey(); + + for (Equipment eq : set.getEquipment(equippedType)) + { + if (aString.startsWith("WIELDCATEGORY=") + || aString.startsWith("WIELDCATEGORY.")) + { + WieldCategory wCat = eq.getEffectiveWieldCategory(character); + if ((wCat != null) + && wCat.getName().equalsIgnoreCase(aString.substring(14))) + { + isEquipped = true; + break; + } + } + else if (aString.startsWith("TYPE=") || aString.startsWith("TYPE.")) //$NON-NLS-1$ //$NON-NLS-2$ + { + StringTokenizer tok = + new StringTokenizer(aString.substring(5), "."); + boolean match = true; + // + // Must match all listed types in order to qualify + // + while (tok.hasMoreTokens()) + { + Type requiredType = Type.getConstant(tok.nextToken()); + if (!eq.containsInList(ListKey.TYPE, requiredType)) + { + match = false; + break; + } + } + if (match) + { + isEquipped = true; + break; + } + } + else + // not a TYPE string + { + String eqName = eq.getKeyName(); + int percentPos = aString.indexOf('%'); + if (percentPos >= 0) + { + // handle wildcards (always assume they + // end the line) + if (eqName.regionMatches(true, 0, aString, 0, percentPos)) + { + isEquipped = true; + break; + } + } + else if (eqName.equalsIgnoreCase(aString)) + { + // just a straight String compare + isEquipped = true; + break; + } + } + } + } + PrerequisiteOperator operator = prereq.getOperator(); + + int runningTotal; + if (operator.equals(PrerequisiteOperator.EQ) + || operator.equals(PrerequisiteOperator.GTEQ)) + { + runningTotal = isEquipped ? 1 : 0; + } + else if (operator.equals(PrerequisiteOperator.NEQ)) + { + runningTotal = isEquipped ? 0 : 1; + } + else + { + throw new PrerequisiteException(PropertyFactory.getFormattedString( + "PreEquipped.error.invalid_comparison", prereq.toString())); //$NON-NLS-1$ + } + + return countedTotal(prereq, runningTotal); + } } Modified: branches/cdom/code/src/java/plugin/pretokens/test/PreEquipBothTester.java =================================================================== --- branches/cdom/code/src/java/plugin/pretokens/test/PreEquipBothTester.java 2007-05-28 08:19:48 UTC (rev 3067) +++ branches/cdom/code/src/java/plugin/pretokens/test/PreEquipBothTester.java 2007-05-28 15:58:44 UTC (rev 3068) @@ -60,4 +60,11 @@ return "EQUIPBOTH"; //$NON-NLS-1$ } + public int passesCDOM(Prerequisite prereq, PlayerCharacter character) + throws PrerequisiteException + { + return passesCDOMPreEquipHandleTokens(prereq, character, + Equipment.EQUIPPED_BOTH); + } + } Modified: branches/cdom/code/src/java/plugin/pretokens/test/PreEquipPrimaryTester.java =================================================================== --- branches/cdom/code/src/java/plugin/pretokens/test/PreEquipPrimaryTester.java 2007-05-28 08:19:48 UTC (rev 3067) +++ branches/cdom/code/src/java/plugin/pretokens/test/PreEquipPrimaryTester.java 2007-05-28 15:58:44 UTC (rev 3068) @@ -60,4 +60,11 @@ return "EQUIPPRIMARY"; //$NON-NLS-1$ } + public int passesCDOM(Prerequisite prereq, PlayerCharacter character) + throws PrerequisiteException + { + return passesCDOMPreEquipHandleTokens(prereq, character, + Equipment.EQUIPPED_PRIMARY); + } + } Modified: branches/cdom/code/src/java/plugin/pretokens/test/PreEquipSecondaryTester.java =================================================================== --- branches/cdom/code/src/java/plugin/pretokens/test/PreEquipSecondaryTester.java 2007-05-28 08:19:48 UTC (rev 3067) +++ branches/cdom/code/src/java/plugin/pretokens/test/PreEquipSecondaryTester.java 2007-05-28 15:58:44 UTC (rev 3068) @@ -60,4 +60,10 @@ return "EQUIPSECONDARY"; //$NON-NLS-1$ } + public int passesCDOM(Prerequisite prereq, PlayerCharacter character) + throws PrerequisiteException + { + return passesCDOMPreEquipHandleTokens(prereq, character, + Equipment.EQUIPPED_SECONDARY); + } } Modified: branches/cdom/code/src/java/plugin/pretokens/test/PreEquipTester.java =================================================================== --- branches/cdom/code/src/java/plugin/pretokens/test/PreEquipTester.java 2007-05-28 08:19:48 UTC (rev 3067) +++ branches/cdom/code/src/java/plugin/pretokens/test/PreEquipTester.java 2007-05-28 15:58:44 UTC (rev 3068) @@ -28,6 +28,9 @@ import java.util.StringTokenizer; +import pcgen.cdom.enumeration.ListKey; +import pcgen.cdom.enumeration.Type; +import pcgen.cdom.helper.EquipmentSetFacade; import pcgen.core.Equipment; import pcgen.core.PlayerCharacter; import pcgen.core.character.WieldCategory; @@ -39,7 +42,7 @@ /** * @author wardc - * + * */ public class PreEquipTester extends AbstractPrerequisiteTest implements PrerequisiteTest @@ -47,7 +50,7 @@ /* * (non-Javadoc) - * + * * @see pcgen.core.prereq.PrerequisiteTest#passes(pcgen.core.PlayerCharacter) */ @Override @@ -120,13 +123,13 @@ } } else - //not a TYPE string + // not a TYPE string { final String eqName = eq.getName().toUpperCase(); if (targetEquip.indexOf('%') >= 0) { - //handle wildcards (always assume + // handle wildcards (always assume // they end the line) final int percentPos = targetEquip.indexOf('%'); final String substring = @@ -140,7 +143,7 @@ } else if (eqName.equalsIgnoreCase(targetEquip)) { - //just a straight String compare + // just a straight String compare ++runningTotal; break; } @@ -154,11 +157,97 @@ /* * (non-Javadoc) - * + * * @see pcgen.core.prereq.PrerequisiteTest#kindsHandled() */ public String kindHandled() { return "EQUIP"; //$NON-NLS-1$ } + + public int passesCDOM(Prerequisite prereq, PlayerCharacter character) + throws PrerequisiteException + { + int runningTotal = 0; + + final int number; + try + { + number = Integer.parseInt(prereq.getOperand()); + } + catch (NumberFormatException exceptn) + { + throw new PrerequisiteException(PropertyFactory.getFormattedString( + "PreFeat.error", prereq.toString())); //$NON-NLS-1$ + } + + EquipmentSetFacade set = character.getEquipped(); + if (set != null) + { + String targetEquip = prereq.getKey(); + + for (Equipment eq : set.getEquipment()) + { + if (targetEquip.startsWith("WIELDCATEGORY=") + || targetEquip.startsWith("WIELDCATEGORY.")) + { + WieldCategory wCat = eq.getEffectiveWieldCategory(character); + if ((wCat != null) + && wCat.getName().equalsIgnoreCase( + targetEquip.substring(14))) + { + runningTotal++; + break; + } + } + else if (targetEquip.startsWith("TYPE=") || targetEquip.startsWith("TYPE.")) //$NON-NLS-1$ //$NON-NLS-2$ + { + StringTokenizer tok = + new StringTokenizer(targetEquip.substring(5), "."); + boolean match = true; + // + // Must match all listed types in order to qualify + // + while (tok.hasMoreTokens()) + { + Type requiredType = Type.getConstant(tok.nextToken()); + if (!eq.containsInList(ListKey.TYPE, requiredType)) + { + match = false; + break; + } + } + if (match) + { + runningTotal++; + break; + } + } + else + // not a TYPE string + { + String eqName = eq.getKeyName(); + int percentPos = targetEquip.indexOf('%'); + if (percentPos >= 0) + { + // handle wildcards (always assume they + // end the line) + if (eqName.regionMatches(true, 0, targetEquip, 0, percentPos)) + { + runningTotal++; + break; + } + } + else if (eqName.equalsIgnoreCase(targetEquip)) + { + // just a straight String compare + runningTotal++; + break; + } + } + } + } + runningTotal = prereq.getOperator().compare(runningTotal, number); + return countedTotal(prereq, runningTotal); + } } Modified: branches/cdom/code/src/java/plugin/pretokens/test/PreEquipTwoWeaponTester.java =================================================================== --- branches/cdom/code/src/java/plugin/pretokens/test/PreEquipTwoWeaponTester.java 2007-05-28 08:19:48 UTC (rev 3067) +++ branches/cdom/code/src/java/plugin/pretokens/test/PreEquipTwoWeaponTester.java 2007-05-28 15:58:44 UTC (rev 3068) @@ -35,13 +35,15 @@ /** * @author wardc - * + * */ public class PreEquipTwoWeaponTester extends PreEquippedTester implements PrerequisiteTest { - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see pcgen.core.prereq.PrerequisiteTest#passes(pcgen.core.PlayerCharacter) */ @Override @@ -52,11 +54,20 @@ Equipment.EQUIPPED_TWO_HANDS); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see pcgen.core.prereq.PrerequisiteTest#kindsHandled() */ public String kindHandled() { return "EQUIPTWOWEAPON"; //$NON-NLS-1$ } + + public int passesCDOM(Prerequisite prereq, PlayerCharacter character) + throws PrerequisiteException + { + return passesCDOMPreEquipHandleTokens(prereq, character, + Equipment.EQUIPPED_TWO_HANDS); + } } Modified: branches/cdom/code/src/test/pcgen/core/prereq/PreClassTest.java =================================================================== --- branches/cdom/code/src/test/pcgen/core/prereq/PreClassTest.java 2007-05-28 08:19:48 UTC (rev 3067) +++ branches/cdom/code/src/test/pcgen/core/prereq/PreClassTest.java 2007-05-28 15:58:44 UTC (rev 3068) @@ -146,44 +146,6 @@ } /** - * Test to ensure that a character will fail a test - * if it does not have the correct number of levels - * in the class. - * @throws Exception - */ - public void testCharWithMultipleSpellClasses() throws Exception - { - final PCClass pcClass = new PCClass(); - pcClass.setName("MyClass"); - pcClass.setAbbrev("My"); - pcClass.setSpellBaseStat("CHA"); - pcClass.setSpellType("ARCANE"); - pcClass.setCast(1, Arrays.asList("5,4".split(","))); - - final PCClass pcClass2 = new PCClass(); - pcClass2.setName("Other Class"); - pcClass2.setAbbrev("OC"); - pcClass.setSpellBaseStat("INT"); - pcClass2.setSpellType("ARCANE"); - pcClass2.setCast(1, Arrays.asList("5,4".split(","))); - - final PlayerCharacter character = getCharacter(); - character.incrementClassLevel(1, pcClass); - character.incrementClassLevel(2, pcClass2); - - final Prerequisite prereq = new Prerequisite(); - prereq.setKind("class"); - prereq.setKey("SPELLCASTER.ARCANE"); - prereq.setOperand("3"); - prereq.setTotalValues(true); - prereq.setOperator(PrerequisiteOperator.GTEQ); - - final PreClassTester test = new PreClassTester(); - final int passes = test.passes(prereq, character); - assertEquals(3, passes); - } - - /** * Test to ensure that a character without a named class cannot be found * @throws Exception */ Modified: branches/cdom/code/src/test/pcgen/core/prereq/PreSkillTest.java =================================================================== --- branches/cdom/code/src/test/pcgen/core/prereq/PreSkillTest.java 2007-05-28 08:19:48 UTC (rev 3067) +++ branches/cdom/code/src/test/pcgen/core/prereq/PreSkillTest.java 2007-05-28 15:58:44 UTC (rev 3068) @@ -269,11 +269,10 @@ prereq.setOperand("10"); final Prerequisite subreq = new Prerequisite(); - subreq.setKind("skill"); + subreq.setKind("skill.tot"); subreq.setKey("TYPE.DEX"); subreq.setOperator(PrerequisiteOperator.GTEQ); subreq.setOperand("1"); - subreq.setTotalValues(true); prereq.addPrerequisite(subreq); @@ -288,11 +287,10 @@ public void testType() throws Exception { final Prerequisite subreq = new Prerequisite(); - subreq.setKind("skill"); + subreq.setKind("skill.tot"); 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); Modified: branches/cdom/code/src/utest/plugin/pretokens/test/AbstractCDOMObjectTestCase.java =================================================================== --- branches/cdom/code/src/utest/plugin/pretokens/test/AbstractCDOMObjectTestCase.java 2007-05-28 08:19:48 UTC (rev 3067) +++ branches/cdom/code/src/utest/plugin/pretokens/test/AbstractCDOMObjectTestCase.java 2007-05-28 15:58:44 UTC (rev 3068) @@ -412,4 +412,6 @@ assertEquals(0, getTest().passesCDOM(prereq, pc)); } } + + // TODO Complex Types (more than one type) } Added: branches/cdom/code/src/utest/plugin/pretokens/test/AbstractCDOMPreEquipTestCase.java =================================================================== --- branches/cdom/code/src/utest/plugin/pretokens/test/AbstractCDOMPreEquipTestCase.java (rev 0) +++ branches/cdom/code/src/utest/plugin/pretokens/test/AbstractCDOMPreEquipTestCase.java 2007-05-28 15:58:44 UTC (rev 3068) @@ -0,0 +1,367 @@ +package plugin.pretokens.test; + +import org.junit.Test; + +import pcgen.cdom.content.EquipmentSet; +import pcgen.cdom.enumeration.AssociationKey; +import pcgen.cdom.enumeration.ListKey; +import pcgen.cdom.enumeration.Type; +import pcgen.cdom.graph.PCGenGraph; +import pcgen.cdom.graph.PCGraphGrantsEdge; +import pcgen.core.Equipment; +import pcgen.core.PCTemplate; +import pcgen.core.PObject; +import pcgen.core.prereq.Prerequisite; +import pcgen.core.prereq.PrerequisiteException; +import pcgen.core.prereq.PrerequisiteOperator; +import pcgen.core.prereq.PrerequisiteTest; + +public abstract class AbstractCDOMPreEquipTestCase extends + AbstractCDOMPreTestTestCase<Equipment> +{ + + @Override + public Class<Equipment> getCDOMClass() + { + return Equipment.class; + } + + @Override + public Class<? extends PObject> getFalseClass() + { + return PCTemplate.class; + } + + public abstract String getKind(); + + public abstract PrerequisiteTest getTest(); + + public abstract int getProperLocation(); + + public abstract int getFalseLocation(); + + private EquipmentSet activeSet = new EquipmentSet(); + + public Equipment equip(String s, int loc) + { + Equipment e = getObject(s); + equip(e, loc); + return e; + } + + public void equip(Equipment e, int loc) + { + PCGenGraph graph = pc.getActiveGraph(); + graph.addNode(e); + PCGraphGrantsEdge edge = + new PCGraphGrantsEdge(activeSet, e, "TestCase"); + edge.setAssociation(AssociationKey.EQUIPMENT_LOCATION, Integer + .valueOf(loc)); + graph.addEdge(edge); + } + + public void unequip(Equipment e) + { + pc.getActiveGraph().removeNode(e); + } + + public boolean isTypeLegal() + { + return true; + } + + public boolean isWildcardLegal() + { + return true; + } + + // public Prerequisite getAnyPrereq() + // { + // Prerequisite p; + // p = new Prerequisite(); + // p.setKind(getKind()); + // p.setKey("ANY"); + // p.setOperand("2"); + // p.setOperator(PrerequisiteOperator.GTEQ); + // return p; + // } + + public Prerequisite getSimplePrereq() + { + Prerequisite p; + p = new Prerequisite(); + p.setKind(getKind()); + p.setKey("Winged Mage"); + p.setOperand("1"); + p.setOperator(PrerequisiteOperator.GTEQ); + return p; + } + + public Prerequisite getWildcard() + { + Prerequisite p; + p = new Prerequisite(); + p.setKind(getKind()); + p.setKey("Wild%"); + p.setOperand("1"); + p.setOperator(PrerequisiteOperator.GTEQ); + return p; + } + + public Prerequisite getCountTemplates() + { + Prerequisite p; + p = new Prerequisite(); + p.setKind(getKind()); + p.setKey("%"); + p.setOperand("1"); + p.setOperator(PrerequisiteOperator.GTEQ); + return p; + } + + public Prerequisite getGenericPrereq() + { + Prerequisite p; + p = new Prerequisite(); + p.setKind(getKind()); + p.setKey("Crossbow"); + p.setOperand("1"); + p.setOperator(PrerequisiteOperator.GTEQ); + return p; + } + + public Prerequisite getParenPrereq() + { + Prerequisite p; + p = new Prerequisite(); + p.setKind(getKind()); + p.setKey("Crossbow (Heavy)"); + p.setOperand("1"); + p.setOperator(PrerequisiteOperator.GTEQ); + return p; + } + + public Prerequisite getTypeDotPrereq() + { + Prerequisite p; + p = new Prerequisite(); + p.setKind(getKind()); + p.setKey("TYPE.Exotic"); + p.setOperand("1"); + p.setOperator(PrerequisiteOperator.GTEQ); + return p; + } + + public Prerequisite getTypeEqualsPrereq() + { + Prerequisite p; + p = new Prerequisite(); + p.setKind(getKind()); + p.setKey("TYPE=Martial"); + p.setOperand("1"); + p.setOperator(PrerequisiteOperator.GTEQ); + return p; + } + + @Test + public void testSimple() throws PrerequisiteException + { + Prerequisite prereq = getSimplePrereq(); + // PC Should start without + assertEquals(0, getTest().passesCDOM(prereq, pc)); + Equipment wild = equip("Wild Mage", getProperLocation()); + assertEquals(0, getTest().passesCDOM(prereq, pc)); + unequip(wild); + equip("Winged Mage", getProperLocation()); + assertEquals(1, getTest().passesCDOM(prereq, pc)); + assertEquals(0, getTest().passesCDOM(getParenPrereq(), pc)); + } + + @Test + public void testFalseObject() throws PrerequisiteException + { + Prerequisite prereq = getSimplePrereq(); + // PC Should start without + assertEquals(0, getTest().passesCDOM(prereq, pc)); + equip("Winged Mage", getFalseLocation()); + // Wrong loc + assertEquals(0, getTest().passesCDOM(prereq, pc)); + equip("Wild Mage", getProperLocation()); + // Wrong item + assertEquals(0, getTest().passesCDOM(prereq, pc)); + } + + @Test + public void testParen() throws PrerequisiteException + { + Prerequisite prereq = getParenPrereq(); + // PC Should start without + assertEquals(0, getTest().passesCDOM(prereq, pc)); + equip("Crossbow (Heavy)", getProperLocation()); + // Has Crossbow (Heavy) + assertEquals(1, getTest().passesCDOM(prereq, pc)); + // But not Katana + assertEquals(0, getTest().passesCDOM(getSimplePrereq(), pc)); + // And not Generic Crossbow + assertEquals(0, getTest().passesCDOM(getGenericPrereq(), pc)); + } + + @Test + public void testWildcard() throws PrerequisiteException + { + if (isWildcardLegal()) + { + Prerequisite prereq = getWildcard(); + // PC Should start without + assertEquals(0, getTest().passesCDOM(prereq, pc)); + Equipment winged = equip("Winged Creature", getProperLocation()); + // Not qualifying + assertEquals(0, getTest().passesCDOM(prereq, pc)); + unequip(winged); + equip("Wild Mage", getProperLocation()); + assertEquals(1, getTest().passesCDOM(prereq, pc)); + } + } + + @Test + public void testFalseWildcard() throws PrerequisiteException + { + if (isWildcardLegal()) + { + Prerequisite prereq = getWildcard(); + // PC Should start without + assertEquals(0, getTest().passesCDOM(prereq, pc)); + equip("Winged Creature", getProperLocation()); + // Not qualifying + assertEquals(0, getTest().passesCDOM(prereq, pc)); + equip("Wild Mage", getFalseLocation()); + // Not enough + assertEquals(0, getTest().passesCDOM(prereq, pc)); + } + } + + @Test + public void testCount() throws PrerequisiteException + { + if (isWildcardLegal()) + { + Prerequisite prereq = getCountTemplates(); + // PC Should start without + assertEquals(0, getTest().passesCDOM(prereq, pc)); + equip("Winged Creature", getFalseLocation()); + // Still at zero qualifying + assertEquals(0, getTest().passesCDOM(prereq, pc)); + equip("Wild Mage", getProperLocation()); + // enough + assertEquals(1, getTest().passesCDOM(prereq, pc)); + } + } + + @Test + public void testTypeDot() throws PrerequisiteException + { + if (isTypeLegal()) + { + Prerequisite prereq = getTypeDotPrereq(); + // PC Should start without + assertEquals(0, getTest().passesCDOM(prereq, pc)); + PObject katana = equip("Katana", getProperLocation()); + // Not yet the proper type + assertEquals(0, getTest().passesCDOM(prereq, pc)); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Exotic")); + assertEquals(1, getTest().passesCDOM(prereq, pc)); + katana.removeListFor(ListKey.TYPE); + // Isn't the proper type anymore + assertEquals(0, getTest().passesCDOM(prereq, pc)); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Martial")); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Exotic")); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Cool")); + // Test having multiple types + assertEquals(1, getTest().passesCDOM(prereq, pc)); + } + } + + @Test + public void testFalseTypeDot() throws PrerequisiteException + { + if (isTypeLegal()) + { + + Prerequisite prereq = getTypeDotPrereq(); + // PC Should start without + assertEquals(0, getTest().passesCDOM(prereq, pc)); + PObject katana = equip("Katana", getFalseLocation()); + // Not yet the proper type + assertEquals(0, getTest().passesCDOM(prereq, pc)); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Exotic")); + // Would be 1 if true + assertEquals(0, getTest().passesCDOM(prereq, pc)); + katana.removeListFor(ListKey.TYPE); + // Isn't the proper type anymore + assertEquals(0, getTest().passesCDOM(prereq, pc)); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Martial")); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Exotic")); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Cool")); + // Would be 1 if true + assertEquals(0, getTest().passesCDOM(prereq, pc)); + } + } + + @Test + public void testTypeEqual() throws PrerequisiteException + { + if (isTypeLegal()) + { + + Prerequisite prereq = getTypeEqualsPrereq(); + // PC Should start without the WeaponProf + assertEquals(0, getTest().passesCDOM(prereq, pc)); + PObject katana = equip("Katana", getProperLocation()); + // Not yet the proper type + assertEquals(0, getTest().passesCDOM(prereq, pc)); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Martial")); + assertEquals(1, getTest().passesCDOM(prereq, pc)); + katana.removeListFor(ListKey.TYPE); + // Isn't the proper type anymore + assertEquals(0, getTest().passesCDOM(prereq, pc)); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Exotic")); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Martial")); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Cool")); + // Test with WP having multiple types + assertEquals(1, getTest().passesCDOM(prereq, pc)); + } + } + + @Test + public void testFalseTypeEqual() throws PrerequisiteException + { + if (isTypeLegal()) + { + Prerequisite prereq = getTypeEqualsPrereq(); + // PC Should start without the WeaponProf + assertEquals(0, getTest().passesCDOM(prereq, pc)); + PObject katana = equip("Katana", getFalseLocation()); + // Not yet the proper type + assertEquals(0, getTest().passesCDOM(prereq, pc)); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Martial")); + // Would be 1 if true + assertEquals(0, getTest().passesCDOM(prereq, pc)); + katana.removeListFor(ListKey.TYPE); + // Isn't the proper type anymore + assertEquals(0, getTest().passesCDOM(prereq, pc)); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Exotic")); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Martial")); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Cool")); + // Would be 1 if true + assertEquals(0, getTest().passesCDOM(prereq, pc)); + } + } + + // TODO Test where an EqMod has modified a TYPE of a piece of Equipment + + // TODO Need to consider inverted? !PRE? + + // TODO Complex Types (more than one type) + + // TODO Test WIELDCATEGORY +} Added: branches/cdom/code/src/utest/plugin/pretokens/test/PreEquipBothTesterTest.java =================================================================== --- branches/cdom/code/src/utest/plugin/pretokens/test/PreEquipBothTesterTest.java (rev 0) +++ branches/cdom/code/src/utest/plugin/pretokens/test/PreEquipBothTesterTest.java 2007-05-28 15:58:44 UTC (rev 3068) @@ -0,0 +1,35 @@ +package plugin.pretokens.test; + +import pcgen.core.Equipment; +import pcgen.core.prereq.PrerequisiteTest; + +public class PreEquipBothTesterTest extends AbstractCDOMPreEquipTestCase +{ + + PreEquipBothTester tester = new PreEquipBothTester(); + + @Override + public int getFalseLocation() + { + return Equipment.EQUIPPED_SECONDARY; + } + + @Override + public String getKind() + { + return "EQUIPBOTH"; + } + + @Override + public int getProperLocation() + { + return Equipment.EQUIPPED_BOTH; + } + + @Override + public PrerequisiteTest getTest() + { + return tester; + } + +} Added: branches/cdom/code/src/utest/plugin/pretokens/test/PreEquipPrimaryTesterTest.java =================================================================== --- branches/cdom/code/src/utest/plugin/pretokens/test/PreEquipPrimaryTesterTest.java (rev 0) +++ branches/cdom/code/src/utest/plugin/pretokens/test/PreEquipPrimaryTesterTest.java 2007-05-28 15:58:44 UTC (rev 3068) @@ -0,0 +1,35 @@ +package plugin.pretokens.test; + +import pcgen.core.Equipment; +import pcgen.core.prereq.PrerequisiteTest; + +public class PreEquipPrimaryTesterTest extends AbstractCDOMPreEquipTestCase +{ + + PreEquipPrimaryTester tester = new PreEquipPrimaryTester(); + + @Override + public int getFalseLocation() + { + return Equipment.EQUIPPED_SECONDARY; + } + + @Override + public String getKind() + { + return "EQUIPPRIMARY"; + } + + @Override + public int getProperLocation() + { + return Equipment.EQUIPPED_PRIMARY; + } + + @Override + public PrerequisiteTest getTest() + { + return tester; + } + +} Added: branches/cdom/code/src/utest/plugin/pretokens/test/PreEquipSecondaryTesterTest.java =================================================================== --- branches/cdom/code/src/utest/plugin/pretokens/test/PreEquipSecondaryTesterTest.java (rev 0) +++ branches/cdom/code/src/utest/plugin/pretokens/test/PreEquipSecondaryTesterTest.java 2007-05-28 15:58:44 UTC (rev 3068) @@ -0,0 +1,35 @@ +package plugin.pretokens.test; + +import pcgen.core.Equipment; +import pcgen.core.prereq.PrerequisiteTest; + +public class PreEquipSecondaryTesterTest extends AbstractCDOMPreEquipTestCase +{ + + PreEquipSecondaryTester tester = new PreEquipSecondaryTester(); + + @Override + public int getFalseLocation() + { + return Equipment.EQUIPPED_PRIMARY; + } + + @Override + public String getKind() + { + return "EQUIPSECONDARY"; + } + + @Override + public int getProperLocation() + { + return Equipment.EQUIPPED_SECONDARY; + } + + @Override + public PrerequisiteTest getTest() + { + return tester; + } + +} Added: branches/cdom/code/src/utest/plugin/pretokens/test/PreEquipTesterTest.java =================================================================== --- branches/cdom/code/src/utest/plugin/pretokens/test/PreEquipTesterTest.java (rev 0) +++ branches/cdom/code/src/utest/plugin/pretokens/test/PreEquipTesterTest.java 2007-05-28 15:58:44 UTC (rev 3068) @@ -0,0 +1,290 @@ +package plugin.pretokens.test; + +import org.junit.Test; + +import pcgen.cdom.content.EquipmentSet; +import pcgen.cdom.enumeration.AssociationKey; +import pcgen.cdom.enumeration.ListKey; +import pcgen.cdom.enumeration.Type; +import pcgen.cdom.graph.PCGenGraph; +import pcgen.cdom.graph.PCGraphGrantsEdge; +import pcgen.core.Equipment; +import pcgen.core.PCTemplate; +import pcgen.core.PObject; +import pcgen.core.prereq.Prerequisite; +import pcgen.core.prereq.PrerequisiteException; +import pcgen.core.prereq.PrerequisiteOperator; +import pcgen.core.prereq.PrerequisiteTest; + +public class PreEquipTesterTest extends AbstractCDOMPreTestTestCase<Equipment> +{ + + PreEquipTester tester = new PreEquipTester(); + + @Override + public Class<Equipment> getCDOMClass() + { + return Equipment.class; + } + + @Override + public Class<? extends PObject> getFalseClass() + { + return PCTemplate.class; + } + + public String getKind() + { + return "PREEQUIP"; + } + + public PrerequisiteTest getTest() + { + return tester; + } + + public int getProperLocation() + { + return Equipment.EQUIPPED_PRIMARY; + } + + private EquipmentSet activeSet = new EquipmentSet(); + + public Equipment equip(String s, int loc) + { + Equipment e = getObject(s); + equip(e, loc); + return e; + } + + public void equip(Equipment e, int loc) + { + PCGenGraph graph = pc.getActiveGraph(); + graph.addNode(e); + PCGraphGrantsEdge edge = + new PCGraphGrantsEdge(activeSet, e, "TestCase"); + edge.setAssociation(AssociationKey.EQUIPMENT_LOCATION, Integer + .valueOf(loc)); + graph.addEdge(edge); + } + + public void unequip(Equipment e) + { + pc.getActiveGraph().removeNode(e); + } + + public boolean isTypeLegal() + { + return true; + } + + public boolean isWildcardLegal() + { + return true; + } + + // public Prerequisite getAnyPrereq() + // { + // Prerequisite p; + // p = new Prerequisite(); + // p.setKind(getKind()); + // p.setKey("ANY"); + // p.setOperand("2"); + // p.setOperator(PrerequisiteOperator.GTEQ); + // return p; + // } + + public Prerequisite getSimplePrereq() + { + Prerequisite p; + p = new Prerequisite(); + p.setKind(getKind()); + p.setKey("Winged Mage"); + p.setOperand("1"); + p.setOperator(PrerequisiteOperator.GTEQ); + return p; + } + + public Prerequisite getWildcard() + { + Prerequisite p; + p = new Prerequisite(); + p.setKind(getKind()); + p.setKey("Wild%"); + p.setOperand("1"); + p.setOperator(PrerequisiteOperator.GTEQ); + return p; + } + + public Prerequisite getCountTemplates() + { + Prerequisite p; + p = new Prerequisite(); + p.setKind(getKind()); + p.setKey("%"); + p.setOperand("1"); + p.setOperator(PrerequisiteOperator.GTEQ); + return p; + } + + public Prerequisite getGenericPrereq() + { + Prerequisite p; + p = new Prerequisite(); + p.setKind(getKind()); + p.setKey("Crossbow"); + p.setOperand("1"); + p.setOperator(PrerequisiteOperator.GTEQ); + return p; + } + + public Prerequisite getParenPrereq() + { + Prerequisite p; + p = new Prerequisite(); + p.setKind(getKind()); + p.setKey("Crossbow (Heavy)"); + p.setOperand("1"); + p.setOperator(PrerequisiteOperator.GTEQ); + return p; + } + + public Prerequisite getTypeDotPrereq() + { + Prerequisite p; + p = new Prerequisite(); + p.setKind(getKind()); + p.setKey("TYPE.Exotic"); + p.setOperand("1"); + p.setOperator(PrerequisiteOperator.GTEQ); + return p; + } + + public Prerequisite getTypeEqualsPrereq() + { + Prerequisite p; + p = new Prerequisite(); + p.setKind(getKind()); + p.setKey("TYPE=Martial"); + p.setOperand("1"); + p.setOperator(PrerequisiteOperator.GTEQ); + return p; + } + + @Test + public void testSimple() throws PrerequisiteException + { + Prerequisite prereq = getSimplePrereq(); + // PC Should start without + assertEquals(0, getTest().passesCDOM(prereq, pc)); + Equipment wild = equip("Wild Mage", getProperLocation()); + assertEquals(0, getTest().passesCDOM(prereq, pc)); + unequip(wild); + equip("Winged Mage", getProperLocation()); + assertEquals(1, getTest().passesCDOM(prereq, pc)); + assertEquals(0, getTest().passesCDOM(getParenPrereq(), pc)); + } + + @Test + public void testParen() throws PrerequisiteException + { + Prerequisite prereq = getParenPrereq(); + // PC Should start without + assertEquals(0, getTest().passesCDOM(prereq, pc)); + equip("Crossbow (Heavy)", getProperLocation()); + // Has Crossbow (Heavy) + assertEquals(1, getTest().passesCDOM(prereq, pc)); + // But not Katana + assertEquals(0, getTest().passesCDOM(getSimplePrereq(), pc)); + // And not Generic Crossbow + assertEquals(0, getTest().passesCDOM(getGenericPrereq(), pc)); + } + + @Test + public void testWildcard() throws PrerequisiteException + { + if (isWildcardLegal()) + { + Prerequisite prereq = getWildcard(); + // PC Should start without + assertEquals(0, getTest().passesCDOM(prereq, pc)); + Equipment winged = equip("Winged Creature", getProperLocation()); + // Not qualifying + assertEquals(0, getTest().passesCDOM(prereq, pc)); + unequip(winged); + equip("Wild Mage", getProperLocation()); + assertEquals(1, getTest().passesCDOM(prereq, pc)); + } + } + + @Test + public void testCount() throws PrerequisiteException + { + if (isWildcardLegal()) + { + Prerequisite prereq = getCountTemplates(); + // PC Should start without + assertEquals(0, getTest().passesCDOM(prereq, pc)); + equip("Wild Mage", getProperLocation()); + // enough + assertEquals(1, getTest().passesCDOM(prereq, pc)); + } + } + + @Test + public void testTypeDot() throws PrerequisiteException + { + if (isTypeLegal()) + { + Prerequisite prereq = getTypeDotPrereq(); + // PC Should start without + assertEquals(0, getTest().passesCDOM(prereq, pc)); + PObject katana = equip("Katana", getProperLocation()); + // Not yet the proper type + assertEquals(0, getTest().passesCDOM(prereq, pc)); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Exotic")); + assertEquals(1, getTest().passesCDOM(prereq, pc)); + katana.removeListFor(ListKey.TYPE); + // Isn't the proper type anymore + assertEquals(0, getTest().passesCDOM(prereq, pc)); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Martial")); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Exotic")); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Cool")); + // Test having multiple types + assertEquals(1, getTest().passesCDOM(prereq, pc)); + } + } + + @Test + public void testTypeEqual() throws PrerequisiteException + { + if (isTypeLegal()) + { + + Prerequisite prereq = getTypeEqualsPrereq(); + // PC Should start without the WeaponProf + assertEquals(0, getTest().passesCDOM(prereq, pc)); + PObject katana = equip("Katana", getProperLocation()); + // Not yet the proper type + assertEquals(0, getTest().passesCDOM(prereq, pc)); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Martial")); + assertEquals(1, getTest().passesCDOM(prereq, pc)); + katana.removeListFor(ListKey.TYPE); + // Isn't the proper type anymore + assertEquals(0, getTest().passesCDOM(prereq, pc)); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Exotic")); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Martial")); + katana.addToListFor(ListKey.TYPE, Type.getConstant("Cool")); + // Test with WP having multiple types + assertEquals(1, getTest().passesCDOM(prereq, pc)); + } + } + + // TODO Test where an EqMod has modified a TYPE of a piece of Equipment + + // TODO Need to consider inverted? !PRE? + + // TODO Complex Types (more than one type) + + // TODO Test WIELDCATEGORY +} Added: branches/cdom/code/src/utest/plugin/pretokens/test/PreEquipTwoWeaponTesterTest.java =================================================================== --- branches/cdom/code/src/utest/plugin/pretokens/test/PreEquipTwoWeaponTesterTest.java (rev 0) +++ branches/cdom/code/src/utest/plugin/pretokens/test/PreEquipTwoWeaponTesterTest.java 2007-05-28 15:58:44 UTC (rev 3068) @@ -0,0 +1,35 @@ +package plugin.pretokens.test; + +import pcgen.core.Equipment; +import pcgen.core.prereq.PrerequisiteTest; + +public class PreEquipTwoWeaponTesterTest extends AbstractCDOMPreEquipTestCase +{ + + PreEquipTwoWeaponTester tester = new PreEquipTwoWeaponTester(); + + @Override + public int getFalseLocation() + { + return Equipment.EQUIPPED_PRIMARY; + } + + @Override + public String getKind() + { + return "EQUIPTWOWEAPON"; + } + + @Override + public int getProperLocation() + { + return Equipment.EQUIPPED_TWO_HANDS; + } + + @Override + public PrerequisiteTest getTest() + { + return tester; + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |