package io.ebeaninternal.server.type; import io.ebean.config.JsonConfig; import org.junit.Test; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.sql.Timestamp; import java.time.Instant; import static org.junit.Assert.*; public class ScalarTypeInstantTest { ScalarTypeInstant type = new ScalarTypeInstant(JsonConfig.DateTime.MILLIS); @Test public void testReadData() throws Exception { ByteArrayOutputStream os = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(os); Instant now = Instant.now(); type.writeData(out, now); type.writeData(out, null); out.flush(); out.close(); ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray()); ObjectInputStream in = new ObjectInputStream(is); Instant val1 = type.readData(in); Instant val2 = type.readData(in); assertEquals(now, val1); assertNull(val2); } @Test public void testToJdbcType() throws Exception { Instant now = Instant.now(); Timestamp timestamp = Timestamp.from(now); Object val1 = type.toJdbcType(now); Object val2 = type.toJdbcType(timestamp); assertEquals(timestamp, val1); assertEquals(timestamp, val2); } @Test public void testToBeanType() throws Exception { Instant now = Instant.now(); Instant val1 = type.toBeanType(now); Instant val2 = type.toBeanType(Timestamp.from(now)); assertEquals(now, val1); assertEquals(now, val2); } @Test public void testFormatValue() throws Exception { Instant now = Instant.now(); Timestamp timestamp = Timestamp.from(now); String formatted = type.formatValue(now); assertEquals("" + timestamp.getTime(), formatted); } @Test public void testParse_when_epochMillis() throws Exception { Instant now = Instant.now(); Timestamp timestamp = Timestamp.from(now); Instant val1 = type.parse("" + timestamp.getTime()); assertEquals(now, val1); } @Test public void testParse_when_timestampForm() throws Exception { Instant now = Instant.now(); Timestamp timestamp = Timestamp.from(now); Instant val1 = type.parse(timestamp.toString()); assertEquals(now, val1); } @Test public void testFormatAndParse() throws Exception { Instant now = Instant.now(); String format = type.format(now); Instant val1 = type.parse(format); assertEquals(now, val1); } @Test public void testIsDateTimeCapable() throws Exception { assertTrue(type.isDateTimeCapable()); } @Test public void testConvertFromMillis() throws Exception { Instant now = Instant.now(); Instant val = type.convertFromMillis(now.toEpochMilli()); assertEquals(now, val); } @Test public void testJsonRead() throws Exception { Instant now = Instant.now(); JsonTester jsonTester = new JsonTester(type); jsonTester.test(now); ScalarTypeInstant typeNanos = new ScalarTypeInstant(JsonConfig.DateTime.NANOS); jsonTester = new JsonTester(typeNanos); jsonTester.test(now); ScalarTypeInstant typeIso = new ScalarTypeInstant(JsonConfig.DateTime.ISO8601); jsonTester = new JsonTester(typeIso); jsonTester.test(now); } }