/*
* Created on 16/03/2005
*
* $Id: CalendarTest.java,v 1.15 2006/06/25 08:25:27 fortuna Exp $
*
* Copyright (c) 2005, Ben Fortuna
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* o Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* o Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* o Neither the name of Ben Fortuna nor the names of any other contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.fortuna.ical4j.model;
import junit.framework.TestCase;
import net.fortuna.ical4j.model.component.Daylight;
import net.fortuna.ical4j.model.component.VEvent;
import net.fortuna.ical4j.model.component.VFreeBusy;
import net.fortuna.ical4j.model.component.VTimeZone;
import net.fortuna.ical4j.model.parameter.TzId;
import net.fortuna.ical4j.model.parameter.Value;
import net.fortuna.ical4j.model.property.CalScale;
import net.fortuna.ical4j.model.property.ProdId;
import net.fortuna.ical4j.model.property.RRule;
import net.fortuna.ical4j.model.property.Uid;
import net.fortuna.ical4j.model.property.Version;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* @author Ben
*
* A test case for creating calendars.
*/
public class CalendarTest extends TestCase {
private static Log log = LogFactory.getLog(Calendar.class);
private TimeZoneRegistry registry;
private Calendar calendar;
/* (non-Javadoc)
* @see junit.framework.TestCase#setUp()
*/
protected void setUp() throws Exception {
super.setUp();
registry = TimeZoneRegistryFactory.getInstance().createRegistry();
calendar = new Calendar();
calendar.getProperties().add(new ProdId("-//Ben Fortuna//iCal4j 1.0//EN"));
calendar.getProperties().add(Version.VERSION_2_0);
calendar.getProperties().add(CalScale.GREGORIAN);
}
/*
* Class under test for void Calendar()
*/
public void testCalendar() throws ValidationException {
VTimeZone tz = registry.getTimeZone("Australia/Melbourne").getVTimeZone();
calendar.getComponents().add(tz);
TzId tzParam = new TzId(tz.getProperty(Property.TZID).getValue());
// Add events, etc..
java.util.Calendar calStart = java.util.Calendar.getInstance();
calStart.set(java.util.Calendar.DAY_OF_WEEK, java.util.Calendar.MONDAY);
calStart.set(java.util.Calendar.HOUR_OF_DAY, 9);
calStart.clear(java.util.Calendar.MINUTE);
calStart.clear(java.util.Calendar.SECOND);
java.util.Calendar calEnd = java.util.Calendar.getInstance();
calEnd.setTime(calStart.getTime());
calEnd.add(java.util.Calendar.YEAR, 1);
VEvent week1UserA = new VEvent(
new Date(calStart.getTime().getTime()),
new Dur(0, 8, 0, 0), "Week 1 - User A");
week1UserA.getProperty(Property.DTSTART).getParameters().add(tzParam);
week1UserA.getProperty(Property.DTSTART).getParameters().add(Value.DATE);
Recur week1UserARecur = new Recur(
Recur.WEEKLY, new Date(calEnd.getTime().getTime()));
week1UserARecur.setInterval(3);
week1UserARecur.getDayList().add(WeekDay.MO);
week1UserARecur.getDayList().add(WeekDay.TU);
week1UserARecur.getDayList().add(WeekDay.WE);
week1UserARecur.getDayList().add(WeekDay.TH);
week1UserARecur.getDayList().add(WeekDay.FR);
week1UserARecur.getHourList().add(new Integer(9));
week1UserA.getProperties().add(new RRule(week1UserARecur));
week1UserA.getProperties().add(new Uid("000001@modularity.net.au"));
calStart.add(java.util.Calendar.WEEK_OF_YEAR, 1);
calEnd.add(java.util.Calendar.WEEK_OF_YEAR, 1);
VEvent week2UserB = new VEvent(
new Date(calStart.getTime().getTime()),
new Dur(0, 8, 0, 0), "Week 2 - User B");
week2UserB.getProperty(Property.DTSTART).getParameters().add(tzParam);
week2UserB.getProperty(Property.DTSTART).getParameters().add(Value.DATE);
Recur week2UserBRecur = new Recur(
Recur.WEEKLY, new Date(calEnd.getTime().getTime()));
week2UserBRecur.setInterval(3);
week2UserBRecur.getDayList().add(WeekDay.MO);
week2UserBRecur.getDayList().add(WeekDay.TU);
week2UserBRecur.getDayList().add(WeekDay.WE);
week2UserBRecur.getDayList().add(WeekDay.TH);
week2UserBRecur.getDayList().add(WeekDay.FR);
week2UserBRecur.getHourList().add(new Integer(9));
week2UserB.getProperties().add(new RRule(week2UserBRecur));
week2UserB.getProperties().add(new Uid("000002@modularity.net.au"));
calStart.add(java.util.Calendar.WEEK_OF_YEAR, 1);
calEnd.add(java.util.Calendar.WEEK_OF_YEAR, 1);
VEvent week3UserC = new VEvent(
new Date(calStart.getTime().getTime()),
new Dur(0, 8, 0, 0), "Week 3 - User C");
week3UserC.getProperty(Property.DTSTART).getParameters().add(tzParam);
week3UserC.getProperty(Property.DTSTART).getParameters().add(Value.DATE);
Recur week3UserCRecur = new Recur(
Recur.WEEKLY, new Date(calEnd.getTime().getTime()));
week3UserCRecur.setInterval(3);
week3UserCRecur.getDayList().add(WeekDay.MO);
week3UserCRecur.getDayList().add(WeekDay.TU);
week3UserCRecur.getDayList().add(WeekDay.WE);
week3UserCRecur.getDayList().add(WeekDay.TH);
week3UserCRecur.getDayList().add(WeekDay.FR);
week3UserCRecur.getHourList().add(new Integer(9));
week3UserC.getProperties().add(new RRule(week3UserCRecur));
week3UserC.getProperties().add(new Uid("000003@modularity.net.au"));
calendar.getComponents().add(week1UserA);
calendar.getComponents().add(week2UserB);
calendar.getComponents().add(week3UserC);
calendar.validate();
log.info(calendar);
}
/**
* @throws ValidationException
*/
public void testGetEventDateRanges() throws ValidationException {
// Add events, etc..
VTimeZone tz = registry.getTimeZone("Australia/Melbourne").getVTimeZone();
TzId tzParam = new TzId(tz.getProperty(Property.TZID).getValue());
java.util.Calendar calStart = java.util.Calendar.getInstance();
calStart.set(java.util.Calendar.YEAR, 2006);
calStart.set(java.util.Calendar.MONTH, java.util.Calendar.JANUARY);
calStart.set(java.util.Calendar.DAY_OF_MONTH, 1);
calStart.set(java.util.Calendar.HOUR_OF_DAY, 9);
calStart.clear(java.util.Calendar.MINUTE);
calStart.clear(java.util.Calendar.SECOND);
java.util.Calendar calEnd = java.util.Calendar.getInstance();
calEnd.setTime(calStart.getTime());
calEnd.add(java.util.Calendar.YEAR, 1);
VEvent week1UserA = new VEvent(
new Date(calStart.getTime().getTime()),
new Dur(0, 8, 0, 0), "Week 1 - User A");
week1UserA.getProperty(Property.DTSTART).getParameters().add(tzParam);
week1UserA.getProperty(Property.DTSTART).getParameters().add(Value.DATE);
Recur week1UserARecur = new Recur(
Recur.WEEKLY, new Date(calEnd.getTime().getTime()));
week1UserARecur.setInterval(3);
week1UserARecur.getDayList().add(new WeekDay(WeekDay.MO, 0));
week1UserARecur.getDayList().add(new WeekDay(WeekDay.TU, 0));
week1UserARecur.getDayList().add(new WeekDay(WeekDay.WE, 0));
week1UserARecur.getDayList().add(new WeekDay(WeekDay.TH, 0));
week1UserARecur.getDayList().add(new WeekDay(WeekDay.FR, 0));
week1UserARecur.getHourList().add(new Integer(9));
week1UserA.getProperties().add(new RRule(week1UserARecur));
week1UserA.getProperties().add(new Uid("000001@modularity.net.au"));
calStart.add(java.util.Calendar.WEEK_OF_YEAR, 1);
calEnd.add(java.util.Calendar.WEEK_OF_YEAR, 1);
VEvent week2UserB = new VEvent(
new Date(calStart.getTime().getTime()),
new Dur(0, 8, 0, 0), "Week 2 - User B");
week2UserB.getProperty(Property.DTSTART).getParameters().add(tzParam);
week2UserB.getProperty(Property.DTSTART).getParameters().add(Value.DATE);
Recur week2UserBRecur = new Recur(
Recur.WEEKLY, new Date(calEnd.getTime().getTime()));
week2UserBRecur.setInterval(3);
week2UserBRecur.getDayList().add(new WeekDay(WeekDay.MO, 0));
week2UserBRecur.getDayList().add(new WeekDay(WeekDay.TU, 0));
week2UserBRecur.getDayList().add(new WeekDay(WeekDay.WE, 0));
week2UserBRecur.getDayList().add(new WeekDay(WeekDay.TH, 0));
week2UserBRecur.getDayList().add(new WeekDay(WeekDay.FR, 0));
week2UserBRecur.getHourList().add(new Integer(9));
week2UserB.getProperties().add(new RRule(week2UserBRecur));
week2UserB.getProperties().add(new Uid("000002@modularity.net.au"));
calStart.add(java.util.Calendar.WEEK_OF_YEAR, 1);
calEnd.add(java.util.Calendar.WEEK_OF_YEAR, 1);
VEvent week3UserC = new VEvent(
new Date(calStart.getTime().getTime()),
new Dur(0, 8, 0, 0), "Week 3 - User C");
week3UserC.getProperty(Property.DTSTART).getParameters().add(tzParam);
week3UserC.getProperty(Property.DTSTART).getParameters().add(Value.DATE);
Recur week3UserCRecur = new Recur(
Recur.WEEKLY, new Date(calEnd.getTime().getTime()));
week3UserCRecur.setInterval(3);
week3UserCRecur.getDayList().add(new WeekDay(WeekDay.MO, 0));
week3UserCRecur.getDayList().add(new WeekDay(WeekDay.TU, 0));
week3UserCRecur.getDayList().add(new WeekDay(WeekDay.WE, 0));
week3UserCRecur.getDayList().add(new WeekDay(WeekDay.TH, 0));
week3UserCRecur.getDayList().add(new WeekDay(WeekDay.FR, 0));
week3UserCRecur.getHourList().add(new Integer(9));
week3UserC.getProperties().add(new RRule(week3UserCRecur));
week3UserC.getProperties().add(new Uid("000003@modularity.net.au"));
calendar.getComponents().add(week1UserA);
calendar.getComponents().add(week2UserB);
calendar.getComponents().add(week3UserC);
calendar.validate();
// Start the logic testing.
java.util.Calendar queryStartCal = java.util.Calendar.getInstance();
java.util.Calendar queryEndCal = java.util.Calendar.getInstance();
queryStartCal.set(2006, java.util.Calendar.JULY, 1, 9, 0, 0);
queryEndCal.set(2006, java.util.Calendar.AUGUST, 1, 9, 0, 0);
VFreeBusy request = new VFreeBusy(
new DateTime(queryStartCal.getTime()),
new DateTime(queryEndCal.getTime()));
VFreeBusy reply = new VFreeBusy(request, calendar.getComponents());
/*
SortedSet dateRangeSet =
calendar.getEventDateRanges(queryStartCal.getTime(),
queryEndCal.getTime());
*/
log.info(reply);
}
/**
* Unit test for the method <code>Calendar.validate()</code>.
*/
public void testCalendarValidation() {
calendar.getComponents().add(new Daylight());
try {
calendar.validate();
fail("Should throw a ValidationException");
}
catch (ValidationException ve) {
// success..
log.debug(ve);
}
}
}