/*
* 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.testsupport;
import java.net.URISyntaxException;
import org.junit.Test;
import pcgen.cdom.base.CDOMObject;
import pcgen.cdom.base.Loadable;
import pcgen.persistence.PersistenceLayerException;
import pcgen.rules.context.LoadContext;
import pcgen.rules.persistence.token.CDOMSecondaryToken;
import pcgen.rules.persistence.token.QualifierToken;
import plugin.qualifier.pobject.QualifiedToken;
public abstract class AbstractPrimitiveTokenTestCase<T extends CDOMObject, TC extends Loadable>
extends AbstractCDOMTokenTestCase<T>
{
private static QualifierToken<CDOMObject> qual = new QualifiedToken<>();
public abstract CDOMSecondaryToken<?> getSubToken();
private final String prim;
private final String target;
private final String good;
protected AbstractPrimitiveTokenTestCase(String primitive, String tgt)
{
prim = primitive;
target = tgt;
good = target == null ? prim : prim + "=" + target;
}
public String getSubTokenName()
{
return getSubToken().getTokenName();
}
public abstract Class<TC> getTargetClass();
@Override
public void setUp() throws PersistenceLayerException, URISyntaxException
{
super.setUp();
TokenRegistration.register(getSubToken());
TokenRegistration.register(qual);
}
protected void construct(LoadContext loadContext, String one)
{
loadContext.getReferenceContext().constructCDOMObject(getTargetClass(), one);
}
@Override
protected String getAlternateLegalValue()
{
return getSubTokenName() + '|' + "QUALIFIED[" + good + "]";
}
@Override
protected String getLegalValue()
{
return getSubTokenName() + '|' + good;
}
@Override
protected ConsolidationRule getConsolidationRule()
{
return ConsolidationRule.OVERWRITE;
}
@Test
public void testPrimitiveEquals() throws PersistenceLayerException
{
assertFalse(parse(getSubTokenName() + '|' + "QUALIFIED[" + prim + "=]"));
assertNoSideEffects();
}
@Test
public void testPrimitivePipe() throws PersistenceLayerException
{
assertFalse(parse(getSubTokenName() + '|' + "QUALIFIED[" + good + "|]"));
assertNoSideEffects();
}
@Test
public void testPrimitiveComma() throws PersistenceLayerException
{
assertFalse(parse(getSubTokenName() + '|' + "QUALIFIED[" + good + ",]"));
assertNoSideEffects();
}
@Test
public void testPipePrimitive() throws PersistenceLayerException
{
assertFalse(parse(getSubTokenName() + '|' + "QUALIFIED[|" + good + "]"));
assertNoSideEffects();
}
@Test
public void testCommaPrimitive() throws PersistenceLayerException
{
assertFalse(parse(getSubTokenName() + '|' + "QUALIFIED[," + good + "]"));
assertNoSideEffects();
}
@Test
public void testPrimitiveDoublePipe() throws PersistenceLayerException
{
assertFalse(parse(getSubTokenName() + '|' + "QUALIFIED[TestWP2||"
+ good + "]]"));
assertNoSideEffects();
}
@Test
public void testPrimitiveDoubleComma() throws PersistenceLayerException
{
assertFalse(parse(getSubTokenName() + '|' + "QUALIFIED[TYPE=Foo,,"
+ good + "]"));
assertNoSideEffects();
}
@Test
public void testPrimitiveAll1() throws PersistenceLayerException
{
assertFalse(parse(getSubTokenName() + '|' + "QUALIFIED[ALL|" + good
+ "]"));
assertNoSideEffects();
}
@Test
public void testPrimitiveAll2() throws PersistenceLayerException
{
assertFalse(parse(getSubTokenName() + '|' + "QUALIFIED[" + good
+ "|ALL]"));
assertNoSideEffects();
}
@Test
public void testTypePrimitiveBadSyntax() throws PersistenceLayerException
{
assertFalse(parse(getSubTokenName() + '|' + "QUALIFIED[TYPE=Foo]"
+ good));
assertNoSideEffects();
}
@Test
public void testPrimitiveTypeBadSyntax() throws PersistenceLayerException
{
assertFalse(parse(getSubTokenName() + '|' + "QUALIFIED[" + good
+ "]TYPE=Foo"));
assertNoSideEffects();
}
@Test
public void testPrimitiveTypePipeBadSyntax()
throws PersistenceLayerException
{
assertFalse(parse(getSubTokenName() + '|' + "QUALIFIED[" + good
+ "]TYPE=Foo|TYPE=Bar"));
assertNoSideEffects();
}
@Test
public void testPrimitiveTypeCommaBadSyntax()
throws PersistenceLayerException
{
assertFalse(parse(getSubTokenName() + '|' + "QUALIFIED[TYPE=Foo]"
+ good + ",TYPE=Bar"));
assertNoSideEffects();
}
@Test
public void testPrimitiveUsedAsQualifier() throws PersistenceLayerException
{
assertFalse(parse(getSubTokenName() + '|' + good + "[" + good + "]"));
assertNoSideEffects();
}
@Test
public void testDotPrimitive() throws PersistenceLayerException
{
construct(primaryContext, "TestWP1");
construct(secondaryContext, "TestWP1");
boolean ret = parse(getSubTokenName() + '|' + "QUALIFIED[TestWP1." + good
+ "]");
if (ret)
{
assertConstructionError();
}
else
{
assertNoSideEffects();
}
}
@Test
public void testGoodBadNoSideEffect() throws PersistenceLayerException
{
construct(primaryContext, "TestWP1");
construct(primaryContext, "TestWP2");
construct(primaryContext, "TestWP3");
construct(secondaryContext, "TestWP1");
construct(secondaryContext, "TestWP2");
construct(secondaryContext, "TestWP3");
assertTrue(parse(getSubTokenName() + '|' + "QUALIFIED[TestWP1|TestWP2]"));
assertTrue(parseSecondary(getSubTokenName() + '|'
+ "QUALIFIED[TestWP1|TestWP2]"));
assertFalse(parse(getSubTokenName() + '|' + "QUALIFIED[TestWP3||"
+ good + "]"));
assertNoSideEffects();
}
@Test
public void testAllNoSideEffect() throws PersistenceLayerException
{
// Test with All
construct(primaryContext, "TestWP1");
construct(primaryContext, "TestWP2");
construct(secondaryContext, "TestWP1");
construct(secondaryContext, "TestWP2");
assertTrue(parse(getSubTokenName() + '|' + "QUALIFIED[TestWP1|TestWP2]"));
assertTrue(parseSecondary(getSubTokenName() + '|'
+ "QUALIFIED[TestWP1|TestWP2]"));
assertFalse(parse(getSubTokenName() + '|' + "QUALIFIED[" + good
+ "|ALL]"));
assertNoSideEffects();
}
@Test
public void testPrimitiveGood() throws PersistenceLayerException
{
if (target != null)
{
construct(primaryContext, target);
construct(secondaryContext, target);
}
runRoundRobin(getSubTokenName() + '|' + good);
}
@Test
public void testQualifiedPrimitiveGood() throws PersistenceLayerException
{
if (target != null)
{
construct(primaryContext, target);
construct(secondaryContext, target);
}
runRoundRobin(getSubTokenName() + '|' + "QUALIFIED[" + good + "]");
}
@Test
public void doPrimitiveIllegalTarget(String illegal)
throws PersistenceLayerException
{
String primitive = prim;
if (illegal != null)
{
primitive += "=" + illegal;
}
boolean parse = parse(getSubTokenName() + '|' + "QUALIFIED["
+ primitive + "]");
if (parse)
{
assertConstructionError();
}
else
{
assertNoSideEffects();
}
}
}