mirror of https://github.com/etesync/android
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
4.8 KiB
128 lines
4.8 KiB
/*******************************************************************************
|
|
* Copyright (c) 2014 Ricki Hirner (bitfire web engineering).
|
|
* All rights reserved. This program and the accompanying materials
|
|
* are made available under the terms of the GNU Public License v3.0
|
|
* which accompanies this distribution, and is available at
|
|
* http://www.gnu.org/licenses/gpl.html
|
|
******************************************************************************/
|
|
package at.bitfire.davdroid.resource.test;
|
|
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
|
|
import lombok.Cleanup;
|
|
import net.fortuna.ical4j.data.ParserException;
|
|
import android.content.res.AssetManager;
|
|
import android.test.InstrumentationTestCase;
|
|
import android.text.format.Time;
|
|
import at.bitfire.davdroid.resource.Event;
|
|
import at.bitfire.davdroid.resource.InvalidResourceException;
|
|
|
|
public class EventTest extends InstrumentationTestCase {
|
|
AssetManager assetMgr;
|
|
|
|
Event eViennaEvolution,
|
|
eOnThatDay, eAllDay1Day, eAllDay10Days, eAllDay0Sec;
|
|
|
|
public void setUp() throws IOException, InvalidResourceException {
|
|
assetMgr = getInstrumentation().getContext().getResources().getAssets();
|
|
|
|
eViennaEvolution = parseCalendar("vienna-evolution.ics");
|
|
eOnThatDay = parseCalendar("event-on-that-day.ics");
|
|
eAllDay1Day = parseCalendar("all-day-1day.ics");
|
|
eAllDay10Days = parseCalendar("all-day-10days.ics");
|
|
eAllDay0Sec = parseCalendar("all-day-0sec.ics");
|
|
|
|
//assertEquals("Test-Ereignis im schönen Wien", e.getSummary());
|
|
}
|
|
|
|
|
|
public void testStartEndTimes() throws IOException, ParserException {
|
|
// event with start+end date-time
|
|
assertEquals(1381330800000L, eViennaEvolution.getDtStartInMillis());
|
|
assertEquals("Europe/Vienna", eViennaEvolution.getDtStartTzID());
|
|
assertEquals(1381334400000L, eViennaEvolution.getDtEndInMillis());
|
|
assertEquals("Europe/Vienna", eViennaEvolution.getDtEndTzID());
|
|
}
|
|
|
|
public void testStartEndTimesAllDay() throws IOException, ParserException {
|
|
// event with start date only
|
|
assertEquals(868838400000L, eOnThatDay.getDtStartInMillis());
|
|
assertEquals(Time.TIMEZONE_UTC, eOnThatDay.getDtStartTzID());
|
|
// DTEND missing in VEVENT, must have been set to DTSTART+1 day
|
|
assertEquals(868838400000L + 86400000, eOnThatDay.getDtEndInMillis());
|
|
assertEquals(Time.TIMEZONE_UTC, eOnThatDay.getDtEndTzID());
|
|
|
|
// event with start+end date for all-day event (one day)
|
|
assertEquals(868838400000L, eAllDay1Day.getDtStartInMillis());
|
|
assertEquals(Time.TIMEZONE_UTC, eAllDay1Day.getDtStartTzID());
|
|
assertEquals(868838400000L + 86400000, eAllDay1Day.getDtEndInMillis());
|
|
assertEquals(Time.TIMEZONE_UTC, eAllDay1Day.getDtEndTzID());
|
|
|
|
// event with start+end date for all-day event (ten days)
|
|
assertEquals(868838400000L, eAllDay10Days.getDtStartInMillis());
|
|
assertEquals(Time.TIMEZONE_UTC, eAllDay10Days.getDtStartTzID());
|
|
assertEquals(868838400000L + 10*86400000, eAllDay10Days.getDtEndInMillis());
|
|
assertEquals(Time.TIMEZONE_UTC, eAllDay10Days.getDtEndTzID());
|
|
|
|
// event with start+end date on some day (invalid 0 sec-event)
|
|
assertEquals(868838400000L, eAllDay0Sec.getDtStartInMillis());
|
|
assertEquals(Time.TIMEZONE_UTC, eAllDay0Sec.getDtStartTzID());
|
|
// DTEND invalid in VEVENT, must have been set to DTSTART+1 day
|
|
assertEquals(868838400000L + 86400000, eAllDay0Sec.getDtEndInMillis());
|
|
assertEquals(Time.TIMEZONE_UTC, eAllDay0Sec.getDtEndTzID());
|
|
}
|
|
|
|
public void testTimezoneDefToTzId() {
|
|
// test valid definition
|
|
final String VTIMEZONE_SAMPLE = // taken from RFC 4791, 5.2.2. CALDAV:calendar-timezone Property
|
|
"BEGIN:VCALENDAR\n" +
|
|
"PRODID:-//Example Corp.//CalDAV Client//EN\n" +
|
|
"VERSION:2.0\n" +
|
|
"BEGIN:VTIMEZONE\n" +
|
|
"TZID:US-Eastern\n" +
|
|
"LAST-MODIFIED:19870101T000000Z\n" +
|
|
"BEGIN:STANDARD\n" +
|
|
"DTSTART:19671029T020000\n" +
|
|
"RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10\n" +
|
|
"TZOFFSETFROM:-0400\n" +
|
|
"TZOFFSETTO:-0500\n" +
|
|
"TZNAME:Eastern Standard Time (US & Canada)\n" +
|
|
"END:STANDARD\n" +
|
|
"BEGIN:DAYLIGHT\n" +
|
|
"DTSTART:19870405T020000\n" +
|
|
"RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4\n" +
|
|
"TZOFFSETFROM:-0500\n" +
|
|
"TZOFFSETTO:-0400\n" +
|
|
"TZNAME:Eastern Daylight Time (US & Canada)\n" +
|
|
"END:DAYLIGHT\n" +
|
|
"END:VTIMEZONE\n" +
|
|
"END:VCALENDAR";
|
|
assertEquals("US-Eastern", Event.TimezoneDefToTzId(VTIMEZONE_SAMPLE));
|
|
|
|
// test null value
|
|
try {
|
|
Event.TimezoneDefToTzId(null);
|
|
fail();
|
|
} catch(IllegalArgumentException e) {
|
|
assert(true);
|
|
}
|
|
|
|
// test invalid time zone
|
|
try {
|
|
Event.TimezoneDefToTzId("/* invalid content */");
|
|
fail();
|
|
} catch(IllegalArgumentException e) {
|
|
assert(true);
|
|
}
|
|
}
|
|
|
|
|
|
protected Event parseCalendar(String fname) throws IOException, InvalidResourceException {
|
|
@Cleanup InputStream in = assetMgr.open(fname, AssetManager.ACCESS_STREAMING);
|
|
Event e = new Event(fname, null);
|
|
e.parseEntity(in);
|
|
return e;
|
|
}
|
|
}
|