package dbfit.util; import org.junit.Test; import org.junit.Before; import java.util.ArrayList; import java.util.AbstractCollection; import java.util.AbstractList; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertEquals; public class TypeTransformerFactoryTest { private static TypeTransformer createTypeTransformerFake(final String tag) { return new TypeTransformer() { @Override public Object transform(Object o) { return null; } @Override public String toString() { return tag; } }; } private final Class ctop = AbstractCollection.class; private final Class cmid = AbstractList.class; private final Class clow = ArrayList.class; private final TypeTransformer normaliserTop = createTypeTransformerFake("normaliser Top"); private final TypeTransformer normaliserMid = createTypeTransformerFake("normaliser Mid"); private final TypeTransformer normaliserLow = createTypeTransformerFake("normaliser Low"); private TypeTransformerFactory ttf = new TypeTransformerFactory(); @Before public void init() { ttf.setTransformer(ctop, normaliserTop); ttf.setTransformer(cmid, normaliserMid); } @Test public void normaliserLookupReturnsClosestParentIfNoExactMatch() { TypeTransformer normaliser = ttf.getTransformer(clow); assertEquals(normaliserMid, normaliser); } @Test public void normaliserLookupReturnsExactMatchIfAny() { TypeTransformer normaliser = ttf.getTransformer(cmid); assertEquals(normaliserMid, normaliser); normaliser = ttf.getTransformer(ctop); assertEquals(normaliserTop, normaliser); } @Test public void normaliserLookupReturnsNullWhenNolExactMatchNorParents() { TypeTransformer normaliser = ttf.getTransformer(String.class); assertNull(normaliser); } }