package org.simpleflatmapper.jdbc.test;
import org.joda.time.DateTimeZone;
import org.junit.Before;
import org.junit.Test;
import org.simpleflatmapper.jdbc.JdbcColumnKey;
import org.simpleflatmapper.test.beans.DbObject;
import org.simpleflatmapper.jdbc.impl.PreparedStatementSetterFactory;
import org.simpleflatmapper.jdbc.test.impl.getter.ResultSetGetterFactoryTest;
import org.simpleflatmapper.map.FieldMapper;
import org.simpleflatmapper.map.property.FieldMapperColumnDefinition;
import org.simpleflatmapper.map.property.SetterFactoryProperty;
import org.simpleflatmapper.map.property.SetterProperty;
//IFJAVA8_START
import org.simpleflatmapper.map.property.time.JavaZoneIdProperty;
//IFJAVA8_END
import org.simpleflatmapper.map.error.RethrowMapperBuilderErrorHandler;
import org.simpleflatmapper.map.mapper.ConstantTargetFieldMapperFactory;
import org.simpleflatmapper.map.mapper.ConstantTargetFieldMapperFactoryImpl;
import org.simpleflatmapper.map.mapper.PropertyMapping;
import org.simpleflatmapper.reflect.Getter;
import org.simpleflatmapper.reflect.getter.NullGetter;
import org.simpleflatmapper.reflect.Setter;
import org.simpleflatmapper.reflect.SetterFactory;
import org.simpleflatmapper.reflect.getter.ConstantBooleanGetter;
import org.simpleflatmapper.reflect.getter.ConstantByteGetter;
import org.simpleflatmapper.reflect.getter.ConstantCharacterGetter;
import org.simpleflatmapper.reflect.getter.ConstantDoubleGetter;
import org.simpleflatmapper.reflect.getter.ConstantFloatGetter;
import org.simpleflatmapper.reflect.getter.ConstantGetter;
import org.simpleflatmapper.reflect.getter.ConstantIntGetter;
import org.simpleflatmapper.reflect.getter.ConstantLongGetter;
import org.simpleflatmapper.reflect.getter.ConstantShortGetter;
import org.simpleflatmapper.reflect.meta.PropertyMeta;
import org.simpleflatmapper.util.UUIDHelper;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.Reader;
import java.math.BigDecimal;
import java.net.URL;
import java.sql.*;
//IFJAVA8_START
import java.time.LocalDate;
import java.time.Month;
import java.time.MonthDay;
import java.time.ZoneId;
//IFJAVA8_END
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import java.util.UUID;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.*;
public class PreparedStatementFieldMapperFactoryTest {
private ConstantTargetFieldMapperFactory<PreparedStatement, JdbcColumnKey> factory;
private PreparedStatement ps;
private int index;
@Before
public void setUp() {
factory = ConstantTargetFieldMapperFactoryImpl.newInstance(PreparedStatementSetterFactory.INSTANCE, PreparedStatement.class);
ps = mock(PreparedStatement.class);
index = 1;
}
@Test
public void testEnumOrdinal() throws Exception {
final DbObject.Type type = DbObject.Type.type3;
newFieldMapperAndMapToPS(new ConstantGetter<Object, DbObject.Type>(type), DbObject.Type.class, Types.NUMERIC, new Object[0]);
newFieldMapperAndMapToPS(NullGetter.< DbObject.Type>getter(), DbObject.Type.class, Types.NUMERIC, new Object[0]);
verify(ps).setInt(1, type.ordinal());
verify(ps).setNull(2, Types.INTEGER);
}
@Test
public void testEnumString() throws Exception {
final DbObject.Type type = DbObject.Type.type3;
newFieldMapperAndMapToPS(new ConstantGetter<Object, DbObject.Type>(type), DbObject.Type.class);
newFieldMapperAndMapToPS(NullGetter.<DbObject.Type>getter(), DbObject.Type.class);
verify(ps).setString(1, type.name());
verify(ps).setNull(2, Types.VARCHAR);
}
@Test
public void testMapBoolean() throws Exception {
newFieldMapperAndMapToPS(new ConstantBooleanGetter<Object>(true), boolean.class);
newFieldMapperAndMapToPS(new ConstantGetter<Object, Boolean>(false), Boolean.class);
newFieldMapperAndMapToPS(NullGetter.< Boolean>getter(), Boolean.class);
verify(ps).setBoolean(1, true);
verify(ps).setBoolean(2, false);
verify(ps).setNull(3, Types.BOOLEAN);
}
@Test
public void testMapByte() throws Exception {
newFieldMapperAndMapToPS(new ConstantByteGetter<Object>((byte)2), byte.class);
newFieldMapperAndMapToPS(new ConstantGetter<Object, Byte>((byte) 3), Byte.class);
newFieldMapperAndMapToPS(NullGetter.< Byte>getter(), Byte.class);
verify(ps).setByte(1, (byte) 2);
verify(ps).setByte(2, (byte) 3);
verify(ps).setNull(3, Types.TINYINT);
}
@Test
public void testMapChar() throws Exception {
newFieldMapperAndMapToPS(new ConstantCharacterGetter<Object>((char)2), char.class);
newFieldMapperAndMapToPS(new ConstantGetter<Object, Character>((char) 3), Character.class);
newFieldMapperAndMapToPS(NullGetter.< Character>getter(), Character.class);
verify(ps).setInt(1, 2);
verify(ps).setInt(2, 3);
verify(ps).setNull(3, Types.INTEGER);
}
@Test
public void testMapShort() throws Exception {
newFieldMapperAndMapToPS(new ConstantShortGetter<Object>((short)2), short.class);
newFieldMapperAndMapToPS(new ConstantGetter<Object, Short>((short) 3), Short.class);
newFieldMapperAndMapToPS(NullGetter.< Short>getter(), Short.class);
verify(ps).setShort(1, (short) 2);
verify(ps).setShort(2, (short) 3);
verify(ps).setNull(3, Types.SMALLINT);
}
@Test
public void testMapInt() throws Exception {
newFieldMapperAndMapToPS(new ConstantIntGetter<Object>(2), int.class);
newFieldMapperAndMapToPS(new ConstantGetter<Object, Integer>(3), Integer.class);
newFieldMapperAndMapToPS(NullGetter.< Integer>getter(), Integer.class);
verify(ps).setInt(1, 2);
verify(ps).setInt(2, 3);
verify(ps).setNull(3, Types.INTEGER);
}
@Test
public void testMapLong() throws Exception {
newFieldMapperAndMapToPS(new ConstantLongGetter<Object>((long)2), long.class);
newFieldMapperAndMapToPS(new ConstantGetter<Object, Long>((long) 3), Long.class);
newFieldMapperAndMapToPS(NullGetter.< Long>getter(), Long.class);
verify(ps).setLong(1, (long) 2);
verify(ps).setLong(2, (long) 3);
verify(ps).setNull(3, Types.BIGINT);
}
@Test
public void testMapFloat() throws Exception {
newFieldMapperAndMapToPS(new ConstantFloatGetter<Object>((float)2), float.class);
newFieldMapperAndMapToPS(new ConstantGetter<Object, Float>((float) 3), Float.class);
newFieldMapperAndMapToPS(NullGetter.< Float>getter(), Float.class);
verify(ps).setFloat(1, (float) 2);
verify(ps).setFloat(2, (float) 3);
verify(ps).setNull(3, Types.FLOAT);
}
@Test
public void testMapDouble() throws Exception {
newFieldMapperAndMapToPS(new ConstantDoubleGetter<Object>((double)2), double.class);
newFieldMapperAndMapToPS(new ConstantGetter<Object, Double>((double) 3), Double.class);
newFieldMapperAndMapToPS(NullGetter.< Double>getter(), Double.class);
verify(ps).setDouble(1, (double) 2);
verify(ps).setDouble(2, (double) 3);
verify(ps).setNull(3, Types.DOUBLE);
}
@Test
public void testMapDateNoSqlType() throws Exception {
final Date date = new Date();
newFieldMapperAndMapToPS(new ConstantGetter<Object, Date>(date), Date.class);
newFieldMapperAndMapToPS(NullGetter.< Date>getter(), Date.class);
verify(ps).setTimestamp(1, new Timestamp(date.getTime()));
verify(ps).setNull(2, Types.TIMESTAMP);
}
@Test
public void testMapSqlDate() throws Exception {
final java.sql.Date date = new java.sql.Date(new Date().getTime());
newFieldMapperAndMapToPS(new ConstantGetter<Object, java.sql.Date>(date), java.sql.Date.class);
newFieldMapperAndMapToPS(NullGetter.< java.sql.Date>getter(), java.sql.Date.class);
verify(ps).setDate(1, date);
verify(ps).setNull(2, Types.DATE);
}
@Test
public void testMapTimestamp() throws Exception {
final Timestamp date = new Timestamp(new Date().getTime());
newFieldMapperAndMapToPS(new ConstantGetter<Object, Timestamp>(date), Timestamp.class);
newFieldMapperAndMapToPS(NullGetter.< Timestamp>getter(), Timestamp.class);
verify(ps).setTimestamp(1, date);
verify(ps).setNull(2, Types.TIMESTAMP);
}
@Test
public void testMapTime() throws Exception {
final Time date = new Time(new Date().getTime());
newFieldMapperAndMapToPS(new ConstantGetter<Object, Time>(date), Time.class);
newFieldMapperAndMapToPS(NullGetter.< Time>getter(), Time.class);
verify(ps).setTime(1, date);
verify(ps).setNull(2, Types.TIME);
}
@Test
public void testMapCalendar() throws Exception {
final Date date = new Date();
final Calendar cal = Calendar.getInstance();
cal.setTime(date);
newFieldMapperAndMapToPS(new ConstantGetter<Object, Calendar>(cal), Calendar.class);
newFieldMapperAndMapToPS(NullGetter.< Calendar>getter(), Calendar.class);
verify(ps).setTimestamp(1, new Timestamp(date.getTime()));
verify(ps).setNull(2, Types.TIMESTAMP);
}
@Test
public void testMapString() throws Exception {
newFieldMapperAndMapToPS(new ConstantGetter<Object, String>("xyz"), String.class);
newFieldMapperAndMapToPS(NullGetter.< String>getter(), String.class);
verify(ps).setString(1, "xyz");
verify(ps).setNull(2, Types.VARCHAR);
}
@Test
public void testMapURL() throws Exception {
URL url = new URL("https://github.com/arnaudroger/SimpleFlatMapper/");
newFieldMapperAndMapToPS(new ConstantGetter<Object, URL>(url), URL.class);
newFieldMapperAndMapToPS(NullGetter.< URL>getter(), URL.class);
verify(ps).setURL(1, url);
verify(ps).setNull(2, Types.DATALINK);
}
@Test
public void testBigDecimal() throws Exception {
BigDecimal value = new BigDecimal("234.45");
newFieldMapperAndMapToPS(new ConstantGetter<Object, BigDecimal>(value), BigDecimal.class);
newFieldMapperAndMapToPS(NullGetter.< BigDecimal>getter(), BigDecimal.class);
verify(ps).setBigDecimal(1, value);
verify(ps).setNull(2, Types.NUMERIC);
}
@Test
public void testInputStream() throws Exception {
InputStream value = new ByteArrayInputStream(new byte[] { 1, 2, 3, 4 });
newFieldMapperAndMapToPS(new ConstantGetter<Object, InputStream>(value), InputStream.class);
newFieldMapperAndMapToPS(NullGetter.< InputStream>getter(), InputStream.class);
verify(ps).setBinaryStream(1, value);
verify(ps).setNull(2, Types.BINARY);
}
@Test
public void testBlob() throws Exception {
Blob value = mock(Blob.class);
newFieldMapperAndMapToPS(new ConstantGetter<Object, Blob>(value), Blob.class);
newFieldMapperAndMapToPS(NullGetter.< Blob>getter(), Blob.class);
verify(ps).setBlob(1, value);
verify(ps).setNull(2, Types.BINARY);
}
@Test
public void testBytes() throws Exception {
byte[] value = new byte[] { 1, 2, 3, 4 };
newFieldMapperAndMapToPS(new ConstantGetter<Object, byte[]>(value), byte[].class);
newFieldMapperAndMapToPS(NullGetter.< byte[]>getter(), byte[].class);
verify(ps).setBytes(1, value);
verify(ps).setNull(2, Types.BINARY);
}
@Test
public void testRef() throws Exception {
Ref value = mock(Ref.class);
newFieldMapperAndMapToPS(new ConstantGetter<Object, Ref>(value), Ref.class);
newFieldMapperAndMapToPS(NullGetter.< Ref>getter(), Ref.class);
verify(ps).setRef(1, value);
verify(ps).setNull(2, Types.REF);
}
@Test
public void testReader() throws Exception {
Reader value = mock(Reader.class);
newFieldMapperAndMapToPS(new ConstantGetter<Object, Reader>(value), Reader.class);
newFieldMapperAndMapToPS(NullGetter.< Reader>getter(), Reader.class);
verify(ps).setCharacterStream(1, value);
verify(ps).setNull(2, Types.VARCHAR);
}
@Test
public void testClob() throws Exception {
Clob value = mock(Clob.class);
newFieldMapperAndMapToPS(new ConstantGetter<Object, Clob>(value), Clob.class);
newFieldMapperAndMapToPS(NullGetter.< Clob>getter(), Clob.class);
verify(ps).setClob(1, value);
verify(ps).setNull(2, Types.CLOB);
}
@Test
public void testNClob() throws Exception {
NClob value = mock(NClob.class);
newFieldMapperAndMapToPS(new ConstantGetter<Object, NClob>(value), NClob.class);
newFieldMapperAndMapToPS(NullGetter.< NClob>getter(), NClob.class);
verify(ps).setNClob(1, value);
verify(ps).setNull(2, Types.NCLOB);
}
@Test
public void testRowId() throws Exception {
RowId value = mock(RowId.class);
newFieldMapperAndMapToPS(new ConstantGetter<Object, RowId>(value), RowId.class);
newFieldMapperAndMapToPS(NullGetter.< RowId>getter(), RowId.class);
verify(ps).setRowId(1, value);
verify(ps).setNull(2, Types.ROWID);
}
@Test
public void testSQLXML() throws Exception {
SQLXML value = mock(SQLXML.class);
newFieldMapperAndMapToPS(new ConstantGetter<Object, SQLXML>(value), SQLXML.class);
newFieldMapperAndMapToPS(NullGetter.< SQLXML>getter(), SQLXML.class);
verify(ps).setSQLXML(1, value);
verify(ps).setNull(2, Types.SQLXML);
}
@Test
public void testArray() throws Exception {
Array value = mock(Array.class);
newFieldMapperAndMapToPS(new ConstantGetter<Object, Array>(value), Array.class);
newFieldMapperAndMapToPS(NullGetter.< Array>getter(), Array.class);
verify(ps).setArray(1, value);
verify(ps).setNull(2, Types.ARRAY);
}
@Test
public void testSQLData() throws Exception {
ResultSetGetterFactoryTest.SQLDataImpl value = new ResultSetGetterFactoryTest.SQLDataImpl();
newFieldMapperAndMapToPS(new ConstantGetter<Object, ResultSetGetterFactoryTest.SQLDataImpl>(value), ResultSetGetterFactoryTest.SQLDataImpl.class);
newFieldMapperAndMapToPS(NullGetter.< ResultSetGetterFactoryTest.SQLDataImpl>getter(), ResultSetGetterFactoryTest.SQLDataImpl.class);
verify(ps).setObject(1, value);
verify(ps).setNull(2, Types.JAVA_OBJECT);
}
@Test
public void testJodaDateTime() throws Exception {
org.joda.time.DateTime value = new org.joda.time.DateTime();
newFieldMapperAndMapToPS(new ConstantGetter<Object, org.joda.time.DateTime>(value), org.joda.time.DateTime.class);
newFieldMapperAndMapToPS(NullGetter.< org.joda.time.DateTime>getter(), org.joda.time.DateTime.class);
verify(ps).setTimestamp(1, new Timestamp(value.getMillis()));
verify(ps).setNull(2, Types.TIMESTAMP);
}
@Test
public void testJodaLocalDateTime() throws Exception {
org.joda.time.LocalDateTime value = new org.joda.time.LocalDateTime();
DateTimeZone dateTimeZone = DateTimeZone.forTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
newFieldMapperAndMapToPS(new ConstantGetter<Object, org.joda.time.LocalDateTime>(value), org.joda.time.LocalDateTime.class, dateTimeZone);
newFieldMapperAndMapToPS(NullGetter.< org.joda.time.LocalDateTime>getter(), org.joda.time.LocalDateTime.class);
verify(ps).setTimestamp(1, new Timestamp(value.toDateTime(dateTimeZone).getMillis()));
verify(ps).setNull(2, Types.TIMESTAMP);
}
@Test
public void testJodaLocalTime() throws Exception {
org.joda.time.LocalTime value = new org.joda.time.LocalTime();
DateTimeZone dateTimeZone = DateTimeZone.forTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
newFieldMapperAndMapToPS(new ConstantGetter<Object, org.joda.time.LocalTime>(value), org.joda.time.LocalTime.class, dateTimeZone);
newFieldMapperAndMapToPS(NullGetter.< org.joda.time.LocalTime>getter(), org.joda.time.LocalTime.class);
verify(ps).setTime(1, new Time(value.toDateTimeToday(dateTimeZone).getMillis()));
verify(ps).setNull(2, Types.TIME);
}
@Test
public void testJodaLocaDate() throws Exception {
org.joda.time.LocalDate value = new org.joda.time.LocalDate();
DateTimeZone dateTimeZone = DateTimeZone.forTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
newFieldMapperAndMapToPS(new ConstantGetter<Object, org.joda.time.LocalDate>(value), org.joda.time.LocalDate.class, dateTimeZone);
newFieldMapperAndMapToPS(NullGetter.< org.joda.time.LocalDate>getter(), org.joda.time.LocalDate.class);
verify(ps).setDate(1, new java.sql.Date(value.toDate().getTime()));
verify(ps).setNull(2, Types.DATE);
}
@Test
public void testJodaInstant() throws Exception {
org.joda.time.Instant value = new org.joda.time.Instant();
newFieldMapperAndMapToPS(new ConstantGetter<Object, org.joda.time.Instant>(value), org.joda.time.Instant.class);
newFieldMapperAndMapToPS(NullGetter.< org.joda.time.Instant>getter(), org.joda.time.Instant.class);
verify(ps).setTimestamp(1, new java.sql.Timestamp(value.getMillis()));
verify(ps).setNull(2, Types.TIMESTAMP);
}
@Test
public void testUUIDString() throws Exception {
UUID uuid = UUID.randomUUID();
newFieldMapperAndMapToPS(new ConstantGetter<Object, UUID>(uuid), UUID.class);
newFieldMapperAndMapToPS(NullGetter.< UUID>getter(), UUID.class);
verify(ps).setString(1, uuid.toString());
verify(ps).setNull(2, Types.VARCHAR);
}
@Test
public void testUUIDBinary() throws Exception {
UUID uuid = UUID.randomUUID();
newFieldMapperAndMapToPS(new ConstantGetter<Object, UUID>(uuid), UUID.class, Types.BINARY, new Object[0]);
newFieldMapperAndMapToPS(NullGetter.< UUID>getter(), UUID.class, Types.BINARY, new Object[0]);
verify(ps).setBytes(1, UUIDHelper.toBytes(uuid));
verify(ps).setNull(2, Types.BINARY);
}
@Test
public void testCustomSetter() throws Exception {
Object o = new Object();
newFieldMapperAndMapToPS(new ConstantGetter<Object, Object>(o), Object.class, new SetterProperty(new Setter<PreparedStatement, Object>() {
@Override
public void set(PreparedStatement target, Object value) throws Exception {
ps.setString(35, "aa");
}
}));
verify(ps).setString(35, "aa");
}
@Test
public void testCustomSetterFactory() throws Exception {
Object o = new Object();
newFieldMapperAndMapToPS(new ConstantGetter<Object, Object>(o), Object.class,
new SetterFactoryProperty(new SetterFactory<PreparedStatement, PropertyMapping<?, ?, ?, ?>>() {
@Override
public <P> Setter<PreparedStatement, P> getSetter(PropertyMapping<?, ?, ?, ?> arg) {
return new Setter<PreparedStatement, P>() {
@Override
public void set(PreparedStatement target, P value) throws Exception {
ps.setString(36, "bb");
}
};
}
}));
verify(ps).setString(36, "bb");
}
//IFJAVA8_START
@Test
public void testJavaLocalDateTime() throws Exception {
java.time.LocalDateTime value = java.time.LocalDateTime.now();
java.time.ZoneId zoneId = ZoneId.of("America/Los_Angeles");
newFieldMapperAndMapToPS(new ConstantGetter<Object, java.time.LocalDateTime>(value), java.time.LocalDateTime.class, new JavaZoneIdProperty(zoneId));
newFieldMapperAndMapToPS(NullGetter.< java.time.LocalDateTime>getter(), java.time.LocalDateTime.class);
verify(ps).setTimestamp(1, new Timestamp(value.atZone(zoneId).toInstant().toEpochMilli()));
verify(ps).setNull(2, Types.TIMESTAMP);
}
@Test
public void testJavaLocalDate() throws Exception {
java.time.LocalDate value = java.time.LocalDate.now();
java.time.ZoneId zoneId = ZoneId.of("America/Los_Angeles");
newFieldMapperAndMapToPS(new ConstantGetter<Object, java.time.LocalDate>(value), java.time.LocalDate.class, new JavaZoneIdProperty(zoneId));
newFieldMapperAndMapToPS(NullGetter.< java.time.LocalDate>getter(), java.time.LocalDate.class);
verify(ps).setDate(1, new java.sql.Date(value.atStartOfDay(zoneId).toInstant().toEpochMilli()));
verify(ps).setNull(2, Types.DATE);
}
@Test
public void testJavaLocalTime() throws Exception {
java.time.LocalTime value = java.time.LocalTime.now();
java.time.ZoneId zoneId = ZoneId.of("America/Los_Angeles");
newFieldMapperAndMapToPS(new ConstantGetter<Object, java.time.LocalTime>(value), java.time.LocalTime.class, new JavaZoneIdProperty(zoneId));
newFieldMapperAndMapToPS(NullGetter.< java.time.LocalTime>getter(), java.time.LocalTime.class);
verify(ps).setTime(1, new Time(value.atDate(LocalDate.now()).atZone(zoneId).toInstant().toEpochMilli()));
verify(ps).setNull(2, Types.TIME);
}
@Test
public void testJavaZonedDateTime() throws Exception {
java.time.ZonedDateTime value = java.time.ZonedDateTime.now();
newFieldMapperAndMapToPS(new ConstantGetter<Object, java.time.ZonedDateTime>(value), java.time.ZonedDateTime.class);
newFieldMapperAndMapToPS(NullGetter.< java.time.ZonedDateTime>getter(), java.time.ZonedDateTime.class);
verify(ps).setTimestamp(1, new Timestamp(value.toInstant().toEpochMilli()));
verify(ps).setNull(2, Types.TIMESTAMP);
}
@Test
public void testJavaOffsetDateTime() throws Exception {
java.time.OffsetDateTime value = java.time.OffsetDateTime.now();
newFieldMapperAndMapToPS(new ConstantGetter<Object, java.time.OffsetDateTime>(value), java.time.OffsetDateTime.class);
newFieldMapperAndMapToPS(NullGetter.< java.time.OffsetDateTime>getter(), java.time.OffsetDateTime.class);
verify(ps).setTimestamp(1, new Timestamp(value.toInstant().toEpochMilli()));
verify(ps).setNull(2, Types.TIMESTAMP);
}
@Test
public void testJavaOffsetTime() throws Exception {
java.time.OffsetTime value = java.time.OffsetTime.now();
newFieldMapperAndMapToPS(new ConstantGetter<Object, java.time.OffsetTime>(value), java.time.OffsetTime.class);
newFieldMapperAndMapToPS(NullGetter.< java.time.OffsetTime>getter(), java.time.OffsetTime.class);
verify(ps).setTime(1, new Time(value.atDate(LocalDate.now()).toInstant().toEpochMilli()));
verify(ps).setNull(2, Types.TIME);
}
@Test
public void testJavaInstant() throws Exception {
java.time.Instant value = java.time.Instant.now();
newFieldMapperAndMapToPS(new ConstantGetter<Object, java.time.Instant>(value), java.time.Instant.class);
newFieldMapperAndMapToPS(NullGetter.< java.time.Instant>getter(), java.time.Instant.class);
verify(ps).setTimestamp(1, new Timestamp(value.toEpochMilli()));
verify(ps).setNull(2, Types.TIMESTAMP);
}
@Test
public void testJavaYearMonth() throws Exception {
java.time.YearMonth value = java.time.YearMonth.now();
java.time.ZoneId zoneId = ZoneId.of("America/Los_Angeles");
newFieldMapperAndMapToPS(new ConstantGetter<Object, java.time.YearMonth>(value), java.time.YearMonth.class, new JavaZoneIdProperty(zoneId));
newFieldMapperAndMapToPS(NullGetter.< java.time.YearMonth>getter(), java.time.YearMonth.class);
verify(ps).setDate(1, new java.sql.Date(value.atDay(1).atStartOfDay(zoneId).toInstant().toEpochMilli()));
verify(ps).setNull(2, Types.DATE);
}
@Test
public void testJavaYear() throws Exception {
java.time.Year value = java.time.Year.now();
java.time.ZoneId zoneId = ZoneId.of("America/Los_Angeles");
newFieldMapperAndMapToPS(new ConstantGetter<Object, java.time.Year>(value), java.time.Year.class, new JavaZoneIdProperty(zoneId));
newFieldMapperAndMapToPS(NullGetter.< java.time.Year>getter(), java.time.Year.class);
verify(ps).setDate(1, new java.sql.Date(value.atMonthDay(MonthDay.of(Month.JANUARY, 1)).atStartOfDay(zoneId).toInstant().toEpochMilli()));
verify(ps).setNull(2, Types.DATE);
}
//IFJAVA8_END
protected <T, P> void newFieldMapperAndMapToPS(Getter<T, P> getter, Class<P> clazz, Object... properties) throws Exception {
newFieldMapperAndMapToPS(getter, clazz, JdbcColumnKey.UNDEFINED_TYPE, properties);
}
protected <T, P> void newFieldMapperAndMapToPS(Getter<T, P> getter, Class<P> clazz, int sqlType, Object... properties) throws Exception {
PropertyMapping<T, P, JdbcColumnKey, FieldMapperColumnDefinition<JdbcColumnKey>> propertyMapping = newPropertyMapping(getter, clazz, sqlType, properties);
FieldMapper<T, PreparedStatement> fieldMapper = factory.<T, P>newFieldMapper(propertyMapping, null, RethrowMapperBuilderErrorHandler.INSTANCE);
fieldMapper.mapTo(null, ps, null);
}
@SuppressWarnings("unchecked")
private <T, P> PropertyMapping<T, P, JdbcColumnKey, FieldMapperColumnDefinition<JdbcColumnKey>> newPropertyMapping(Getter getter, Class<P> clazz, int sqltype, Object... properties) {
PropertyMeta<T, P> propertyMeta = mock(PropertyMeta.class);
when(propertyMeta.getGetter()).thenReturn(getter);
when(propertyMeta.getPropertyType()).thenReturn(clazz);
return
new PropertyMapping<T, P, JdbcColumnKey, FieldMapperColumnDefinition<JdbcColumnKey>>(
propertyMeta,
new JdbcColumnKey("col", index++, sqltype),
FieldMapperColumnDefinition.<JdbcColumnKey>of(properties));
}
}