/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.calendar.util; import com.liferay.calendar.recurrence.Recurrence; import com.liferay.calendar.recurrence.RecurrenceSerializer; import com.liferay.calendar.recurrence.Weekday; import com.liferay.portal.kernel.util.CalendarFactoryUtil; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.util.CalendarFactoryImpl; import java.util.Calendar; import java.util.List; import java.util.TimeZone; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; /** * @author Adam Brandizzi */ public class RecurrenceUtilTest { @BeforeClass public static void setUpClass() { CalendarFactoryUtil calendarFactoryUtil = new CalendarFactoryUtil(); calendarFactoryUtil.setCalendarFactory(new CalendarFactoryImpl()); } @Test public void testInTimeZoneNullRecurrence() { Calendar startTimeJCalendar = JCalendarUtil.getJCalendar( 2015, Calendar.DECEMBER, 11, 1, 0, 0, 0, _utcTimeZone); Recurrence recurrence = RecurrenceUtil.inTimeZone( null, startTimeJCalendar, _losAngelesTimeZone); Assert.assertNull(recurrence); } @Test public void testInTimeZoneUpdatesExceptionJCalendars() { Recurrence recurrence = RecurrenceSerializer.deserialize( "RRULE:FREQ=DAILY;INTERVAL=1\n" + "EXDATE;TZID=\"UTC\";VALUE=DATE:20151225,20151231", _utcTimeZone); List<Calendar> exceptionJCalendars = recurrence.getExceptionJCalendars(); Calendar exceptionJCalendar = exceptionJCalendars.get(0); Assert.assertEquals(2015, exceptionJCalendar.get(Calendar.YEAR)); Assert.assertEquals( Calendar.DECEMBER, exceptionJCalendar.get(Calendar.MONTH)); Assert.assertEquals(25, exceptionJCalendar.get(Calendar.DAY_OF_MONTH)); exceptionJCalendar = exceptionJCalendars.get(1); Assert.assertEquals(2015, exceptionJCalendar.get(Calendar.YEAR)); Assert.assertEquals( Calendar.DECEMBER, exceptionJCalendar.get(Calendar.MONTH)); Assert.assertEquals(31, exceptionJCalendar.get(Calendar.DAY_OF_MONTH)); Calendar startTimeJCalendar = JCalendarUtil.getJCalendar( 2015, Calendar.DECEMBER, 11, 1, 0, 0, 0, _utcTimeZone); recurrence = RecurrenceUtil.inTimeZone( recurrence, startTimeJCalendar, _losAngelesTimeZone); exceptionJCalendars = recurrence.getExceptionJCalendars(); exceptionJCalendar = exceptionJCalendars.get(0); Assert.assertEquals(2015, exceptionJCalendar.get(Calendar.YEAR)); Assert.assertEquals( Calendar.DECEMBER, exceptionJCalendar.get(Calendar.MONTH)); Assert.assertEquals(24, exceptionJCalendar.get(Calendar.DAY_OF_MONTH)); exceptionJCalendar = exceptionJCalendars.get(1); Assert.assertEquals(2015, exceptionJCalendar.get(Calendar.YEAR)); Assert.assertEquals( Calendar.DECEMBER, exceptionJCalendar.get(Calendar.MONTH)); Assert.assertEquals(30, exceptionJCalendar.get(Calendar.DAY_OF_MONTH)); } @Test public void testInTimeZoneUpdatesUntilJCalendar() { Recurrence recurrence = RecurrenceSerializer.deserialize( "RRULE:FREQ=DAILY;INTERVAL=1;UNTIL=20160116", _utcTimeZone); Calendar untilJCalendar = recurrence.getUntilJCalendar(); Assert.assertEquals(2016, untilJCalendar.get(Calendar.YEAR)); Assert.assertEquals( Calendar.JANUARY, untilJCalendar.get(Calendar.MONTH)); Assert.assertEquals(16, untilJCalendar.get(Calendar.DAY_OF_MONTH)); Calendar startTimeJCalendar = JCalendarUtil.getJCalendar( 2015, Calendar.DECEMBER, 11, 1, 0, 0, 0, _utcTimeZone); recurrence = RecurrenceUtil.inTimeZone( recurrence, startTimeJCalendar, _losAngelesTimeZone); untilJCalendar = recurrence.getUntilJCalendar(); Assert.assertEquals(2016, untilJCalendar.get(Calendar.YEAR)); Assert.assertEquals( Calendar.JANUARY, untilJCalendar.get(Calendar.MONTH)); Assert.assertEquals(15, untilJCalendar.get(Calendar.DAY_OF_MONTH)); } @Test public void testInTimeZoneUpdatesWeekdays() { Recurrence recurrence = RecurrenceSerializer.deserialize( "RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE,FR", _utcTimeZone); List<Weekday> weekdays = recurrence.getWeekdays(); Assert.assertTrue(weekdays.contains(Weekday.MONDAY)); Assert.assertTrue(weekdays.contains(Weekday.WEDNESDAY)); Assert.assertTrue(weekdays.contains(Weekday.FRIDAY)); Calendar startTimeJCalendar = JCalendarUtil.getJCalendar( 2015, Calendar.DECEMBER, 11, 1, 0, 0, 0, _utcTimeZone); recurrence = RecurrenceUtil.inTimeZone( recurrence, startTimeJCalendar, _losAngelesTimeZone); weekdays = recurrence.getWeekdays(); Assert.assertTrue(weekdays.contains(Weekday.SUNDAY)); Assert.assertTrue(weekdays.contains(Weekday.TUESDAY)); Assert.assertTrue(weekdays.contains(Weekday.THURSDAY)); } private static final TimeZone _losAngelesTimeZone = TimeZone.getTimeZone( "America/Los_Angeles"); private static final TimeZone _utcTimeZone = TimeZone.getTimeZone( StringPool.UTC); }