package jfxtras.icalendarfx.calendar; import static org.junit.Assert.assertEquals; import org.junit.Test; import jfxtras.icalendarfx.ICalendarTestAbstract; import jfxtras.icalendarfx.VCalendar; import jfxtras.icalendarfx.components.VAlarm; import jfxtras.icalendarfx.components.VTodo; import jfxtras.icalendarfx.properties.calendar.CalendarScale; import jfxtras.icalendarfx.properties.calendar.ProductIdentifier; import jfxtras.icalendarfx.properties.calendar.Version; public class GeneralCalendarTest extends ICalendarTestAbstract { @Test public void canBuildVCalendar() { String expectedContent = "BEGIN:VCALENDAR" + System.lineSeparator() + "VERSION:" + Version.DEFAULT_ICALENDAR_SPECIFICATION_VERSION + System.lineSeparator() + "PRODID:-//JFxtras//iCalendarFx-1.0//EN" + System.lineSeparator() + "CALSCALE:" + CalendarScale.DEFAULT_CALENDAR_SCALE + System.lineSeparator() + "BEGIN:VTODO" + System.lineSeparator() + "COMPLETED:19960401T150000Z" + System.lineSeparator() + "DUE;TZID=America/Los_Angeles:19960401T050000" + System.lineSeparator() + "PERCENT-COMPLETE:35" + System.lineSeparator() + "END:VTODO" + System.lineSeparator() + "BEGIN:VTIMEZONE" + System.lineSeparator() + "TZID:America/New_York" + System.lineSeparator() + "LAST-MODIFIED:20050809T050000Z" + System.lineSeparator() + "BEGIN:DAYLIGHT" + System.lineSeparator() + // 1 "DTSTART:19670430T020000" + System.lineSeparator() + "RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T070000Z" + System.lineSeparator() + "TZOFFSETFROM:-0500" + System.lineSeparator() + "TZOFFSETTO:-0400" + System.lineSeparator() + "TZNAME:EDT" + System.lineSeparator() + "END:DAYLIGHT" + System.lineSeparator() + "BEGIN:STANDARD" + System.lineSeparator() + // 2 "DTSTART:19671029T020000" + System.lineSeparator() + "RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z" + System.lineSeparator() + "TZOFFSETFROM:-0400" + System.lineSeparator() + "TZOFFSETTO:-0500" + System.lineSeparator() + "TZNAME:EST" + System.lineSeparator() + "END:STANDARD" + System.lineSeparator() + "BEGIN:DAYLIGHT" + System.lineSeparator() + // 3 "DTSTART:19740106T020000" + System.lineSeparator() + "RDATE:19750223T020000" + System.lineSeparator() + "TZOFFSETFROM:-0500" + System.lineSeparator() + "TZOFFSETTO:-0400" + System.lineSeparator() + "TZNAME:EDT" + System.lineSeparator() + "END:DAYLIGHT" + System.lineSeparator() + "BEGIN:DAYLIGHT" + System.lineSeparator() + // 4 "DTSTART:19760425T020000" + System.lineSeparator() + "RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z" + System.lineSeparator() + "TZOFFSETFROM:-0500" + System.lineSeparator() + "TZOFFSETTO:-0400" + System.lineSeparator() + "TZNAME:EDT" + System.lineSeparator() + "END:DAYLIGHT" + System.lineSeparator() + "BEGIN:DAYLIGHT" + System.lineSeparator() + // 5 "DTSTART:19870405T020000" + System.lineSeparator() + "RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z" + System.lineSeparator() + "TZOFFSETFROM:-0500" + System.lineSeparator() + "TZOFFSETTO:-0400" + System.lineSeparator() + "TZNAME:EDT" + System.lineSeparator() + "END:DAYLIGHT" + System.lineSeparator() + "BEGIN:DAYLIGHT" + System.lineSeparator() + // 6 "DTSTART:20070311T020000" + System.lineSeparator() + "RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU" + System.lineSeparator() + "TZOFFSETFROM:-0500" + System.lineSeparator() + "TZOFFSETTO:-0400" + System.lineSeparator() + "TZNAME:EDT" + System.lineSeparator() + "END:DAYLIGHT" + System.lineSeparator() + "BEGIN:STANDARD" + System.lineSeparator() + // 7 "DTSTART:20071104T020000" + System.lineSeparator() + "RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU" + System.lineSeparator() + "TZOFFSETFROM:-0400" + System.lineSeparator() + "TZOFFSETTO:-0500" + System.lineSeparator() + "TZNAME:EST" + System.lineSeparator() + "END:STANDARD" + System.lineSeparator() + "END:VTIMEZONE" + System.lineSeparator() + "BEGIN:VEVENT" + System.lineSeparator() + "CATEGORIES:group13" + System.lineSeparator() + "CREATED:20151109T082900Z" + System.lineSeparator() + "DESCRIPTION:Yearly1 Description" + System.lineSeparator() + "DTSTAMP:20151109T083000Z" + System.lineSeparator() + "DTSTART:20151109T100000" + System.lineSeparator() + "DURATION:PT1H" + System.lineSeparator() + "LAST-MODIFIED:20151110T183000Z" + System.lineSeparator() + "RRULE:FREQ=YEARLY" + System.lineSeparator() + "SUMMARY:Yearly1 Summary" + System.lineSeparator() + "UID:20151109T082900-0@jfxtras.org" + System.lineSeparator() + "END:VEVENT" + System.lineSeparator() + "BEGIN:VEVENT" + System.lineSeparator() + "DTSTAMP:20150110T080000Z" + System.lineSeparator() + "DTSTART:20151103T100000" + System.lineSeparator() + "DURATION:PT1H30M" + System.lineSeparator() + "RRULE:FREQ=MONTHLY;BYMONTH=11,12;BYDAY=TU,WE,FR" + System.lineSeparator() + "UID:20150110T080000-0@jfxtras.org" + System.lineSeparator() + "END:VEVENT" + System.lineSeparator() + "END:VCALENDAR"; VCalendar vCalendar = VCalendar.parse(expectedContent); VCalendar c = new VCalendar() .withVersion(new Version()) .withProductIdentifier(new ProductIdentifier("-//JFxtras//iCalendarFx-1.0//EN")) .withCalendarScale(new CalendarScale(CalendarScale.DEFAULT_CALENDAR_SCALE)) .withVTodos(new VTodo() .withDateTimeCompleted("COMPLETED:19960401T150000Z") .withDateTimeDue("TZID=America/Los_Angeles:19960401T050000") .withPercentComplete(35)) .withVTimeZones(getTimeZone1()) .withVEvents(getYearly1()) .withVEvents(getMonthly6()); assertEquals(vCalendar, c); assertEquals(expectedContent, c.toString()); } @Test public void canParseVCalendar() { String content = "BEGIN:VCALENDAR" + System.lineSeparator() + "VERSION:2.0" + System.lineSeparator() + "PRODID:-//hacksw/handcal//NONSGML v1.0//EN" + System.lineSeparator() + "BEGIN:VEVENT" + System.lineSeparator() + "UID:19970610T172345Z-AF23B2@example.com" + System.lineSeparator() + "DTSTAMP:19970610T172345Z" + System.lineSeparator() + "DTSTART:19970714T170000Z" + System.lineSeparator() + "DTEND:19970715T040000Z" + System.lineSeparator() + "SUMMARY:Bastille Day Party" + System.lineSeparator() + "END:VEVENT" + System.lineSeparator() + "BEGIN:VEVENT" + System.lineSeparator() + "SUMMARY:New Event" + System.lineSeparator() + "CLASS:PUBLIC" + System.lineSeparator() + "DTSTART;TZID=Etc/GMT:20150902T133000Z" + System.lineSeparator() + "DTEND;TZID=Etc/GMT:20150902T180000Z" + System.lineSeparator() + "PRIORITY:0" + System.lineSeparator() + "SEQUENCE:1" + System.lineSeparator() + "STATUS:CANCELLED" + System.lineSeparator() + "UID:dc654e79-cc85-449c-a1b2-71b2d20b80df" + System.lineSeparator() + "RECURRENCE-ID;TZID=Etc/GMT:20150902T133000Z" + System.lineSeparator() + "DTSTAMP:20150831T053218Z" + System.lineSeparator() + "ORGANIZER;CN=David Bal;SENT-BY=\"mailto:ddbal1@yahoo.com\":mailto:ddbal1@yaho" + System.lineSeparator() + " o.com" + System.lineSeparator() + "X-YAHOO-YID:testuser" + System.lineSeparator() + "TRANSP:OPAQUE" + System.lineSeparator() + "X-YAHOO-USER-STATUS:BUSY" + System.lineSeparator() + "X-YAHOO-EVENT-STATUS:BUSY" + System.lineSeparator() + "BEGIN:VALARM" + System.lineSeparator() + "ACTION:DISPLAY" + System.lineSeparator() + "DESCRIPTION:" + System.lineSeparator() + "TRIGGER;RELATED=START:-PT30M" + System.lineSeparator() + "END:VALARM" + System.lineSeparator() + "END:VEVENT" + System.lineSeparator() + "END:VCALENDAR"; VCalendar vCalendar = VCalendar.parse(content); VAlarm a = vCalendar.getVEvents().get(1).getVAlarms().get(0); assertEquals(content, vCalendar.toString()); } }