package org.simpleflatmapper.jdbc.test; import org.junit.Test; import org.simpleflatmapper.jdbc.JdbcMapper; import org.simpleflatmapper.jdbc.JdbcMapperBuilder; import org.simpleflatmapper.map.FieldMapper; import org.simpleflatmapper.map.MappingContext; import org.simpleflatmapper.map.MappingException; import org.simpleflatmapper.reflect.BiInstantiator; import org.simpleflatmapper.reflect.InstantiatorDefinition; import org.simpleflatmapper.reflect.Parameter; import org.simpleflatmapper.reflect.ReflectionService; import org.simpleflatmapper.test.beans.DbObject; import org.simpleflatmapper.reflect.asm.AsmFactory; import org.simpleflatmapper.reflect.InstantiatorFactory; import org.simpleflatmapper.util.BiFunction; import java.lang.reflect.Type; import java.sql.ResultSet; import java.util.List; import java.util.Map; import static org.junit.Assert.*; public class JdbcMapperBuilderImplTest { @Test public void testAddFieldMapper() { JdbcMapperBuilder<DbObject> builder = JdbcMapperFactoryHelper.asm().newBuilder(DbObject.class); JdbcMapper<DbObject> mapper = builder.addMapper(new FieldMapper<ResultSet, DbObject>() { @Override public void mapTo(ResultSet source, DbObject target, MappingContext<? super ResultSet> mappingContext) throws MappingException { target.setId(33); } }).mapper(); assertEquals(33, mapper.map(null).getId()); } @Test public void testAsmFailureOnmapper() { JdbcMapperBuilder<DbObject> builder = JdbcMapperFactoryHelper.noFailOnAsm().reflectionService(new ReflectionService(newAsmFactoryFailsOnmapper())).newBuilder(DbObject.class); final JdbcMapper<DbObject> mapper = builder.mapper(); assertTrue(mapper.getClass().getSimpleName().equals("StaticJdbcSetRowMapper")); } public AsmFactory newAsmFactoryFailsOnmapper() { return new AsmFactory(Thread.currentThread().getContextClassLoader()) { @Override public Class<?> createClass(String className, byte[] bytes, ClassLoader declaringClassLoader) { throw new IllegalArgumentException("Invalid class"); } }; } @Test public void testAsmFailureOnJdbcMapperFailOnAsm() { JdbcMapperBuilder<DbObject> builder = JdbcMapperFactoryHelper.asm().reflectionService(new ReflectionService(newAsmFactoryFailsOnmapper())).newBuilder(DbObject.class); try { builder.mapper(); fail(); } catch(IllegalArgumentException e) { // expected } } @Test public void testAsmFailureOnInstantiator() { JdbcMapperBuilder<DbObject> builder = JdbcMapperFactoryHelper.noFailOnAsm().reflectionService(new ReflectionService(null) { @Override public InstantiatorFactory getInstantiatorFactory() { return new InstantiatorFactory(null) { @Override public <S1, S2, T> BiInstantiator<S1, S2, T> getBiInstantiator(Type target, Class<?> s1, Class<?> s2, List<InstantiatorDefinition> constructors, Map<Parameter, BiFunction<? super S1, ? super S2, ?>> injections, boolean useAsmIfEnabled) throws SecurityException { throw new UnsupportedOperationException(); } }; } }).newBuilder(DbObject.class); try { builder.mapper(); fail("Expected exception"); } catch(UnsupportedOperationException e) { } } }