blob: ddcbc65722c3eb91222869db2e9547a3fa9db80e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.commons.core.edm.primitivetype;
import static org.junit.Assert.assertEquals;
import java.sql.Time;
import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import java.util.Calendar;
import java.util.TimeZone;
import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
import org.junit.Test;
public class EdmTimeOfDayTest extends PrimitiveTypeBaseTest {
private final EdmPrimitiveType instance = EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.TimeOfDay);
@Test
public void toUriLiteral() throws Exception {
assertEquals("11:12", instance.toUriLiteral("11:12"));
assertEquals("11:12:13.012", instance.toUriLiteral("11:12:13.012"));
}
@Test
public void fromUriLiteral() throws Exception {
assertEquals("11:12", instance.fromUriLiteral("11:12"));
assertEquals("11:12:13.012", instance.fromUriLiteral("11:12:13.012"));
}
@Test
public void valueToString() throws Exception {
Calendar dateTime = Calendar.getInstance();
dateTime.clear();
setTimeZone(dateTime, "GMT+11:30");
dateTime.set(1, 2, 3, 4, 5, 6);
assertEquals("04:05:06", instance.valueToString(dateTime, null, null, null, null, null));
dateTime.add(Calendar.MILLISECOND, 42);
assertEquals("04:05:06.042", instance.valueToString(dateTime, null, null, null, null, null));
assertEquals("04:05:06.042", instance.valueToString(dateTime, null, null, 3, null, null));
assertEquals("04:05:06.042", instance.valueToString(dateTime, null, null, 4, null, null));
Calendar dateTime2 = Calendar.getInstance();
dateTime2.clear();
setTimeZone(dateTime, TimeZone.getDefault());
dateTime2.set(Calendar.HOUR, 5);
dateTime2.set(Calendar.MINUTE, 59);
dateTime2.set(Calendar.SECOND, 23);
final java.sql.Time time = new java.sql.Time(dateTime2.getTimeInMillis());
assertEquals("05:59:23", instance.valueToString(time, null, null, null, null, null));
assertEquals("05:59:23", instance.valueToString(dateTime2.getTimeInMillis(), null, null, null, null, null));
// Timestamp timestamp = new Timestamp(0);
// timestamp.setNanos(42);
expectTypeErrorInValueToString(instance, 0);
}
@Test
public void valueToStringFromJavaUtilDate() throws Exception {
LocalTime time = LocalTime.parse("04:05:06");
ZonedDateTime zdt = ZonedDateTime.of(LocalDate.ofEpochDay(0), time, ZoneId.systemDefault());
long millis = zdt.toInstant().toEpochMilli();
java.util.Date javaUtilDate = new java.util.Date(millis);
assertEquals("04:05:06", instance.valueToString(javaUtilDate, null, null, null, null, null));
java.sql.Timestamp javaSqlTimestamp = new java.sql.Timestamp(millis);
assertEquals("04:05:06", instance.valueToString(javaSqlTimestamp, null, null, null, null, null));
}
@Test
public void valueToStringFromLocalTime() throws Exception {
LocalTime time = LocalTime.parse("04:05:06");
assertEquals("04:05:06", instance.valueToString(time, null, null, null, null, null));
}
@Test
public void valueToStringFromJavaSqlTime() throws Exception {
java.sql.Time time = java.sql.Time.valueOf("04:05:06");
assertEquals("04:05:06", instance.valueToString(time, null, null, null, null, null));
}
@Test
public void valueOfString() throws Exception {
Calendar dateTime = Calendar.getInstance();
dateTime.clear();
assertEqualCalendar(dateTime, instance.valueOfString("00:00", null, null, null, null, null, Calendar.class));
assertEqualCalendar(dateTime, instance.valueOfString("00:00:00", null, null, null, null, null, Calendar.class));
assertEqualCalendar(dateTime,
instance.valueOfString("00:00:00.000000000", null, null, null, null, null, Calendar.class));
final Time timeValue = instance.valueOfString("00:00:00.999", null, null, 3, null, null, Time.class);
assertEquals(dateTime.getTimeInMillis(), timeValue.getTime());
dateTime.set(Calendar.MILLISECOND, 999);
assertEqualCalendar(dateTime,
instance.valueOfString("00:00:00.999", null, null, 3, null, null, Calendar.class));
assertEqualCalendar(dateTime,
instance.valueOfString("00:00:00.999", null, null, 3, null, null, Calendar.class));
assertEquals(Long.valueOf(dateTime.getTimeInMillis()),
instance.valueOfString("00:00:00.999", null, null, 3, null, null, Long.class));
final Timestamp timestamp = instance.valueOfString("00:00:00.999888777", null, null, 9, null, null,
Timestamp.class);
assertEquals(dateTime.getTimeInMillis(), timestamp.getTime());
assertEquals(999888777, timestamp.getNanos());
// expectUnconvertibleErrorInValueOfString(instance, "11:12:13.1234", Calendar.class);
// expectUnconvertibleErrorInValueOfString(instance, "11:12:13.0123456789", Timestamp.class);
expectContentErrorInValueOfString(instance, "24:32:02");
expectContentErrorInValueOfString(instance, "011:12:13");
expectContentErrorInValueOfString(instance, "11:12:13:14");
expectContentErrorInValueOfString(instance, "111213");
expectContentErrorInValueOfString(instance, "1:2:3");
expectContentErrorInValueOfString(instance, "11:12:13.0.1");
// expectContentErrorInValueOfString(instance, "11:12:13.");
expectContentErrorInValueOfString(instance, "11:12:13.0000000000000");
expectTypeErrorInValueOfString(instance, "11:12:13");
}
@Test
public void valueOfStringToLocalTime() throws Exception {
LocalTime time = LocalTime.parse("04:05:06");
assertEquals(time, instance.valueOfString("04:05:06", null, null, null, null, null, LocalTime.class));
time = time.plus(123, ChronoUnit.MILLIS);
assertEquals(time, instance.valueOfString("04:05:06.123", null, null, null, null, null, LocalTime.class));
time = time.plus(456789, ChronoUnit.NANOS);
assertEquals(time, instance.valueOfString("04:05:06.123456789", null, null, null, null, null, LocalTime.class));
}
@Test
public void valueOfStringToJavaSqlTime() throws Exception {
java.sql.Time time = java.sql.Time.valueOf("04:05:06");
assertEquals(time, instance.valueOfString("04:05:06", null, null, null, null, null, java.sql.Time.class));
}
@Test
public void valueOfStringToJavaUtilDateTime() throws Exception {
LocalTime time = LocalTime.parse("04:05:06");
ZonedDateTime zdt = ZonedDateTime.of(LocalDate.ofEpochDay(0), time, ZoneId.systemDefault());
long millis = zdt.toInstant().toEpochMilli();
java.util.Date javaUtilDate = new java.util.Date(millis);
assertEquals(javaUtilDate, instance.valueOfString("04:05:06", null, null, null, null, null, java.util.Date.class));
}
@Test
public void testRoundTripTime() throws Exception {
java.sql.Time time = instance.valueOfString("04:05:06.002", true, 4000, 3, 0, true, java.sql.Time.class);
String val = instance.valueToString(time, true, 4000, 3, 0, true);
assertEquals("04:05:06", val);
}
@Test
public void tests() throws Exception {
instance.validate("12:34:55", null, null, null, null, null);
}
}