DBZ-91 Added a unit test for temporal conversions

Also removed a non-unit-test test.
This commit is contained in:
Randall Hauch 2016-08-15 10:29:16 -05:00
parent ba553c91e8
commit 6b591fc9b0
3 changed files with 189 additions and 74 deletions

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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());
}
}