/* * Copyright (c) 2007 Tom Parker <thpr@users.sourceforge.net> * * This program 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 program 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., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package plugin.lsttokens.template; import org.junit.Test; import pcgen.base.formula.DividingFormula; import pcgen.cdom.content.HitDie; import pcgen.cdom.enumeration.ListKey; import pcgen.cdom.enumeration.ObjectKey; import pcgen.cdom.enumeration.Type; import pcgen.cdom.processor.HitDieFormula; import pcgen.cdom.processor.HitDieLock; import pcgen.cdom.processor.HitDieStep; import pcgen.core.PCClass; import pcgen.core.PCTemplate; import pcgen.persistence.PersistenceLayerException; import pcgen.rules.persistence.CDOMLoader; import pcgen.rules.persistence.token.CDOMPrimaryToken; import plugin.lsttokens.testsupport.AbstractCDOMTokenTestCase; import plugin.lsttokens.testsupport.CDOMTokenLoader; import plugin.lsttokens.testsupport.ConsolidationRule; public class HitDieTokenTest extends AbstractCDOMTokenTestCase<PCTemplate> { static HitdieToken token = new HitdieToken(); static CDOMTokenLoader<PCTemplate> loader = new CDOMTokenLoader<PCTemplate>(); @Override public Class<PCTemplate> getCDOMClass() { return PCTemplate.class; } @Override public CDOMLoader<PCTemplate> getLoader() { return loader; } @Override public CDOMPrimaryToken<PCTemplate> getToken() { return token; } @Test public void testInvalidInputTooManyLimits() throws PersistenceLayerException { assertFalse(parse("15|CLASS=Fighter|CLASS.TYPE=Base")); assertNoSideEffects(); } @Test public void testInvalidInputNotALimit() throws PersistenceLayerException { assertFalse(parse("15|PRECLASS:1,Fighter")); assertNoSideEffects(); } @Test public void testInvalidInputEmptyLimit() throws PersistenceLayerException { assertFalse(parse("15|CLASS=")); assertNoSideEffects(); } @Test public void testInvalidInputEmptyTypeLimit() throws PersistenceLayerException { assertFalse(parse("15|CLASS.TYPE=")); assertNoSideEffects(); } @Test public void testInvalidInputStartDotTypeLimit() throws PersistenceLayerException { assertFalse(parse("15|CLASS.TYPE=.Strange")); assertNoSideEffects(); } @Test public void testInvalidInputEndDotTypeLimit() throws PersistenceLayerException { assertFalse(parse("15|CLASS.TYPE=Strange.")); assertNoSideEffects(); } @Test public void testInvalidInputDoubleDotTypeLimit() throws PersistenceLayerException { assertFalse(parse("15|CLASS.TYPE=Prestige..Strange")); assertNoSideEffects(); } @Test public void testValidInputDivideNegative() throws PersistenceLayerException { assertFalse(parse("%/-2")); assertNoSideEffects(); } @Test public void testValidInputDivideZero() throws PersistenceLayerException { assertFalse(parse("%/0")); assertNoSideEffects(); } @Test public void testValidInputDivide() throws PersistenceLayerException { assertTrue(parse("%/4")); } @Test public void testInvalidInputAddNegative() throws PersistenceLayerException { assertFalse(parse("%+-3")); assertNoSideEffects(); } @Test public void testInvalidInputAddZero() throws PersistenceLayerException { assertFalse(parse("%+0")); assertNoSideEffects(); } @Test public void testValidInputAdd() throws PersistenceLayerException { assertTrue(parse("%+4")); } @Test public void testInvalidInputMultiplyNegative() throws PersistenceLayerException { assertFalse(parse("%*-3")); assertNoSideEffects(); } @Test public void testInvalidInputMultiplyZero() throws PersistenceLayerException { assertFalse(parse("%*0")); assertNoSideEffects(); } @Test public void testValidInputMultiply() throws PersistenceLayerException { assertTrue(parse("%*4")); } @Test public void testInvalidInputSubtractNegative() throws PersistenceLayerException { assertFalse(parse("%--3")); assertNoSideEffects(); } @Test public void testInvalidInputSubtractZero() throws PersistenceLayerException { assertFalse(parse("%-0")); assertNoSideEffects(); } @Test public void testValidInputSubtract() throws PersistenceLayerException { assertTrue(parse("%-4")); } @Test public void testInvalidInputUpNegative() throws PersistenceLayerException { assertFalse(parse("%up-3")); assertNoSideEffects(); } @Test public void testInvalidInputUpZero() throws PersistenceLayerException { assertFalse(parse("%up0")); assertNoSideEffects(); } @Test public void testInvalidInputUpTooBig() throws PersistenceLayerException { assertFalse(parse("%up5")); assertNoSideEffects(); } @Test public void testInvalidInputUpReallyTooBig() throws PersistenceLayerException { assertFalse(parse("%up15")); assertNoSideEffects(); } @Test public void testValidInputUp() throws PersistenceLayerException { assertTrue(parse("%up4")); } @Test public void testInvalidInputHUpNegative() throws PersistenceLayerException { assertFalse(parse("%Hup-3")); assertNoSideEffects(); } @Test public void testInvalidInputHUpZero() throws PersistenceLayerException { assertFalse(parse("%Hup0")); assertNoSideEffects(); } @Test public void testValidInputHUp() throws PersistenceLayerException { assertTrue(parse("%Hup4")); } @Test public void testInvalidInputDownNegative() throws PersistenceLayerException { assertFalse(parse("%down-3")); assertNoSideEffects(); } @Test public void testInvalidInputDownZero() throws PersistenceLayerException { assertFalse(parse("%down0")); assertNoSideEffects(); } @Test public void testValidInputDown() throws PersistenceLayerException { assertTrue(parse("%down4")); } @Test public void testInvalidInputDownTooBig() throws PersistenceLayerException { assertFalse(parse("%down5")); assertNoSideEffects(); } @Test public void testInvalidInputDownReallyTooBig() throws PersistenceLayerException { assertFalse(parse("%down15")); assertNoSideEffects(); } @Test public void testInvalidInputHdownNegative() throws PersistenceLayerException { assertFalse(parse("%Hdown-3")); assertNoSideEffects(); } @Test public void testInvalidInputHdownZero() throws PersistenceLayerException { assertFalse(parse("%Hdown0")); assertNoSideEffects(); } @Test public void testValidInputHdown() throws PersistenceLayerException { assertTrue(parse("%Hdown4")); } @Test public void testInvalidInputNegative() throws PersistenceLayerException { assertFalse(parse("-3")); assertNoSideEffects(); } @Test public void testInvalidInputZero() throws PersistenceLayerException { assertFalse(parse("0")); assertNoSideEffects(); } @Test public void testInvalidInputDecimal() throws PersistenceLayerException { assertFalse(parse("3.5")); assertNoSideEffects(); } @Test public void testInvalidInputMisspell() throws PersistenceLayerException { assertFalse(parse("%upn5")); assertNoSideEffects(); } @Test public void testRoundRobinInteger() throws PersistenceLayerException { runRoundRobin("2"); } @Test public void testRoundRobinIntegerClass() throws PersistenceLayerException { primaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); secondaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); runRoundRobin("2|CLASS=Fighter"); } @Test public void testRoundRobinIntegerType() throws PersistenceLayerException { PCClass a = primaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); a.addToListFor(ListKey.TYPE, Type.getConstant("Base")); PCClass c = secondaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); c.addToListFor(ListKey.TYPE, Type.getConstant("Base")); runRoundRobin("2|CLASS.TYPE=Base"); } @Test public void testRoundRobinAdd() throws PersistenceLayerException { runRoundRobin("%+2"); } @Test public void testRoundRobinAddClass() throws PersistenceLayerException { primaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); secondaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); runRoundRobin("%+2|CLASS=Fighter"); } @Test public void testRoundRobinAddType() throws PersistenceLayerException { PCClass a = primaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); a.addToListFor(ListKey.TYPE, Type.getConstant("Base")); PCClass c = secondaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); c.addToListFor(ListKey.TYPE, Type.getConstant("Base")); runRoundRobin("%+2|CLASS.TYPE=Base"); } @Test public void testRoundRobinSubtract() throws PersistenceLayerException { runRoundRobin("%-2"); } @Test public void testRoundRobinSubtractClass() throws PersistenceLayerException { primaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); secondaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); runRoundRobin("%-2|CLASS=Fighter"); } @Test public void testRoundRobinSubtractType() throws PersistenceLayerException { PCClass a = primaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); a.addToListFor(ListKey.TYPE, Type.getConstant("Base")); PCClass c = secondaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); c.addToListFor(ListKey.TYPE, Type.getConstant("Base")); runRoundRobin("%-2|CLASS.TYPE=Base"); } @Test public void testRoundRobinMultiply() throws PersistenceLayerException { runRoundRobin("%*2"); } @Test public void testRoundRobinMultiplyClass() throws PersistenceLayerException { primaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); secondaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); runRoundRobin("%*2|CLASS=Fighter"); } @Test public void testRoundRobinMultiplyType() throws PersistenceLayerException { PCClass a = primaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); a.addToListFor(ListKey.TYPE, Type.getConstant("Base")); PCClass c = secondaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); c.addToListFor(ListKey.TYPE, Type.getConstant("Base")); runRoundRobin("%*2|CLASS.TYPE=Base"); } @Test public void testRoundRobinDivide() throws PersistenceLayerException { runRoundRobin("%/2"); } @Test public void testRoundRobinDivideClass() throws PersistenceLayerException { primaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); secondaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); runRoundRobin("%/2|CLASS=Fighter"); } @Test public void testRoundRobinDivideType() throws PersistenceLayerException { PCClass a = primaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); a.addToListFor(ListKey.TYPE, Type.getConstant("Base")); PCClass c = secondaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); c.addToListFor(ListKey.TYPE, Type.getConstant("Base")); runRoundRobin("%/2|CLASS.TYPE=Base"); } @Test public void testRoundRobinUp() throws PersistenceLayerException { runRoundRobin("%up2"); } @Test public void testRoundRobinUpClass() throws PersistenceLayerException { primaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); secondaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); runRoundRobin("%up2|CLASS=Fighter"); } @Test public void testRoundRobinUpType() throws PersistenceLayerException { PCClass a = primaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); a.addToListFor(ListKey.TYPE, Type.getConstant("Base")); PCClass c = secondaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); c.addToListFor(ListKey.TYPE, Type.getConstant("Base")); runRoundRobin("%up2|CLASS.TYPE=Base"); } @Test public void testRoundRobinHup() throws PersistenceLayerException { runRoundRobin("%Hup2"); } @Test public void testRoundRobinHupClass() throws PersistenceLayerException { primaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); secondaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); runRoundRobin("%Hup2|CLASS=Fighter"); } @Test public void testRoundRobinHupType() throws PersistenceLayerException { PCClass a = primaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); a.addToListFor(ListKey.TYPE, Type.getConstant("Base")); PCClass c = secondaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); c.addToListFor(ListKey.TYPE, Type.getConstant("Base")); runRoundRobin("%Hup2|CLASS.TYPE=Base"); } @Test public void testRoundRobinDown() throws PersistenceLayerException { runRoundRobin("%down2"); } @Test public void testRoundRobinDownClass() throws PersistenceLayerException { primaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); secondaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); runRoundRobin("%down2|CLASS=Fighter"); } @Test public void testRoundRobinDownType() throws PersistenceLayerException { PCClass a = primaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); a.addToListFor(ListKey.TYPE, Type.getConstant("Base")); PCClass c = secondaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); c.addToListFor(ListKey.TYPE, Type.getConstant("Base")); runRoundRobin("%down2|CLASS.TYPE=Base"); } @Test public void testRoundRobinHdown() throws PersistenceLayerException { runRoundRobin("%Hdown2"); } @Test public void testRoundRobinHdownClass() throws PersistenceLayerException { primaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); secondaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); runRoundRobin("%Hdown2|CLASS=Fighter"); } @Test public void testRoundRobinHdownType() throws PersistenceLayerException { PCClass a = primaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); a.addToListFor(ListKey.TYPE, Type.getConstant("Base")); PCClass c = secondaryContext.getReferenceContext().constructCDOMObject(PCClass.class, "Fighter"); c.addToListFor(ListKey.TYPE, Type.getConstant("Base")); runRoundRobin("%Hdown2|CLASS.TYPE=Base"); } @Override protected String getAlternateLegalValue() { return "%Hdown2"; } @Override protected String getLegalValue() { return "%*2|CLASS.TYPE=Base"; } @Test public void testUnparseNull() throws PersistenceLayerException { primaryProf.put(ObjectKey.HITDIE, null); assertNull(getToken().unparse(primaryContext, primaryProf)); } @Test public void testUnparseLegal() throws PersistenceLayerException { primaryProf.put(ObjectKey.HITDIE, new HitDieLock(new HitDie(1))); expectSingle(getToken().unparse(primaryContext, primaryProf), "1"); } @SuppressWarnings("unchecked") @Test public void testUnparseGenericsFail() throws PersistenceLayerException { ObjectKey objectKey = ObjectKey.HITDIE; primaryProf.put(objectKey, new Object()); try { getToken().unparse(primaryContext, primaryProf); fail(); } catch (ClassCastException e) { //Yep! } } @Override protected ConsolidationRule getConsolidationRule() { return ConsolidationRule.OVERWRITE; } @Test public void testUnparseZeroSteps() throws PersistenceLayerException { try { primaryProf.put(ObjectKey.HITDIE, new HitDieStep(0, new HitDie(12))); assertBadUnparse(); } catch (IllegalArgumentException e) { // Good here too :) } } @Test public void testUnparseNegativeLevel() throws PersistenceLayerException { try { primaryProf.put(ObjectKey.HITDIE, new HitDieLock(new HitDie(-1))); assertBadUnparse(); } catch (IllegalArgumentException e) { // Good here too :) } } @Test public void testUnparseZeroDivide() throws PersistenceLayerException { try { primaryProf.put(ObjectKey.HITDIE, new HitDieFormula( new DividingFormula(0))); assertBadUnparse(); } catch (IllegalArgumentException e) { // Good here too :) } } /* * TODO Need to find owner for this responsibility */ // @Test // public void testUnparseNegativeDivide() throws PersistenceLayerException // { // try // { // primaryProf.put(ObjectKey.HITDIE, new HitDieFormula(new // DividingFormula(-3))); // assertBadUnparse(); // } // catch (IllegalArgumentException e) // { // //Good here too :) // } // } // // @Test // public void testUnparseZeroMult() throws PersistenceLayerException // { // try // { // primaryProf.put(ObjectKey.HITDIE, new HitDieFormula(new // MultiplyingFormula(0))); // assertBadUnparse(); // } // catch (IllegalArgumentException e) // { // //Good here too :) // } // } // // @Test // public void testUnparseNegativeMult() throws PersistenceLayerException // { // try // { // primaryProf.put(ObjectKey.HITDIE, new HitDieFormula(new // MultiplyingFormula(-3))); // assertBadUnparse(); // } // catch (IllegalArgumentException e) // { // //Good here too :) // } // } // // @Test // public void testUnparseZeroAdd() throws PersistenceLayerException // { // try // { // primaryProf.put(ObjectKey.HITDIE, new HitDieFormula(new // AddingFormula(0))); // assertBadUnparse(); // } // catch (IllegalArgumentException e) // { // //Good here too :) // } // } // // @Test // public void testUnparseNegativeAdd() throws PersistenceLayerException // { // try // { // primaryProf.put(ObjectKey.HITDIE, new HitDieFormula(new // AddingFormula(-3))); // assertBadUnparse(); // } // catch (IllegalArgumentException e) // { // //Good here too :) // } // } // // @Test // public void testUnparseZeroSub() throws PersistenceLayerException // { // try // { // primaryProf.put(ObjectKey.HITDIE, new HitDieFormula(new // SubtractingFormula(0))); // assertBadUnparse(); // } // catch (IllegalArgumentException e) // { // //Good here too :) // } // } // // @Test // public void testUnparseNegativeSub() throws PersistenceLayerException // { // try // { // primaryProf.put(ObjectKey.HITDIE, new HitDieFormula(new // SubtractingFormula(-3))); // assertBadUnparse(); // } // catch (IllegalArgumentException e) // { // //Good here too :) // } // } // // @Test // public void testUnparseBigSteps() throws PersistenceLayerException // { // try // { // primaryProf.put(ObjectKey.HITDIE, new HitDieStep(8, new HitDie(12))); // assertBadUnparse(); // } // catch (IllegalArgumentException e) // { // //Good here too :) // } // } // // @Test // public void testUnparseBigNegativeSteps() throws // PersistenceLayerException // { // try // { // primaryProf.put(ObjectKey.HITDIE, new HitDieStep(-8, new HitDie(12))); // assertBadUnparse(); // } // catch (IllegalArgumentException e) // { // //Good here too :) // } // } // // @Test // public void testUnparseBadBase() throws PersistenceLayerException // { // try // { // primaryProf.put(ObjectKey.HITDIE, new HitDieStep(1, new HitDie(6))); // assertBadUnparse(); // } // catch (IllegalArgumentException e) // { // //Good here too :) // } // } }