/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.runtime.core.el.datetime;
import static java.util.Calendar.DATE;
import static java.util.Calendar.DAY_OF_MONTH;
import static java.util.Calendar.DAY_OF_WEEK;
import static java.util.Calendar.DAY_OF_YEAR;
import static java.util.Calendar.HOUR_OF_DAY;
import static java.util.Calendar.MINUTE;
import static java.util.Calendar.MONTH;
import static java.util.Calendar.SECOND;
import static java.util.Calendar.WEEK_OF_MONTH;
import static java.util.Calendar.WEEK_OF_YEAR;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.mule.runtime.api.store.ObjectStore;
import org.mule.tck.junit4.AbstractMuleContextTestCase;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.TimeZone;
import javax.xml.bind.DatatypeConverter;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import org.junit.Test;
public class DateTimeTestCase extends AbstractMuleContextTestCase {
private Calendar currentCalendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
private DateTime now = new DateTime(currentCalendar).withTimeZone("UTC");
@Test
public void milliSeconds() {
assertTrue(now.getMilliSeconds() < 1000);
}
@Test
public void isBefore() {
Calendar cal = Calendar.getInstance();
cal.add(DATE, 1);
assertTrue(now.isBefore(new DateTime(cal)));
}
@Test
public void isAfter() {
Calendar cal = Calendar.getInstance();
cal.add(DATE, -1);
assertTrue(now.isAfter(new DateTime(cal)));
}
@Test
public void format() {
SimpleDateFormat df = new SimpleDateFormat("EEE, MMM d, yyyy");
df.setTimeZone(TimeZone.getTimeZone("UTC"));
assertEquals(df.format(now.toDate()), now.format("EEE, MMM d, yyyy"));
}
@Test
public void timeZone() {
assertEquals(TimeZone.getTimeZone("UTC").getDisplayName(), now.getTimeZone());
}
@Test
public void plusSeconds() {
assertEquals((currentCalendar.get(SECOND) + 1) % 60, now.plusSeconds(1).getSeconds());
}
@Test
public void plusMinutes() {
assertEquals((now.getMinutes() + 1) % 60, now.plusMinutes(1).getMinutes());
}
@Test
public void plusHours() {
assertEquals((now.getHours() + 1) % 24, now.plusHours(1).getHours());
}
@Test
public void plusDays() {
assertEquals((now.getDayOfYear() % currentCalendar.getActualMaximum(DAY_OF_YEAR)) + 1, now.plusDays(1).getDayOfYear());
}
@Test
public void plusWeeks() {
assertEquals((now.getWeekOfYear() % currentCalendar.getWeeksInWeekYear()) + 1, now.plusWeeks(1).getWeekOfYear());
}
@Test
public void plusMonths() {
assertEquals((now.getMonth() % 12) + 1, now.plusMonths(1).getMonth());
}
@Test
public void plusYears() {
assertEquals(now.getYear() + 1, now.plusYears(1).getYear());
}
@Test
public void withTimeZone() {
int hour = now.getHours();
assertEquals(hour, now.withTimeZone("GMT-03:00").getHours());
}
@Test
public void changeTimeZone() {
int hour = now.getHours();
assertEquals((hour + 24 - 3) % 24, now.changeTimeZone("GMT-03:00").getHours());
}
@Test
public void withLocale() {
SimpleDateFormat df = new SimpleDateFormat("E", Locale.US);
df.setTimeZone(TimeZone.getTimeZone("UTC"));
assertEquals(df.format(new Date()), now.withLocale("en_US").format("E"));
}
@Test
public void seconds() {
assertEquals(currentCalendar.get(SECOND), now.getSeconds());
}
@Test
public void minutes() {
assertEquals(currentCalendar.get(MINUTE), now.getMinutes());
}
@Test
public void hourOfDay() {
assertEquals(currentCalendar.get(HOUR_OF_DAY), now.getHours());
}
@Test
public void dayOfWeek() {
assertEquals(currentCalendar.get(DAY_OF_WEEK), now.getDayOfWeek());
}
@Test
public void dayOfMonth() {
assertEquals(currentCalendar.get(DAY_OF_MONTH), now.getDayOfMonth());
}
@Test
public void dayOfYear() {
assertEquals(currentCalendar.get(DAY_OF_YEAR), now.getDayOfYear());
}
@Test
public void weekOfMonth() {
assertEquals(currentCalendar.get(WEEK_OF_MONTH), now.getWeekOfMonth());
}
@Test
public void weekOfYear() {
assertEquals(currentCalendar.get(WEEK_OF_YEAR), now.getWeekOfYear());
}
@Test
public void monthOfYear() {
assertEquals(currentCalendar.get(MONTH) + 1, now.getMonth());
}
@Test
public void testToString() {
assertEquals(DatatypeConverter.printDateTime(currentCalendar).substring(0, 18), now.toString().substring(0, 18));
}
@Test
public void toDate() {
assertEquals(Date.class, now.toDate().getClass());
}
@Test
public void toCalendar() {
assertEquals(GregorianCalendar.class, now.toCalendar().getClass());
}
@Test
public void toXMLCalendar() throws DatatypeConfigurationException {
assertTrue(now.toXMLCalendar() instanceof XMLGregorianCalendar);
}
@Test
public void fromDate() {
Date date = new Date();
date.setYear(0);
date.setMonth(0);
date.setDate(1);
assertEquals(1900, new DateTime(date).getYear());
assertEquals(1, new DateTime(date).getMonth());
assertEquals(1, new DateTime(date).getDayOfMonth());
}
@Test
public void fromCalendar() {
Calendar cal = new GregorianCalendar();
cal.set(Calendar.YEAR, 1900);
cal.set(MONTH, 0);
cal.set(DAY_OF_MONTH, 1);
assertEquals(1900, new DateTime(cal).getYear());
assertEquals(1, new DateTime(cal).getMonth());
assertEquals(1, new DateTime(cal).getDayOfMonth());
}
@Test
public void fromXMLCalendar() throws DatatypeConfigurationException {
XMLGregorianCalendar xmlCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar());
xmlCal.setYear(1900);
xmlCal.setMonth(1);
xmlCal.setDay(1);
assertEquals(1900, new DateTime(xmlCal).getYear());
assertEquals(1, new DateTime(xmlCal).getMonth());
assertEquals(1, new DateTime(xmlCal).getDayOfMonth());
}
@Test
public void serialization() throws Exception {
final String key = "key";
ObjectStore<DateTime> os = muleContext.getObjectStoreManager().getObjectStore("DateTimeTestCase", true);
try {
os.store(key, now);
DateTime recovered = os.retrieve(key);
assertEquals(now, recovered);
} finally {
os.clear();
}
}
}