package io.vertx.ext.jdbc.impl.actions; import io.vertx.core.json.JsonObject; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import java.sql.SQLException; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.UUID; import static java.time.format.DateTimeFormatter.*; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; @RunWith(Parameterized.class) public class SQLConvertTest { private JsonObject config = new JsonObject().put("castUUID", true); private JDBCStatementHelper helper = new JDBCStatementHelper(config); @Parameters(name = "{0}") public static Collection<Object[]> generateData() { List<Object[]> params = new ArrayList<>(); ZonedDateTime dateTime = ZonedDateTime.of(2016, 3, 16, 16, 0, 0, 0, ZoneId.of("Europe/Paris")); for (int i = 0; i < 4; i++) { int nanos = 123 * (i == 0 ? 0 : 1) * (int) Math.pow(1000, i > 1 ? i - 1 : 0); params.add(new Object[]{ISO_INSTANT.format(dateTime.withNano(nanos)), java.sql.Timestamp.class}); } params.add(new Object[]{ISO_LOCAL_TIME.format(dateTime.withSecond(1)), java.sql.Time.class}); params.add(new Object[]{dateTime.toLocalDate().toString(), java.sql.Date.class}); params.add(new Object[]{"f47ac10b-58cc-4372-a567-0e02b2c3d479", UUID.class}); return params; } private String value; private Class<?> expectedSqlType; public SQLConvertTest(String value, Class<?> expectedSqlType) { this.value = value; this.expectedSqlType = expectedSqlType; } @Test public void testSQLConvert() throws SQLException { Object cast = helper.optimisticCast(value); assertThat(cast, instanceOf(expectedSqlType)); Object convert = JDBCStatementHelper.convertSqlValue(cast); assertEquals(value, convert); } }