package net.sourceforge.stripes.validation; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Collection; import java.util.Locale; import net.sourceforge.stripes.StripesTestFixture; import net.sourceforge.stripes.util.Log; import org.testng.Assert; import org.testng.annotations.Test; public class DefaultTypeConverterFactoryTest { private static final Log log = Log.getInstance(DefaultTypeConverterFactoryTest.class); @SuppressWarnings("unchecked") @Test(groups="fast") public void testCharTypeConverter() throws Exception{ DefaultTypeConverterFactory factory = new DefaultTypeConverterFactory(); factory.init(StripesTestFixture.getDefaultConfiguration()); TypeConverter typeConverter = factory.getTypeConverter(Character.class, Locale.getDefault()); Assert.assertEquals(CharacterTypeConverter.class, typeConverter.getClass()); typeConverter = factory.getTypeConverter(Character.TYPE, Locale.getDefault()); Assert.assertEquals(CharacterTypeConverter.class, typeConverter.getClass()); } /* * Some tests to make sure we're getting the right type converters. */ @Retention(RetentionPolicy.RUNTIME) public static @interface Ann {} public static interface A {} public static class B implements A {} public static class C extends B {} public static class D extends C {} @Ann public static class E extends D {} @Ann public static class F {} public static abstract class BaseTC<T> implements TypeConverter<T> { public T convert(String input, Class<? extends T> targetType, Collection<ValidationError> errors) { return null; } public void setLocale(Locale locale) {} } public static class ATC extends BaseTC<A> {} public static class DTC extends BaseTC<D> {} public static class AnnTC extends BaseTC<Ann> {} protected void checkTypeConverter(TypeConverterFactory factory, Class<?> targetType, Class<?> expect) throws Exception { log.debug("Checking type converter for ", targetType.getSimpleName(), " is ", expect == null ? "null" : ATC.class.getSimpleName()); TypeConverter<?> tc = factory.getTypeConverter(targetType, null); if (expect != null) { Assert.assertNotNull(tc); Assert.assertSame(tc.getClass(), expect); } } @Test(groups = "fast") public void testTypeConverters() throws Exception { DefaultTypeConverterFactory factory = new DefaultTypeConverterFactory(); factory.init(StripesTestFixture.getDefaultConfiguration()); factory.add(A.class, ATC.class); factory.add(D.class, DTC.class); factory.add(Ann.class, AnnTC.class); checkTypeConverter(factory, A.class, ATC.class); checkTypeConverter(factory, B.class, null); checkTypeConverter(factory, C.class, null); checkTypeConverter(factory, D.class, DTC.class); checkTypeConverter(factory, E.class, AnnTC.class); checkTypeConverter(factory, F.class, AnnTC.class); } }