blob: 97be47b693996f8027e53bf9a306e0bfa5c72ec4 [file] [log] [blame]
/*
* Copyright (c) 2020, 2021 Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2020 IBM Corporation. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// 05/11/2020-2.7.0 Jody Grassel
// - 538296: Wrong month is returned if OffsetDateTime is used in JPA 2.2 code
package org.eclipse.persistence.jpa.test.conversion;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Month;
import java.time.OffsetDateTime;
import java.time.OffsetTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.temporal.TemporalField;
import java.util.Calendar;
import java.util.Date;
import org.eclipse.persistence.exceptions.ConversionException;
import org.eclipse.persistence.internal.helper.ClassConstants;
import org.eclipse.persistence.internal.helper.ConversionManager;
import org.junit.Assert;
import org.junit.Test;
public class TestJavaTimeTypeConverter {
private ConversionManager cm = ConversionManager.getDefaultManager();
// LocalDate
@Test
public void timeConvertLocalDateToLocalDate() {
LocalDate src = LocalDate.of(2020, 1, 1);
LocalDate ld = cm.convertObject(src, ClassConstants.TIME_LDATE);
Assert.assertNotNull(ld);
Assert.assertEquals(src, ld);
Assert.assertEquals(Month.JANUARY, ld.getMonth());
Assert.assertEquals(1, ld.getDayOfMonth());
Assert.assertEquals(2020, ld.getYear());
}
@Test
public void timeConvertCalendarToLocalDate() {
Calendar cal = Calendar.getInstance();
cal.set(2020, 0, 1, 0, 0, 0);
LocalDate ld = cm.convertObject(cal, ClassConstants.TIME_LDATE);
Assert.assertNotNull(ld);
Assert.assertEquals(Month.JANUARY, ld.getMonth());
Assert.assertEquals(1, ld.getDayOfMonth());
Assert.assertEquals(2020, ld.getYear());
}
@Test
public void timeConvertUtilDateToLocalDate() throws ParseException {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date date = dateFormat.parse("2020-01-01 24:00:00.000");
Assert.assertEquals(2020 - 1900, date.getYear());
Assert.assertEquals(0, date.getMonth());
Assert.assertEquals(2, date.getDate());
LocalDate ld = cm.convertObject(date, ClassConstants.TIME_LDATE);
ZonedDateTime check = ZonedDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
Assert.assertNotNull(ld);
Assert.assertEquals(check.getYear(), ld.getYear());
Assert.assertEquals(check.getMonth(), ld.getMonth());
Assert.assertEquals(check.getDayOfMonth(), ld.getDayOfMonth());
Assert.assertEquals(2020, ld.getYear());
Assert.assertEquals(Month.JANUARY, ld.getMonth());
Assert.assertEquals(2, ld.getDayOfMonth());
}
@Test
public void timeConvertSqlDateToLocalDate() {
java.sql.Date date = java.sql.Date.valueOf("2020-01-01");
LocalDate ld = cm.convertObject(date, ClassConstants.TIME_LDATE);
Assert.assertNotNull(ld);
Assert.assertEquals(Month.JANUARY, ld.getMonth());
Assert.assertEquals(1, ld.getDayOfMonth());
Assert.assertEquals(2020, ld.getYear());
}
@Test
public void timeConvertSqlTimestampToLocalDate() {
java.sql.Timestamp ts = java.sql.Timestamp.valueOf("2020-01-01 01:00:00");
LocalDate ld = cm.convertObject(ts, ClassConstants.TIME_LDATE);
Assert.assertNotNull(ld);
Assert.assertEquals(Month.JANUARY, ld.getMonth());
Assert.assertEquals(1, ld.getDayOfMonth());
Assert.assertEquals(2020, ld.getYear());
}
@Test
public void timeConvertStringToLocalDate() {
String date = "2020-01-01T1:15:30";
LocalDate ld = cm.convertObject(date, ClassConstants.TIME_LDATE);
Assert.assertNotNull(ld);
Assert.assertEquals(Month.JANUARY, ld.getMonth());
Assert.assertEquals(1, ld.getDayOfMonth());
Assert.assertEquals(2020, ld.getYear());
}
@Test
public void timeConvertLongToLocalDate() {
long l = 18262; // 2020-01-01
LocalDate ld = cm.convertObject(l, ClassConstants.TIME_LDATE);
Assert.assertNotNull(ld);
Assert.assertEquals(Month.JANUARY, ld.getMonth());
Assert.assertEquals(1, ld.getDayOfMonth());
Assert.assertEquals(2020, ld.getYear());
}
@Test
public void timeConvertToLocalDateException() {
String date = "Bogus";
try {
cm.convertObject(date, ClassConstants.TIME_LDATE);
Assert.fail("Expected Exception was not thrown.");
} catch (ConversionException ce) {
// Expected
}
}
// LocalDateTime
@Test
public void timeConvertLocalDateTimeToLocalDateTime() {
LocalDateTime src = LocalDateTime.of(2020, 1, 1, 1, 0, 0);
LocalDateTime ld = cm.convertObject(src, ClassConstants.TIME_LDATETIME);
Assert.assertNotNull(ld);
Assert.assertEquals(src, ld);
Assert.assertEquals(Month.JANUARY, ld.getMonth());
Assert.assertEquals(1, ld.getDayOfMonth());
Assert.assertEquals(2020, ld.getYear());
Assert.assertEquals(1, ld.getHour());
Assert.assertEquals(0, ld.getMinute());
Assert.assertEquals(0, ld.getSecond());
}
@Test
public void timeConvertStringToLocalDateTime() {
String date = "2020-01-01T1:15:30";
LocalDateTime ld = cm.convertObject(date, ClassConstants.TIME_LDATETIME);
Assert.assertNotNull(ld);
Assert.assertEquals(Month.JANUARY, ld.getMonth());
Assert.assertEquals(1, ld.getDayOfMonth());
Assert.assertEquals(2020, ld.getYear());
Assert.assertEquals(1, ld.getHour());
Assert.assertEquals(15, ld.getMinute());
Assert.assertEquals(30, ld.getSecond());
}
@Test
public void timeConvertUtilDateToLocalDateTime() {
Calendar cal = Calendar.getInstance();
java.util.Date date = null;
LocalDateTime ldt = null;
cal.set(2020, 0, 1, 2, 15, 30);
date = cal.getTime();
ldt = cm.convertObject(date, ClassConstants.TIME_LDATETIME);
Assert.assertNotNull(ldt);
Assert.assertEquals(Month.JANUARY, ldt.getMonth());
Assert.assertEquals(1, ldt.getDayOfMonth());
Assert.assertEquals(2020, ldt.getYear());
Assert.assertEquals(2, ldt.getHour());
Assert.assertEquals(15, ldt.getMinute());
Assert.assertEquals(30, ldt.getSecond());
}
@Test
public void timeConvertCalendarToLocalDateTime() {
Calendar cal = Calendar.getInstance();
cal.set(2020, 0, 1, 2, 15, 30);
LocalDateTime ldt = cm.convertObject(cal, ClassConstants.TIME_LDATETIME);
Assert.assertNotNull(ldt);
Assert.assertEquals(Month.JANUARY, ldt.getMonth());
Assert.assertEquals(1, ldt.getDayOfMonth());
Assert.assertEquals(2020, ldt.getYear());
Assert.assertEquals(2, ldt.getHour());
Assert.assertEquals(15, ldt.getMinute());
Assert.assertEquals(30, ldt.getSecond());
}
@Test
public void timeConvertLongToLocalDateTime() {
long l = 18262 * (60 * 60 * 24); // 2020-01-01
LocalDateTime ldt = cm.convertObject(l, ClassConstants.TIME_LDATETIME);
Assert.assertNotNull(ldt);
Assert.assertEquals(Month.JANUARY, ldt.getMonth());
Assert.assertEquals(1, ldt.getDayOfMonth());
Assert.assertEquals(2020, ldt.getYear());
}
@Test
public void timeConvertToLocalDateTimeException() {
String date = "Bogus";
try {
cm.convertObject(date, ClassConstants.TIME_LDATETIME);
Assert.fail("Expected Exception was not thrown.");
} catch (ConversionException ce) {
// Expected
}
}
// LocalTime
@Test
public void timeConvertLocalTimeToLocalTime() {
LocalTime src = LocalTime.of(1, 15, 30);
LocalTime ld = cm.convertObject(src, ClassConstants.TIME_LTIME);
Assert.assertNotNull(ld);
Assert.assertEquals(src, ld);
Assert.assertEquals(1, ld.getHour());
Assert.assertEquals(15, ld.getMinute());
Assert.assertEquals(30, ld.getSecond());
}
@Test
public void timeConvertStringToLocalTime() {
String date = "T1:15:30";
LocalTime ld = cm.convertObject(date, ClassConstants.TIME_LTIME);
Assert.assertNotNull(ld);
Assert.assertEquals(1, ld.getHour());
Assert.assertEquals(15, ld.getMinute());
Assert.assertEquals(30, ld.getSecond());
}
@Test
public void timeConvertTimestampToLocalTime() {
java.sql.Timestamp ts = java.sql.Timestamp.valueOf("2020-01-01 01:15:30");
LocalTime ld = cm.convertObject(ts, ClassConstants.TIME_LTIME);
Assert.assertNotNull(ld);
Assert.assertEquals(1, ld.getHour());
Assert.assertEquals(15, ld.getMinute());
Assert.assertEquals(30, ld.getSecond());
}
@Test
public void timeConvertTimeToLocalTime() {
java.sql.Time ts = java.sql.Time.valueOf("01:15:30");
LocalTime ld = cm.convertObject(ts, ClassConstants.TIME_LTIME);
Assert.assertNotNull(ld);
Assert.assertEquals(1, ld.getHour());
Assert.assertEquals(15, ld.getMinute());
Assert.assertEquals(30, ld.getSecond());
}
@Test
public void timeConvertUtilDateToLocalTime() {
Calendar cal = Calendar.getInstance();
java.util.Date date = null;
LocalTime ld = null;
cal.set(2020, 0, 1, 2, 15, 30);
date = cal.getTime();
ld = cm.convertObject(date, ClassConstants.TIME_LTIME);
Assert.assertNotNull(ld);
Assert.assertEquals(2, ld.getHour());
Assert.assertEquals(15, ld.getMinute());
Assert.assertEquals(30, ld.getSecond());
}
@Test
public void convertLongToLocalTime() {
long sod = 60*60 + 60*15 + 30;
LocalTime ld = cm.convertObject(sod, ClassConstants.TIME_LTIME);
Assert.assertNotNull(ld);
Assert.assertEquals(1, ld.getHour());
Assert.assertEquals(15, ld.getMinute());
Assert.assertEquals(30, ld.getSecond());
}
@Test
public void timeConvertToLocalTimeException() {
String date = "Bogus";
try {
cm.convertObject(date, ClassConstants.TIME_LTIME);
Assert.fail("Expected Exception was not thrown.");
} catch (ConversionException ce) {
// Expected
}
}
// OffsetDateTime
@Test
public void timeConvertCalendarToOffsetDateTime() {
Calendar cal = Calendar.getInstance();
cal.set(2020, 0, 1, 0, 0, 0);
OffsetDateTime odt = cm.convertObject(cal, ClassConstants.TIME_ODATETIME);
Assert.assertNotNull(odt);
Assert.assertEquals(Month.JANUARY, odt.getMonth());
Assert.assertEquals(1, odt.getDayOfMonth());
Assert.assertEquals(2020, odt.getYear());
}
@Test
public void timeConvertUtilDateToOffsetDateTime() {
Calendar cal = Calendar.getInstance();
java.util.Date date = null;
OffsetDateTime odt = null;
cal.set(2020, 0, 1, 0, 0, 0);
date = cal.getTime();
odt = cm.convertObject(date, ClassConstants.TIME_ODATETIME);
Assert.assertNotNull(odt);
Assert.assertEquals(Month.JANUARY, odt.getMonth());
Assert.assertEquals(1, odt.getDayOfMonth());
Assert.assertEquals(2020, odt.getYear());
}
@Test
public void timeConvertStringToOffsetDateTime() {
String date = "2020-01-01T1:15:30";
OffsetDateTime odt = null;
odt = cm.convertObject(date, ClassConstants.TIME_ODATETIME);
Assert.assertNotNull(odt);
Assert.assertEquals(Month.JANUARY, odt.getMonth());
Assert.assertEquals(1, odt.getDayOfMonth());
Assert.assertEquals(2020, odt.getYear());
Assert.assertEquals(1, odt.getHour());
Assert.assertEquals(15, odt.getMinute());
Assert.assertEquals(30, odt.getSecond());
}
@Test
public void timeConvertOffsetDateTimeToOffsetDateTime() {
OffsetDateTime original = OffsetDateTime.of(2020, 1, 1, 1, 15, 30, 0, ZoneOffset.UTC);
OffsetDateTime odt = null;
odt = cm.convertObject(original, ClassConstants.TIME_ODATETIME);
Assert.assertNotNull(odt);
Assert.assertSame(original, odt);
Assert.assertEquals(Month.JANUARY, odt.getMonth());
Assert.assertEquals(1, odt.getDayOfMonth());
Assert.assertEquals(2020, odt.getYear());
Assert.assertEquals(1, odt.getHour());
Assert.assertEquals(15, odt.getMinute());
Assert.assertEquals(30, odt.getSecond());
}
@Test
public void timeConvertToOffsetDateTimeException() {
String date = "Bogus";
try {
cm.convertObject(date, ClassConstants.TIME_ODATETIME);
Assert.fail("Expected Exception was not thrown.");
} catch (ConversionException ce) {
// Expected
}
}
// OffSetTime
@Test
public void timeConvertOffsetTimeToOffsetTime() {
OffsetTime original = OffsetTime.of(1, 15, 30, 0, ZoneOffset.UTC);
OffsetTime odt = null;
odt = cm.convertObject(original, ClassConstants.TIME_OTIME);
Assert.assertNotNull(odt);
Assert.assertSame(original, odt);
Assert.assertEquals(1, odt.getHour());
Assert.assertEquals(15, odt.getMinute());
Assert.assertEquals(30, odt.getSecond());
}
@Test
public void timeConvertStringToOffsetTime() {
String date = "T1:15:30";
OffsetTime odt = null;
odt = cm.convertObject(date, ClassConstants.TIME_OTIME);
Assert.assertNotNull(odt);
Assert.assertEquals(1, odt.getHour());
Assert.assertEquals(15, odt.getMinute());
Assert.assertEquals(30, odt.getSecond());
}
@Test
public void timeConvertUtilDateToOffsetTime() {
Calendar cal = Calendar.getInstance();
java.util.Date date = null;
OffsetTime odt = null;
cal.set(2020, 0, 1, 1, 15, 30);
date = cal.getTime();
odt = cm.convertObject(date, ClassConstants.TIME_OTIME);
Assert.assertNotNull(odt);
Assert.assertEquals(1, odt.getHour());
Assert.assertEquals(15, odt.getMinute());
Assert.assertEquals(30, odt.getSecond());
}
@Test
public void timeConvertCalendarToOffsetTime() {
Calendar cal = Calendar.getInstance();
cal.set(2020, 0, 1, 1, 15, 30);
OffsetTime odt = cm.convertObject(cal, ClassConstants.TIME_OTIME);
Assert.assertNotNull(odt);
Assert.assertEquals(1, odt.getHour());
Assert.assertEquals(15, odt.getMinute());
Assert.assertEquals(30, odt.getSecond());
}
@Test
public void testConvertLongToOffsetTime() {
long l = 18262 * (60 * 60 * 24) + (60*60 + 60*15 + 30); // 2020-01-01 T01:15:30
OffsetTime ldt = cm.convertObject(l, ClassConstants.TIME_OTIME);
Assert.assertNotNull(ldt);
Assert.assertEquals(1, ldt.getHour());
Assert.assertEquals(15, ldt.getMinute());
Assert.assertEquals(30, ldt.getSecond());
}
@Test
public void timeConvertToOffsetTimeException() {
String date = "Bogus";
try {
cm.convertObject(date, ClassConstants.TIME_OTIME);
Assert.fail("Expected Exception was not thrown.");
} catch (ConversionException ce) {
// Expected
}
}
}