|
22 | 22 | import java.sql.PreparedStatement;
|
23 | 23 | import java.sql.SQLException;
|
24 | 24 | import java.sql.Types;
|
| 25 | +import java.time.LocalDate; |
| 26 | +import java.time.LocalDateTime; |
| 27 | +import java.time.LocalTime; |
| 28 | +import java.time.ZoneOffset; |
25 | 29 | import java.util.GregorianCalendar;
|
| 30 | +import java.util.stream.Stream; |
26 | 31 |
|
27 | 32 | import org.junit.jupiter.api.Test;
|
| 33 | +import org.junit.jupiter.params.ParameterizedTest; |
| 34 | +import org.junit.jupiter.params.provider.Arguments; |
| 35 | +import org.junit.jupiter.params.provider.MethodSource; |
28 | 36 |
|
| 37 | +import static org.assertj.core.api.Assertions.assertThat; |
| 38 | +import static org.junit.jupiter.api.Named.named; |
29 | 39 | import static org.mockito.BDDMockito.given;
|
30 | 40 | import static org.mockito.Mockito.mock;
|
31 | 41 | import static org.mockito.Mockito.never;
|
@@ -203,6 +213,35 @@ public void testSetParameterValueWithCalendarAndUnknownType() throws SQLExceptio
|
203 | 213 | verify(preparedStatement).setTimestamp(1, new java.sql.Timestamp(cal.getTime().getTime()), cal);
|
204 | 214 | }
|
205 | 215 |
|
| 216 | + |
| 217 | + @ParameterizedTest |
| 218 | + @MethodSource("javaTimeTypes") |
| 219 | + public void testSetParameterValueWithJavaTimeTypes(Object o, int sqlType) throws SQLException { |
| 220 | + StatementCreatorUtils.setParameterValue(preparedStatement, 1, sqlType, null, o); |
| 221 | + verify(preparedStatement).setObject(1, o, sqlType); |
| 222 | + } |
| 223 | + |
| 224 | + @ParameterizedTest |
| 225 | + @MethodSource("javaTimeTypes") |
| 226 | + void javaTimeTypesToSqlParameterType(Object o, int expectedSqlType) { |
| 227 | + assertThat(StatementCreatorUtils.javaTypeToSqlParameterType(o.getClass())) |
| 228 | + .isEqualTo(expectedSqlType); |
| 229 | + } |
| 230 | + |
| 231 | + static Stream<Arguments> javaTimeTypes() { |
| 232 | + ZoneOffset PLUS_NINE = ZoneOffset.ofHours(9); |
| 233 | + final LocalDateTime now = LocalDateTime.now(); |
| 234 | + return Stream.of( |
| 235 | + Arguments.of(named("LocalTime", LocalTime.NOON), named("TIME", Types.TIME)), |
| 236 | + Arguments.of(named("LocalDate", LocalDate.EPOCH), named("DATE", Types.DATE)), |
| 237 | + Arguments.of(named("LocalDateTime", now), named("TIMESTAMP", Types.TIMESTAMP)), |
| 238 | + Arguments.of(named("OffsetTime", LocalTime.NOON.atOffset(PLUS_NINE)), |
| 239 | + named("TIME_WITH_TIMEZONE", Types.TIME_WITH_TIMEZONE)), |
| 240 | + Arguments.of(named("OffsetDateTime", now.atOffset(PLUS_NINE)), |
| 241 | + named("TIMESTAMP_WITH_TIMEZONE", Types.TIMESTAMP_WITH_TIMEZONE)) |
| 242 | + ); |
| 243 | + } |
| 244 | + |
206 | 245 | @Test // SPR-8571
|
207 | 246 | public void testSetParameterValueWithStringAndVendorSpecificType() throws SQLException {
|
208 | 247 | Connection con = mock();
|
|
0 commit comments