package org.marketcetera.trade; import org.marketcetera.util.misc.ClassVersion; import org.marketcetera.core.Pair; import org.junit.Test; import static org.junit.Assert.*; import java.util.Set; import java.util.HashSet; import java.util.List; /* $License$ */ /** * Test Base class for enums based on FIX enum values. * * @param <F> The fix parameter value type. * @param <E> The Enum type. * * @author anshul@marketcetera.com * @version $Id: FIXEnumTestBase.java 16154 2012-07-14 16:34:05Z colin $ * @since 1.0.0 */ @ClassVersion("$Id: FIXEnumTestBase.java 16154 2012-07-14 16:34:05Z colin $") //$NON-NLS-1$ public abstract class FIXEnumTestBase<F,E extends Enum<E>> { /** * Verifies all enum values. */ @Test public final void verifyKnownValues() { Set<E> set = new HashSet<E>(); for(Pair<E,F> p:knownValues()) { checkValue(p.getFirstMember(), p.getSecondMember(), set); } set.removeAll(getValues()); //Verify that we are verifying all the defined values. assertTrue(set.toString(), set.isEmpty()); } /** * Verifies unknown enum values. */ @Test public final void verifyUnknownValues() { for(F u:unknownFIXValues()) { assertSame(unknownInstance(), getInstanceForFIXValue(u)); } } protected final void checkValue(E inEnum, F inFIXValue, Set<E> inValuesSet) { assertEquals(inFIXValue, getFIXValue(inEnum)); assertSame(inEnum, getInstanceForFIXValue(inFIXValue)); inValuesSet.add(inEnum); } /** * The set of known enum values. Does not include unknown value. * * @return the set of known enum values. */ protected abstract List<Pair<E,F>> knownValues(); /** * The list of invalid / unknown FIX values. * * @return the list of invalid / unknown FIX values. */ protected abstract List<F> unknownFIXValues(); /** * Returns enum instance for the supplied FIX value. * * @param inFIXValue the FIX value. * * @return the enum instance. */ protected abstract E getInstanceForFIXValue(F inFIXValue); /** * Gets the FIX value from the supplied enum instance. * * @param e the enum instance. * * @return the FIX value. */ protected abstract F getFIXValue(E e); /** * The unknown value instance. * * @return the unknown value instance. */ protected abstract E unknownInstance(); /** * The list of all values of the Enum. * * @return the list of all values of the Enum. */ protected abstract List<E> getValues(); }