DBZ-91 Added a unit test for temporal conversions
Also removed a non-unit-test test.
This commit is contained in:
parent
ba553c91e8
commit
6b591fc9b0
@ -107,8 +107,18 @@ protected static LocalDateTime toLocalDateTime(Object obj) {
|
||||
if ( obj instanceof LocalDateTime) {
|
||||
return (LocalDateTime)obj;
|
||||
}
|
||||
if ( obj instanceof LocalDate) {
|
||||
LocalDate date = (LocalDate)obj;
|
||||
return LocalDateTime.of(date, LocalTime.MIDNIGHT);
|
||||
}
|
||||
if ( obj instanceof LocalTime) {
|
||||
LocalTime time = (LocalTime)obj;
|
||||
return LocalDateTime.of(EPOCH, time);
|
||||
}
|
||||
if ( obj instanceof java.sql.Date) {
|
||||
throw new IllegalArgumentException("Unable to convert to LocalDate from a java.sql.Date value '" + obj + "'");
|
||||
java.sql.Date sqlDate = (java.sql.Date)obj;
|
||||
LocalDate date = sqlDate.toLocalDate();
|
||||
return LocalDateTime.of(date, LocalTime.MIDNIGHT);
|
||||
}
|
||||
if ( obj instanceof java.sql.Time) {
|
||||
LocalTime localTime = toLocalTime(obj);
|
||||
|
@ -0,0 +1,178 @@
|
||||
/*
|
||||
* Copyright Debezium Authors.
|
||||
*
|
||||
* Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package io.debezium.time;
|
||||
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.fest.assertions.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* @author Randall Hauch
|
||||
*
|
||||
*/
|
||||
public class ConversionsTest {
|
||||
|
||||
@Test
|
||||
public void shouldReturnNullIfNullIsSupplied() {
|
||||
assertThat(Conversions.toLocalDate(null)).isNull();
|
||||
assertThat(Conversions.toLocalDateTime(null)).isNull();
|
||||
assertThat(Conversions.toLocalTime(null)).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnSameLocalDateInstanceWhenConvertingToLocalDate() {
|
||||
LocalDate now = LocalDate.now();
|
||||
assertThat(Conversions.toLocalDate(now)).isSameAs(now);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnLocalDateInstanceWhenConvertingLocalDateTimeToLocalDate() {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
assertThat(Conversions.toLocalDate(now)).isEqualTo(now.toLocalDate());
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Test
|
||||
public void shouldReturnLocalDateInstanceWhenConvertingUtilDateToLocalDate() {
|
||||
LocalDate now = LocalDate.now();
|
||||
java.util.Date date = new java.util.Date(now.getYear()-1900,now.getMonthValue()-1,now.getDayOfMonth());
|
||||
assertThat(Conversions.toLocalDate(date)).isEqualTo(now);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Test
|
||||
public void shouldReturnLocalDateInstanceWhenConvertingSqlDateToLocalDate() {
|
||||
LocalDate now = LocalDate.now();
|
||||
java.sql.Date date = new java.sql.Date(now.getYear()-1900,now.getMonthValue()-1,now.getDayOfMonth());
|
||||
assertThat(Conversions.toLocalDate(date)).isEqualTo(now);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldThrowExceptionWhenConvertingSqlTimeToLocalDate() {
|
||||
java.sql.Time time = new java.sql.Time(1);
|
||||
try {
|
||||
Conversions.toLocalDate(time);
|
||||
fail("Should not accept java.sql.Time values");
|
||||
} catch ( IllegalArgumentException e ) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnLocalDateInstanceWhenConvertingLongToLocalDate() {
|
||||
LocalDate now = LocalDate.now();
|
||||
long epochDay = now.toEpochDay();
|
||||
assertThat(Conversions.toLocalDate(epochDay)).isEqualTo(now);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void shouldReturnSameLocalDateTimeInstanceWhenConvertingToLocalDateTime() {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
assertThat(Conversions.toLocalDateTime(now)).isSameAs(now);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnLocalDateTimeInstanceWhenConvertingLocalDateToLocalDateTime() {
|
||||
LocalDate now = LocalDate.now();
|
||||
assertThat(Conversions.toLocalDateTime(now)).isEqualTo(LocalDateTime.of(now, LocalTime.MIDNIGHT));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnLocalDateTimeInstanceWhenConvertingLocalTimeToLocalDateTime() {
|
||||
LocalTime now = LocalTime.now();
|
||||
assertThat(Conversions.toLocalDateTime(now)).isEqualTo(LocalDateTime.of(Conversions.EPOCH, now));
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Test
|
||||
public void shouldReturnLocalDateTimeInstanceWhenConvertingUtilTimeToLocalDateTime() {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
java.util.Date date = new java.util.Date(now.getYear()-1900,now.getMonthValue()-1,now.getDayOfMonth(),
|
||||
now.getHour(),now.getMinute(),now.getSecond()); // 0 nanos!
|
||||
assertThat(Conversions.toLocalDateTime(date)).isEqualTo(now.withNano(0));
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Test
|
||||
public void shouldReturnLocalDateTimeInstanceWhenConvertingSqlDateToLocalDateTime() {
|
||||
LocalDate now = LocalDate.now();
|
||||
java.sql.Date date = new java.sql.Date(now.getYear()-1900,now.getMonthValue()-1,now.getDayOfMonth());
|
||||
assertThat(Conversions.toLocalDateTime(date)).isEqualTo(LocalDateTime.of(now, LocalTime.MIDNIGHT));
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Test
|
||||
public void shouldReturnLocalDateTimeInstanceWhenConvertingSqlTimeToLocalDateTime() {
|
||||
LocalTime now = LocalTime.now();
|
||||
java.sql.Time time = new java.sql.Time(now.getHour(),now.getMinute(),now.getSecond()); // 0 nanos!
|
||||
assertThat(Conversions.toLocalDateTime(time)).isEqualTo(LocalDateTime.of(Conversions.EPOCH, now.withNano(0)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnLocalDateTimeInstanceWhenConvertingLongToLocalDateTime() {
|
||||
try {
|
||||
Conversions.toLocalDateTime(Long.valueOf(1));
|
||||
fail("Should not accept Long values");
|
||||
} catch ( IllegalArgumentException e ) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void shouldReturnSameLocalTimeInstanceWhenConvertingToLocalTime() {
|
||||
LocalTime now = LocalTime.now();
|
||||
assertThat(Conversions.toLocalTime(now)).isSameAs(now);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnLocalTimeInstanceWhenConvertingLocalDateTimeToLocalTime() {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
assertThat(Conversions.toLocalTime(now)).isEqualTo(now.toLocalTime());
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Test
|
||||
public void shouldReturnLocalTimeInstanceWhenConvertingUtilTimeToLocalTime() {
|
||||
LocalTime now = LocalTime.now();
|
||||
java.util.Date date = new java.util.Date(0,0,1,now.getHour(),now.getMinute(),now.getSecond()); // 0 nanos!
|
||||
assertThat(Conversions.toLocalTime(date)).isEqualTo(now.withNano(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldThrowExceptionWhenConvertingSqlDateToLocalTime() {
|
||||
java.sql.Date date = new java.sql.Date(1);
|
||||
try {
|
||||
Conversions.toLocalTime(date);
|
||||
fail("Should not accept java.sql.Date values");
|
||||
} catch ( IllegalArgumentException e ) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Test
|
||||
public void shouldReturnLocalTimeInstanceWhenConvertingSqlTimeToLocalTime() {
|
||||
LocalTime now = LocalTime.now();
|
||||
java.sql.Time time = new java.sql.Time(now.getHour(),now.getMinute(),now.getSecond()); // 0 nanos!
|
||||
assertThat(Conversions.toLocalTime(time)).isEqualTo(now.withNano(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnLocalTimeInstanceWhenConvertingLongToLocalTime() {
|
||||
LocalTime now = LocalTime.now();
|
||||
long nanoOfDay = now.toNanoOfDay();
|
||||
assertThat(Conversions.toLocalTime(nanoOfDay)).isEqualTo(now);
|
||||
}
|
||||
}
|
@ -1,73 +0,0 @@
|
||||
/*
|
||||
* Copyright Debezium Authors.
|
||||
*
|
||||
* Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package io.debezium.time;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.ZoneOffset;
|
||||
import java.time.ZonedDateTime;
|
||||
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* @author Randall Hauch
|
||||
*/
|
||||
@Ignore
|
||||
@SuppressWarnings("deprecation")
|
||||
public class TimeTest {
|
||||
|
||||
@Test
|
||||
public void test1() {
|
||||
java.util.Date dateNow = new java.util.Date();
|
||||
System.out.println("Date now: " + dateNow);
|
||||
System.out.println("Date now (year): " + dateNow.getYear());
|
||||
System.out.println("Date now (month): " + dateNow.getMonth()+1);
|
||||
System.out.println("Date now (day): " + dateNow.getDay());
|
||||
System.out.println("Date now (hour): " + dateNow.getHours());
|
||||
System.out.println("Date now (minute): " + dateNow.getMinutes());
|
||||
System.out.println("Date now (second): " + dateNow.getSeconds());
|
||||
System.out.println("Date now (nanosecond): " + 0);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test2() {
|
||||
java.util.Date dateNow = new java.util.Date();
|
||||
Instant dateInstant = dateNow.toInstant();
|
||||
System.out.println("Date now: " + dateNow);
|
||||
System.out.println("Instant from date now: " + dateInstant);
|
||||
|
||||
Instant a = Instant.now();
|
||||
LocalDateTime here = LocalDateTime.ofInstant(a, ZoneId.systemDefault());
|
||||
LocalDateTime there = LocalDateTime.ofInstant(a, ZoneOffset.UTC);
|
||||
Instant instantAtUtc = there.toInstant(ZoneOffset.UTC);
|
||||
int compared = here.compareTo(there);
|
||||
System.out.println("Instant: " + a);
|
||||
System.out.println("Here: " + here);
|
||||
System.out.println("UTC: " + there);
|
||||
System.out.println("Instant @ UTC: " + instantAtUtc);
|
||||
System.out.println("Compared: " + compared);
|
||||
System.out.println("Instant millis: " + a.toEpochMilli());
|
||||
|
||||
LocalDateTime nowHere = LocalDateTime.now();
|
||||
Instant nowInstantAtUtc = nowHere.toInstant(ZoneOffset.UTC);
|
||||
|
||||
System.out.println("LocalDateTime.now(): " + nowHere);
|
||||
System.out.println("Instant @ UTC " + nowInstantAtUtc);
|
||||
System.out.println("Instant @ UTC millis: " + nowInstantAtUtc.toEpochMilli());
|
||||
System.out.println("LocalDateTime epoch seconds @ UTC: " + nowHere.toEpochSecond(ZoneOffset.UTC));
|
||||
System.out.println("LocalDateTime nanoseconds @ UTC: " + nowHere.getNano());
|
||||
|
||||
ZonedDateTime zdt = ZonedDateTime.of(nowHere, ZoneOffset.UTC);
|
||||
System.out.println("ZoneDateTime @ UTC " + zdt);
|
||||
System.out.println("ZoneDateTime epoch seconds @ UTC: " + zdt.toEpochSecond());
|
||||
System.out.println("ZoneDateTime nanoseconds @ UTC: " + zdt.getNano());
|
||||
System.out.println("Instant from ZonedDateTime @ UTC: " + zdt.toInstant());
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user