package org.simpleflatmapper.jdbc.test;
import org.junit.Test;
import org.simpleflatmapper.jdbc.JdbcMapper;
import org.simpleflatmapper.jdbc.JdbcMapperBuilder;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class JdbcMapperOneConstructorTypeTest {
public static class MyObject {
public SubObject prop;
}
public static class SubObject {
private final String value;
public SubObject(String value) {
this.value = value;
}
}
public static class MyObjectAmbiguity {
public SubObjectAmbiguity prop;
}
public static class SubObjectAmbiguity {
private final String value;
public SubObjectAmbiguity(String value) {
this.value = value;
}
public SubObjectAmbiguity(String value, int ivalue) {
this.value = value;
}
}
@Test
public void testCanCreateTypeFromUnambiguousConstructorNoAsm() throws Exception {
JdbcMapperBuilder<MyObject> builder = JdbcMapperFactoryHelper.noAsm().newBuilder(MyObject.class);
testMatchConstructor(builder);
}
@Test
public void testCanCreateTypeFromUnambiguousConstructorAsm() throws Exception {
JdbcMapperBuilder<MyObject> builder = JdbcMapperFactoryHelper.asm().newBuilder(MyObject.class);
testMatchConstructor(builder);
}
@Test
public void testCanCreateTypeFromAmbiguousWithType() throws Exception {
JdbcMapperBuilder<MyObjectAmbiguity> builder = JdbcMapperFactoryHelper.asm().newBuilder(MyObjectAmbiguity.class);
builder.addMapping("prop", 1, Types.VARCHAR);
JdbcMapper<MyObjectAmbiguity> mapper = builder.mapper();
ResultSet rs = mock(ResultSet.class);
when(rs.getString(1)).thenReturn("val");
assertEquals("val", mapper.map(rs).prop.value);
}
private void testMatchConstructor(JdbcMapperBuilder<MyObject> builder)
throws SQLException {
builder.addMapping("prop");
JdbcMapper<MyObject> mapper = builder.mapper();
ResultSet rs = mock(ResultSet.class);
when(rs.getString(1)).thenReturn("val");
assertEquals("val", mapper.map(rs).prop.value);
}
}