Add Apple Reminder and Thunderbird tests

pull/685/merge
Alex Baker 6 years ago
parent 4fea8c1741
commit 32fda8a4b1

@ -0,0 +1,17 @@
BEGIN:VCALENDAR
CALSCALE:GREGORIAN
PRODID:-//Apple Inc.//iOS 11.2.6//EN
VERSION:2.0
BEGIN:VTODO
COMPLETED:20180417T184302Z
CREATED:20180417T184300Z
DTSTAMP:20180417T184304Z
LAST-MODIFIED:20180417T184304Z
PERCENT-COMPLETE:100
SEQUENCE:0
STATUS:COMPLETED
SUMMARY:Test
UID:31FC53CE-71A0-4AE1-8371-822B8DC4ECD9
X-APPLE-SORT-ORDER:545683380
END:VTODO
END:VCALENDAR

@ -0,0 +1,193 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Apple Inc.//Mac OS X 10.13.4//EN
CALSCALE:GREGORIAN
BEGIN:VTODO
CREATED:20180416T222650Z
UID:CB8609CD-8345-46CF-8295-4FDA84050CDB
SUMMARY:Test title
DTSTART;TZID=America/Chicago:20180416T180000
DTSTAMP:20180416T222656Z
SEQUENCE:0
DUE;TZID=America/Chicago:20180416T180000
BEGIN:VALARM
X-WR-ALARMUID:31AC3FC5-D6D1-47D1-9B8D-597BD5D097A5
UID:31AC3FC5-D6D1-47D1-9B8D-597BD5D097A5
TRIGGER;VALUE=DATE-TIME:20180416T230000Z
DESCRIPTION:Event reminder
ACTION:DISPLAY
END:VALARM
END:VTODO
BEGIN:VTIMEZONE
TZID:America/Chicago
X-LIC-LOCATION:America/Chicago
BEGIN:STANDARD
DTSTART:18831118T120924
RDATE:18831118T120924
TZNAME:CST
TZOFFSETFROM:-055036
TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19180331T020000
RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYMONTH=3;BYDAY=-1SU
TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19181027T020000
RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYMONTH=10;BYDAY=-1SU
TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
DTSTART:19200101T000000
RDATE:19200101T000000
RDATE:19420101T000000
RDATE:19460101T000000
RDATE:19670101T000000
TZNAME:CST
TZOFFSETFROM:-0600
TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19200613T020000
RDATE:19200613T020000
RDATE:19210327T020000
RDATE:19740106T020000
RDATE:19750223T020000
TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19201031T020000
RRULE:FREQ=YEARLY;UNTIL=19211030T070000Z;BYMONTH=10;BYDAY=-1SU
TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19220430T020000
RRULE:FREQ=YEARLY;UNTIL=19350428T080000Z;BYMONTH=4;BYDAY=-1SU
TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19220924T020000
RRULE:FREQ=YEARLY;UNTIL=19350929T070000Z;BYMONTH=9;BYDAY=-1SU
TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
DTSTART:19360301T020000
RDATE:19360301T020000
TZNAME:EST
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
DTSTART:19361115T020000
RDATE:19361115T020000
RDATE:19450930T020000
TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19370425T020000
RRULE:FREQ=YEARLY;UNTIL=19410427T080000Z;BYMONTH=4;BYDAY=-1SU
TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19370926T020000
RRULE:FREQ=YEARLY;UNTIL=19410928T070000Z;BYMONTH=9;BYDAY=-1SU
TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19420209T020000
RDATE:19420209T020000
TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19450814T180000
RDATE:19450814T180000
TZNAME:CPT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19460428T020000
RRULE:FREQ=YEARLY;UNTIL=19660424T080000Z;BYMONTH=4;BYDAY=-1SU
TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19460929T020000
RRULE:FREQ=YEARLY;UNTIL=19540926T070000Z;BYMONTH=9;BYDAY=-1SU
TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
DTSTART:19551030T020000
RRULE:FREQ=YEARLY;UNTIL=19661030T070000Z;BYMONTH=10;BYDAY=-1SU
TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19670430T020000
RRULE:FREQ=YEARLY;UNTIL=19730429T080000Z;BYMONTH=4;BYDAY=-1SU
TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19671029T020000
RRULE:FREQ=YEARLY;UNTIL=20061029T070000Z;BYMONTH=10;BYDAY=-1SU
TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19760425T020000
RRULE:FREQ=YEARLY;UNTIL=19860427T080000Z;BYMONTH=4;BYDAY=-1SU
TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19870405T020000
RRULE:FREQ=YEARLY;UNTIL=20060402T080000Z;BYMONTH=4;BYDAY=1SU
TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:20070311T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:20071104T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
END:STANDARD
END:VTIMEZONE
END:VCALENDAR

@ -0,0 +1,13 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Apple Inc.//Mac OS X 10.13.4//EN
CALSCALE:GREGORIAN
BEGIN:VTODO
DTSTAMP:20180416T222430Z
SEQUENCE:0
DESCRIPTION:Test description
CREATED:20180416T222410Z
SUMMARY:Test title
UID:5C9953DF-7FA0-40B6-92D4-5CDF53B1FB3E
END:VTODO
END:VCALENDAR

@ -0,0 +1,16 @@
BEGIN:VCALENDAR
CALSCALE:GREGORIAN
PRODID:-//Apple Inc.//iOS 11.2.6//EN
VERSION:2.0
BEGIN:VTODO
CREATED:20180417T154347Z
DTSTAMP:20180417T154636Z
LAST-MODIFIED:20180417T154636Z
PRIORITY:1
SEQUENCE:0
STATUS:NEEDS-ACTION
SUMMARY:Test
UID:44C59110-221F-4E88-B97B-531D3940920B
X-APPLE-SORT-ORDER:545672627
END:VTODO
END:VCALENDAR

@ -0,0 +1,16 @@
BEGIN:VCALENDAR
CALSCALE:GREGORIAN
PRODID:-//Apple Inc.//iOS 11.2.6//EN
VERSION:2.0
BEGIN:VTODO
CREATED:20180417T154347Z
DTSTAMP:20180417T154452Z
LAST-MODIFIED:20180417T154451Z
PRIORITY:9
SEQUENCE:0
STATUS:NEEDS-ACTION
SUMMARY:Test
UID:44C59110-221F-4E88-B97B-531D3940920B
X-APPLE-SORT-ORDER:545672627
END:VTODO
END:VCALENDAR

@ -0,0 +1,16 @@
BEGIN:VCALENDAR
CALSCALE:GREGORIAN
PRODID:-//Apple Inc.//iOS 11.2.6//EN
VERSION:2.0
BEGIN:VTODO
CREATED:20180417T154347Z
DTSTAMP:20180417T154600Z
LAST-MODIFIED:20180417T154559Z
PRIORITY:5
SEQUENCE:0
STATUS:NEEDS-ACTION
SUMMARY:Test
UID:44C59110-221F-4E88-B97B-531D3940920B
X-APPLE-SORT-ORDER:545672627
END:VTODO
END:VCALENDAR

@ -0,0 +1,15 @@
BEGIN:VCALENDAR
CALSCALE:GREGORIAN
PRODID:-//Apple Inc.//iOS 11.2.6//EN
VERSION:2.0
BEGIN:VTODO
CREATED:20180417T154347Z
DTSTAMP:20180417T160307Z
LAST-MODIFIED:20180417T160306Z
SEQUENCE:0
STATUS:NEEDS-ACTION
SUMMARY:Test
UID:44C59110-221F-4E88-B97B-531D3940920B
X-APPLE-SORT-ORDER:545672627
END:VTODO
END:VCALENDAR

@ -0,0 +1,197 @@
BEGIN:VCALENDAR
CALSCALE:GREGORIAN
PRODID:-//Apple Inc.//iOS 11.2.6//EN
VERSION:2.0
BEGIN:VTODO
CREATED:20180417T185149Z
DTSTAMP:20180417T185203Z
DTSTART;TZID=America/Chicago:20180417T140000
DUE;TZID=America/Chicago:20180417T140000
LAST-MODIFIED:20180417T185203Z
RRULE:FREQ=DAILY
SEQUENCE:0
STATUS:NEEDS-ACTION
SUMMARY:Test daily
UID:A406CCEB-D40E-42F0-BA5F-9D7429618DFB
X-APPLE-SORT-ORDER:545683909
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:Reminder
TRIGGER;VALUE=DATE-TIME:20180417T190000Z
UID:C87C4AFC-C781-476D-A457-71FBD45AF9E5
X-WR-ALARMUID:C87C4AFC-C781-476D-A457-71FBD45AF9E5
END:VALARM
END:VTODO
BEGIN:VTIMEZONE
TZID:America/Chicago
X-LIC-LOCATION:America/Chicago
BEGIN:STANDARD
DTSTART:18831118T120924
RDATE:18831118T120924
TZNAME:CST
TZOFFSETFROM:-055036
TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19180331T020000
RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYMONTH=3;BYDAY=-1SU
TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19181027T020000
RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYMONTH=10;BYDAY=-1SU
TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
DTSTART:19200101T000000
RDATE:19200101T000000
RDATE:19420101T000000
RDATE:19460101T000000
RDATE:19670101T000000
TZNAME:CST
TZOFFSETFROM:-0600
TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19200613T020000
RDATE:19200613T020000
RDATE:19210327T020000
RDATE:19740106T020000
RDATE:19750223T020000
TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19201031T020000
RRULE:FREQ=YEARLY;UNTIL=19211030T070000Z;BYMONTH=10;BYDAY=-1SU
TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19220430T020000
RRULE:FREQ=YEARLY;UNTIL=19350428T080000Z;BYMONTH=4;BYDAY=-1SU
TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19220924T020000
RRULE:FREQ=YEARLY;UNTIL=19350929T070000Z;BYMONTH=9;BYDAY=-1SU
TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
DTSTART:19360301T020000
RDATE:19360301T020000
TZNAME:EST
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
DTSTART:19361115T020000
RDATE:19361115T020000
RDATE:19450930T020000
TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19370425T020000
RRULE:FREQ=YEARLY;UNTIL=19410427T080000Z;BYMONTH=4;BYDAY=-1SU
TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19370926T020000
RRULE:FREQ=YEARLY;UNTIL=19410928T070000Z;BYMONTH=9;BYDAY=-1SU
TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19420209T020000
RDATE:19420209T020000
TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19450814T180000
RDATE:19450814T180000
TZNAME:CPT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19460428T020000
RRULE:FREQ=YEARLY;UNTIL=19660424T080000Z;BYMONTH=4;BYDAY=-1SU
TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19460929T020000
RRULE:FREQ=YEARLY;UNTIL=19540926T070000Z;BYMONTH=9;BYDAY=-1SU
TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
DTSTART:19551030T020000
RRULE:FREQ=YEARLY;UNTIL=19661030T070000Z;BYMONTH=10;BYDAY=-1SU
TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19670430T020000
RRULE:FREQ=YEARLY;UNTIL=19730429T080000Z;BYMONTH=4;BYDAY=-1SU
TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19671029T020000
RRULE:FREQ=YEARLY;UNTIL=20061029T070000Z;BYMONTH=10;BYDAY=-1SU
TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19760425T020000
RRULE:FREQ=YEARLY;UNTIL=19860427T080000Z;BYMONTH=4;BYDAY=-1SU
TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19870405T020000
RRULE:FREQ=YEARLY;UNTIL=20060402T080000Z;BYMONTH=4;BYDAY=1SU
TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:20070311T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:20071104T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
END:STANDARD
END:VTIMEZONE
END:VCALENDAR

@ -0,0 +1,16 @@
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
BEGIN:VTODO
CREATED:20180417T212422Z
LAST-MODIFIED:20180417T212429Z
DTSTAMP:20180417T212429Z
UID:7a08a78b-bce5-f24a-bafe-ccd892f1fc5d
SUMMARY:Test
STATUS:COMPLETED
COMPLETED:20180417T212429Z
PERCENT-COMPLETE:100
SEQUENCE:1
X-MOZ-GENERATION:1
END:VTODO
END:VCALENDAR

@ -0,0 +1,29 @@
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Chicago
BEGIN:DAYLIGHT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
TZNAME:CDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
TZNAME:CST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
END:STANDARD
END:VTIMEZONE
BEGIN:VTODO
CREATED:20180417T181109Z
LAST-MODIFIED:20180417T181112Z
DTSTAMP:20180417T181112Z
UID:9b63f8c7-5df5-4941-8cbb-f84da524aad1
SUMMARY:New Task
DUE;TZID=America/Chicago:20180417T140000
END:VTODO
END:VCALENDAR

@ -0,0 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
BEGIN:VTODO
CREATED:20180417T163152Z
LAST-MODIFIED:20180417T163159Z
DTSTAMP:20180417T163159Z
UID:75deaea8-931b-b748-9a41-a7e8491c9aa9
SUMMARY:Test title
DESCRIPTION:Test description
END:VTODO
END:VCALENDAR

@ -0,0 +1,13 @@
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
BEGIN:VTODO
CREATED:20180417T164451Z
LAST-MODIFIED:20180417T164622Z
DTSTAMP:20180417T164622Z
UID:6d2313db-56fb-ef4f-a039-3fa8a3fa257b
SUMMARY:Test
PRIORITY:1
X-MOZ-GENERATION:3
END:VTODO
END:VCALENDAR

@ -0,0 +1,13 @@
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
BEGIN:VTODO
CREATED:20180417T164451Z
LAST-MODIFIED:20180417T164503Z
DTSTAMP:20180417T164503Z
UID:6d2313db-56fb-ef4f-a039-3fa8a3fa257b
SUMMARY:Test
PRIORITY:9
X-MOZ-GENERATION:1
END:VTODO
END:VCALENDAR

@ -0,0 +1,13 @@
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
BEGIN:VTODO
CREATED:20180417T164451Z
LAST-MODIFIED:20180417T164553Z
DTSTAMP:20180417T164553Z
UID:6d2313db-56fb-ef4f-a039-3fa8a3fa257b
SUMMARY:Test
PRIORITY:5
X-MOZ-GENERATION:2
END:VTODO
END:VCALENDAR

@ -0,0 +1,13 @@
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
BEGIN:VTODO
CREATED:20180417T164236Z
LAST-MODIFIED:20180417T164244Z
DTSTAMP:20180417T164244Z
UID:4092b6e9-03a5-194c-a69a-8e55e7aa59f2
SUMMARY:Test
PRIORITY:0
X-MOZ-GENERATION:1
END:VTODO
END:VCALENDAR

@ -0,0 +1,30 @@
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Chicago
BEGIN:DAYLIGHT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
TZNAME:CDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
TZNAME:CST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
END:STANDARD
END:VTIMEZONE
BEGIN:VTODO
CREATED:20180417T212758Z
LAST-MODIFIED:20180417T212809Z
DTSTAMP:20180417T212809Z
UID:53bfc5f2-b35a-654f-87a8-e0e6b037b94d
SUMMARY:New Task
RRULE:FREQ=DAILY
DTSTART;TZID=America/Chicago:20180417T170000
END:VTODO
END:VCALENDAR

@ -1,6 +1,16 @@
package org.tasks;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
import at.bitfire.ical4android.InvalidCalendarException;
import com.google.common.base.Charsets;
import com.google.common.io.CharStreams;
import com.todoroo.astrid.data.Task;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import org.tasks.caldav.CaldavConverter;
public class TestUtilities {
@ -13,4 +23,46 @@ public class TestUtilities {
mockitoInitialized = true;
}
}
public static Task vtodo(String path) {
Task task = new Task();
CaldavConverter.apply(task, fromResource(path));
return task;
}
private static at.bitfire.ical4android.Task fromResource(String path) {
Context context = InstrumentationRegistry.getInstrumentation().getContext();
InputStream is = null;
InputStreamReader reader = null;
try {
is = context.getAssets().open(path);
reader = new InputStreamReader(is, Charsets.UTF_8);
return fromString(CharStreams.toString(reader));
} catch (IOException e) {
throw new IllegalArgumentException(e);
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException ignored) {
}
}
if (is != null) {
try {
is.close();
} catch (IOException ignored) {
}
}
}
}
private static at.bitfire.ical4android.Task fromString(String task) {
try {
return at.bitfire.ical4android.Task.fromReader(new StringReader(task)).get(0);
} catch (IOException | InvalidCalendarException e) {
throw new IllegalArgumentException(e);
}
}
}

@ -0,0 +1,88 @@
package org.tasks.caldav;
import static junit.framework.Assert.assertEquals;
import static org.tasks.TestUtilities.vtodo;
import android.support.test.runner.AndroidJUnit4;
import com.todoroo.astrid.data.Task;
import java.util.TimeZone;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.tasks.time.DateTime;
@RunWith(AndroidJUnit4.class)
public class AppleRemindersTests {
private TimeZone defaultTimeZone = TimeZone.getDefault();
@Before
public void before() {
TimeZone.setDefault(TimeZone.getTimeZone("America/Chicago"));
}
@After
public void after() {
TimeZone.setDefault(defaultTimeZone);
}
@Test
public void readTitle() {
assertEquals("Test title", vtodo("apple/basic_no_due_date.txt").getTitle());
}
@Test
public void readDescription() {
assertEquals("Test description", vtodo("apple/basic_no_due_date.txt").getNotes());
}
@Test
public void readCreationDate() {
assertEquals(
new DateTime(2018, 4, 16, 17, 24, 10).getMillis(),
(long) vtodo("apple/basic_no_due_date.txt").getCreationDate());
}
@Test
public void readDueDate() {
assertEquals(
new DateTime(2018, 4, 16, 18, 0, 1, 0).getMillis(),
(long) vtodo("apple/basic_due_date.txt").getDueDate());
}
@Test
public void completed() {
assertEquals(
new DateTime(2018, 4, 17, 13, 43, 2).getMillis(),
(long) vtodo("apple/basic_completed.txt").getCompletionDate());
}
@Test
public void repeatDaily() {
assertEquals("RRULE:FREQ=DAILY;INTERVAL=1", vtodo("apple/repeat_daily.txt").getRecurrence());
}
@Test
public void noPriority() {
assertEquals(Task.IMPORTANCE_NONE, (int) vtodo("apple/priority_none.txt").getImportance());
}
@Test
public void lowPriority() {
assertEquals(
Task.IMPORTANCE_SHOULD_DO, (int) vtodo("apple/priority_low.txt").getImportance());
}
@Test
public void mediumPriority() {
assertEquals(
Task.IMPORTANCE_MUST_DO, (int) vtodo("apple/priority_medium.txt").getImportance());
}
@Test
public void highPriority() {
assertEquals(
Task.IMPORTANCE_DO_OR_DIE, (int) vtodo("apple/priority_high.txt").getImportance());
}
}

@ -0,0 +1,95 @@
package org.tasks.caldav;
import static junit.framework.Assert.assertEquals;
import static org.tasks.TestUtilities.vtodo;
import android.support.test.runner.AndroidJUnit4;
import com.todoroo.astrid.data.Task;
import java.util.TimeZone;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.tasks.time.DateTime;
@RunWith(AndroidJUnit4.class)
public class ThunderbirdTests {
private TimeZone defaultTimeZone = TimeZone.getDefault();
@Before
public void before() {
TimeZone.setDefault(TimeZone.getTimeZone("America/Chicago"));
}
@After
public void after() {
TimeZone.setDefault(defaultTimeZone);
}
@Test
public void readTitle() {
assertEquals("Test title", vtodo("thunderbird/basic_no_due_date.txt").getTitle());
}
@Test
public void readDescription() {
assertEquals("Test description", vtodo("thunderbird/basic_no_due_date.txt").getNotes());
}
@Test
public void readCreationDate() {
assertEquals(
new DateTime(2018, 4, 17, 11, 31, 52).getMillis(),
(long) vtodo("thunderbird/basic_no_due_date.txt").getCreationDate());
}
@Test
public void readDueDate() {
assertEquals(
new DateTime(2018, 4, 17, 14, 0, 1).getMillis(),
(long) vtodo("thunderbird/basic_due_date.txt").getDueDate());
}
@Test
public void completed() {
assertEquals(
new DateTime(2018, 4, 17, 16, 24, 29).getMillis(),
(long) vtodo("thunderbird/basic_completed.txt").getCompletionDate());
}
@Test
public void repeatDaily() {
assertEquals("RRULE:FREQ=DAILY;INTERVAL=1", vtodo("thunderbird/repeat_daily.txt").getRecurrence());
}
@Test
public void priorityNotSet() {
assertEquals(
Task.IMPORTANCE_NONE, (int) vtodo("thunderbird/basic_no_due_date.txt").getImportance());
}
@Test
public void priorityNotSpecified() {
assertEquals(
Task.IMPORTANCE_NONE, (int) vtodo("thunderbird/priority_unspecified.txt").getImportance());
}
@Test
public void lowPriority() {
assertEquals(
Task.IMPORTANCE_SHOULD_DO, (int) vtodo("thunderbird/priority_low.txt").getImportance());
}
@Test
public void normalPriority() {
assertEquals(
Task.IMPORTANCE_MUST_DO, (int) vtodo("thunderbird/priority_normal.txt").getImportance());
}
@Test
public void highPriority() {
assertEquals(
Task.IMPORTANCE_DO_OR_DIE, (int) vtodo("thunderbird/priority_high.txt").getImportance());
}
}

@ -22,7 +22,7 @@ import net.fortuna.ical4j.model.property.RRule;
import org.tasks.data.CaldavTask;
import timber.log.Timber;
class TaskConverter {
public class CaldavConverter {
private static final DateFormat DUE_DATE_FORMAT = new SimpleDateFormat("yyyyMMdd", Locale.US);
@ -33,6 +33,10 @@ class TaskConverter {
} else {
local.setCompletionDate(remote.getCompletedAt().getDate().getTime());
}
Long createdAt = remote.getCreatedAt();
if (createdAt != null) {
local.setCreationDate(newDateTime(createdAt).toLocal().getMillis());
}
local.setTitle(remote.getSummary());
local.setNotes(remote.getDescription());
local.setImportance(fromRemote(remote.getPriority()));
@ -41,7 +45,7 @@ class TaskConverter {
local.setRecurrence("");
} else {
Recur recur = repeatRule.getRecur();
if (recur.getInterval() == 0) {
if (recur.getInterval() <= 0) {
recur.setInterval(1);
}
local.setRecurrence(
@ -67,29 +71,26 @@ class TaskConverter {
}
private static int fromRemote(int remotePriority) {
switch (remotePriority) {
case 0:
return Task.IMPORTANCE_NONE;
case 1:
return Task.IMPORTANCE_DO_OR_DIE;
case 2:
return Task.IMPORTANCE_MUST_DO;
default:
return Task.IMPORTANCE_SHOULD_DO;
if (remotePriority == 0) {
return Task.IMPORTANCE_NONE;
}
if (remotePriority == 5) {
return Task.IMPORTANCE_MUST_DO;
}
return remotePriority < 5 ? Task.IMPORTANCE_DO_OR_DIE : Task.IMPORTANCE_SHOULD_DO;
}
private static int toRemote(int remotePriority, int localPriority) {
switch (localPriority) {
case Task.IMPORTANCE_DO_OR_DIE:
return 1;
case Task.IMPORTANCE_MUST_DO:
return 2;
case Task.IMPORTANCE_SHOULD_DO:
return remotePriority > 2 ? remotePriority : 3;
default:
return 0;
if (localPriority == Task.IMPORTANCE_NONE) {
return 0;
}
if (localPriority == Task.IMPORTANCE_MUST_DO) {
return 5;
}
if (localPriority == Task.IMPORTANCE_DO_OR_DIE) {
return remotePriority < 5 ? Math.max(1, remotePriority) : 1;
}
return remotePriority > 5 ? Math.min(9, remotePriority) : 9;
}
public static at.bitfire.ical4android.Task toCaldav(CaldavTask caldavTask, Task task) {
@ -105,6 +106,7 @@ class TaskConverter {
if (remote == null) {
remote = new at.bitfire.ical4android.Task();
}
remote.setCreatedAt(newDateTime(task.getCreationDate()).toUTC().getMillis());
remote.setSummary(task.getTitle());
remote.setDescription(task.getNotes());
if (task.hasDueDate()) {

@ -303,7 +303,7 @@ public class CaldavSynchronizer {
return;
}
at.bitfire.ical4android.Task remoteModel = TaskConverter.toCaldav(caldavTask, task);
at.bitfire.ical4android.Task remoteModel = CaldavConverter.toCaldav(caldavTask, task);
if (Strings.isNullOrEmpty(caldavTask.getRemoteId())) {
String caldavUid = UUIDHelper.newUUID();
@ -361,7 +361,7 @@ public class CaldavSynchronizer {
} else {
task = taskDao.fetch(caldavTask.getTask());
}
TaskConverter.apply(task, remote);
CaldavConverter.apply(task, remote);
task.putTransitory(SyncFlags.GTASKS_SUPPRESS_SYNC, true);
taskDao.save(task);
caldavTask.setVtodo(vtodo);

Loading…
Cancel
Save