ical events tests

pull/1/head
Thomas Irgang 2017-07-19 10:05:03 +02:00
rodzic 40b9ade7fb
commit 556b9a600d
7 zmienionych plików z 3781 dodań i 0 usunięć

3
test/__init__.py 100644
Wyświetl plik

@ -0,0 +1,3 @@
"""
Tests for icalevents.
"""

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Wyświetl plik

@ -0,0 +1,305 @@
BEGIN:VCALENDAR
VERSION:2.0
X-WR-CALNAME:Der Wir Kalender
X-WR-CALDESC:
X-APPLE-CALENDAR-COLOR:#ff2d55FF
BEGIN:VTIMEZONE
TZID:US/Pacific
X-LIC-LOCATION:US/Pacific
BEGIN:STANDARD
DTSTART:18831118T120702
RDATE;VALUE=DATE-TIME:18831118T120702
TZNAME:PST
TZOFFSETFROM:-0752
TZOFFSETTO:-0800
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19180331T020000
RRULE:FREQ=YEARLY;UNTIL=19190330T100000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19181027T020000
RRULE:FREQ=YEARLY;UNTIL=19191026T090000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19420209T020000
RDATE;VALUE=DATE-TIME:19420209T020000
TZNAME:PWT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19450814T160000
RDATE;VALUE=DATE-TIME:19450814T160000
TZNAME:PPT
TZOFFSETFROM:-0700
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19450930T020000
RDATE;VALUE=DATE-TIME:19450930T020000
RDATE;VALUE=DATE-TIME:19490101T020000
TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
END:STANDARD
BEGIN:STANDARD
DTSTART:19460101T000000
RDATE;VALUE=DATE-TIME:19460101T000000
RDATE;VALUE=DATE-TIME:19670101T000000
TZNAME:PST
TZOFFSETFROM:-0800
TZOFFSETTO:-0800
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19480314T020100
RDATE;VALUE=DATE-TIME:19480314T020100
RDATE;VALUE=DATE-TIME:19740106T020000
RDATE;VALUE=DATE-TIME:19750223T020000
TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19500430T010000
RRULE:FREQ=YEARLY;UNTIL=19660424T090000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19500924T020000
RRULE:FREQ=YEARLY;UNTIL=19610924T090000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
END:STANDARD
BEGIN:STANDARD
DTSTART:19621028T020000
RRULE:FREQ=YEARLY;UNTIL=19661030T090000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19670430T020000
RRULE:FREQ=YEARLY;UNTIL=19730429T100000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19671029T020000
RRULE:FREQ=YEARLY;UNTIL=20061029T090000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19760425T020000
RRULE:FREQ=YEARLY;UNTIL=19860427T100000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19870405T020000
RRULE:FREQ=YEARLY;UNTIL=20060402T100000Z;BYDAY=1SU;BYMONTH=4
TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:20070311T020000
RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:20071104T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:Europe/Berlin
X-LIC-LOCATION:Europe/Berlin
BEGIN:STANDARD
DTSTART:18930401T000000
RDATE;VALUE=DATE-TIME:18930401T000000
TZNAME:CEST
TZOFFSETFROM:+5328
TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19160430T230000
RDATE;VALUE=DATE-TIME:19160430T230000
RDATE;VALUE=DATE-TIME:19400401T020000
RDATE;VALUE=DATE-TIME:19430329T020000
RDATE;VALUE=DATE-TIME:19460414T020000
RDATE;VALUE=DATE-TIME:19470406T030000
RDATE;VALUE=DATE-TIME:19480418T020000
RDATE;VALUE=DATE-TIME:19490410T020000
RDATE;VALUE=DATE-TIME:19800406T020000
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19161001T010000
RDATE;VALUE=DATE-TIME:19161001T010000
RDATE;VALUE=DATE-TIME:19421102T030000
RDATE;VALUE=DATE-TIME:19431004T030000
RDATE;VALUE=DATE-TIME:19441002T030000
RDATE;VALUE=DATE-TIME:19451118T030000
RDATE;VALUE=DATE-TIME:19461007T030000
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19170416T020000
RRULE:FREQ=YEARLY;UNTIL=19180415T010000Z;BYDAY=3MO;BYMONTH=4
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19170917T030000
RRULE:FREQ=YEARLY;UNTIL=19180916T010000Z;BYDAY=3MO;BYMONTH=9
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19440403T020000
RRULE:FREQ=YEARLY;UNTIL=19450402T010000Z;BYDAY=1MO;BYMONTH=4
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19450524T020000
RDATE;VALUE=DATE-TIME:19450524T020000
RDATE;VALUE=DATE-TIME:19470511T030000
TZNAME:CEMT
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19450924T030000
RDATE;VALUE=DATE-TIME:19450924T030000
RDATE;VALUE=DATE-TIME:19470629T030000
TZNAME:CEST
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19460101T000000
RDATE;VALUE=DATE-TIME:19460101T000000
RDATE;VALUE=DATE-TIME:19800101T000000
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
END:STANDARD
BEGIN:STANDARD
DTSTART:19471005T030000
RRULE:FREQ=YEARLY;UNTIL=19491002T010000Z;BYDAY=1SU;BYMONTH=10
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
BEGIN:STANDARD
DTSTART:19800928T030000
RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19810329T020000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19961027T030000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20161026T154648Z
DTEND;TZID=Europe/Berlin:20161103T183000
DTSTAMP:20161026T154649Z
DTSTART;TZID=Europe/Berlin:20161103T180000
LAST-MODIFIED:20161026T154648Z
LOCATION:Naturpark Altmühltal\nKanalstraße 5\n91757
Treuchtlingen\nDeutschland
SEQUENCE:0
SUMMARY:Friseur
UID:003AFB7E-BA60-481A-A087-23024D956074
X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-ADDRESS=Kanalstraße 5\\n91757
Treuchtlingen\\nDeutschland;X-APPLE-RADIUS=100;X-APPLE-REFERENCEFRAME=1;
X-TITLE=Naturpark Altmühltal:geo:48.954682,10.909644
END:VEVENT
BEGIN:VEVENT
DTEND;TZID=Europe/Berlin:20160616T213000
UID:015A230B-1627-4C27-939B-DB0B54F8CF26
DTSTAMP:20160616T173403Z
LOCATION:Römerstraße 49
URL;VALUE=URI:message:
%3C1836419472.103507.1464935907579.JavaMail.open-xchange@omgreatgod.store%
3E
SEQUENCE:0
SUMMARY:Weinabend Franken – Castell
DTSTART;TZID=Europe/Berlin:20160616T193000
CREATED:20160603T100150Z
LAST-MODIFIED:20160603T100150Z
END:VEVENT
BEGIN:VEVENT
CREATED:20151209T212646Z
DTEND;TZID=Europe/Berlin:20151209T110000
DTSTAMP:20160401T132640Z
DTSTART;TZID=Europe/Berlin:20151209T100000
LAST-MODIFIED:20160401T132551Z
RRULE:FREQ=YEARLY
SEQUENCE:1
SUMMARY:Geburtstag
UID:09094143-005B-478F-BF37-10316FC9490B
END:VEVENT
BEGIN:VEVENT
CREATED:20160222T073027Z
DTEND;TZID=Europe/Berlin:20160222T173000
DTSTAMP:20160926T150116Z
DTSTART;TZID=Europe/Berlin:20160222T161500
EXDATE;TZID=Europe/Berlin:20160321T161500
EXDATE;TZID=Europe/Berlin:20160328T161500
EXDATE;TZID=Europe/Berlin:20160516T161500
EXDATE;TZID=Europe/Berlin:20160523T161500
EXDATE;TZID=Europe/Berlin:20160801T161500
EXDATE;TZID=Europe/Berlin:20160808T161500
EXDATE;TZID=Europe/Berlin:20160815T161500
EXDATE;TZID=Europe/Berlin:20160822T161500
EXDATE;TZID=Europe/Berlin:20160829T161500
EXDATE;TZID=Europe/Berlin:20160905T161500
EXDATE;TZID=Europe/Berlin:20160912T161500
LAST-MODIFIED:20160926T150115Z
RRULE:FREQ=WEEKLY;UNTIL=20161001T215959Z
SEQUENCE:0
SUMMARY:Kinderturnen
UID:0ED5515F-D6C2-4678-9EB1-8C483A12C410
END:VEVENT
END:VCALENDAR

Wyświetl plik

@ -0,0 +1,305 @@
BEGIN:VCALENDAR
VERSION:2.0
X-WR-CALNAME:Der Wir Kalender
X-WR-CALDESC:
X-APPLE-CALENDAR-COLOR:#ff2d55FF
BEGIN:VTIMEZONE
TZID:US/Pacific
X-LIC-LOCATION:US/Pacific
BEGIN:STANDARD
DTSTART:18831118T120702
RDATE;VALUE=DATE-TIME:18831118T120702
TZNAME:PST
TZOFFSETFROM:-0752
TZOFFSETTO:-0800
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19180331T020000
RRULE:FREQ=YEARLY;UNTIL=19190330T100000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19181027T020000
RRULE:FREQ=YEARLY;UNTIL=19191026T090000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19420209T020000
RDATE;VALUE=DATE-TIME:19420209T020000
TZNAME:PWT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19450814T160000
RDATE;VALUE=DATE-TIME:19450814T160000
TZNAME:PPT
TZOFFSETFROM:-0700
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19450930T020000
RDATE;VALUE=DATE-TIME:19450930T020000
RDATE;VALUE=DATE-TIME:19490101T020000
TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
END:STANDARD
BEGIN:STANDARD
DTSTART:19460101T000000
RDATE;VALUE=DATE-TIME:19460101T000000
RDATE;VALUE=DATE-TIME:19670101T000000
TZNAME:PST
TZOFFSETFROM:-0800
TZOFFSETTO:-0800
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19480314T020100
RDATE;VALUE=DATE-TIME:19480314T020100
RDATE;VALUE=DATE-TIME:19740106T020000
RDATE;VALUE=DATE-TIME:19750223T020000
TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19500430T010000
RRULE:FREQ=YEARLY;UNTIL=19660424T090000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19500924T020000
RRULE:FREQ=YEARLY;UNTIL=19610924T090000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
END:STANDARD
BEGIN:STANDARD
DTSTART:19621028T020000
RRULE:FREQ=YEARLY;UNTIL=19661030T090000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19670430T020000
RRULE:FREQ=YEARLY;UNTIL=19730429T100000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19671029T020000
RRULE:FREQ=YEARLY;UNTIL=20061029T090000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19760425T020000
RRULE:FREQ=YEARLY;UNTIL=19860427T100000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19870405T020000
RRULE:FREQ=YEARLY;UNTIL=20060402T100000Z;BYDAY=1SU;BYMONTH=4
TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:20070311T020000
RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:20071104T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:Europe/Berlin
X-LIC-LOCATION:Europe/Berlin
BEGIN:STANDARD
DTSTART:18930401T000000
RDATE;VALUE=DATE-TIME:18930401T000000
TZNAME:CEST
TZOFFSETFROM:+0053
TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19160430T230000
RDATE;VALUE=DATE-TIME:19160430T230000
RDATE;VALUE=DATE-TIME:19400401T020000
RDATE;VALUE=DATE-TIME:19430329T020000
RDATE;VALUE=DATE-TIME:19460414T020000
RDATE;VALUE=DATE-TIME:19470406T030000
RDATE;VALUE=DATE-TIME:19480418T020000
RDATE;VALUE=DATE-TIME:19490410T020000
RDATE;VALUE=DATE-TIME:19800406T020000
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19161001T010000
RDATE;VALUE=DATE-TIME:19161001T010000
RDATE;VALUE=DATE-TIME:19421102T030000
RDATE;VALUE=DATE-TIME:19431004T030000
RDATE;VALUE=DATE-TIME:19441002T030000
RDATE;VALUE=DATE-TIME:19451118T030000
RDATE;VALUE=DATE-TIME:19461007T030000
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19170416T020000
RRULE:FREQ=YEARLY;UNTIL=19180415T010000Z;BYDAY=3MO;BYMONTH=4
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19170917T030000
RRULE:FREQ=YEARLY;UNTIL=19180916T010000Z;BYDAY=3MO;BYMONTH=9
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19440403T020000
RRULE:FREQ=YEARLY;UNTIL=19450402T010000Z;BYDAY=1MO;BYMONTH=4
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19450524T020000
RDATE;VALUE=DATE-TIME:19450524T020000
RDATE;VALUE=DATE-TIME:19470511T030000
TZNAME:CEMT
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19450924T030000
RDATE;VALUE=DATE-TIME:19450924T030000
RDATE;VALUE=DATE-TIME:19470629T030000
TZNAME:CEST
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19460101T000000
RDATE;VALUE=DATE-TIME:19460101T000000
RDATE;VALUE=DATE-TIME:19800101T000000
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
END:STANDARD
BEGIN:STANDARD
DTSTART:19471005T030000
RRULE:FREQ=YEARLY;UNTIL=19491002T010000Z;BYDAY=1SU;BYMONTH=10
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
BEGIN:STANDARD
DTSTART:19800928T030000
RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19810329T020000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19961027T030000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20161026T154648Z
DTEND;TZID=Europe/Berlin:20161103T183000
DTSTAMP:20161026T154649Z
DTSTART;TZID=Europe/Berlin:20161103T180000
LAST-MODIFIED:20161026T154648Z
LOCATION:Naturpark Altmühltal\nKanalstraße 5\n91757
Treuchtlingen\nDeutschland
SEQUENCE:0
SUMMARY:Friseur
UID:003AFB7E-BA60-481A-A087-23024D956074
X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-ADDRESS=Kanalstraße 5\\n91757
Treuchtlingen\\nDeutschland;X-APPLE-RADIUS=100;X-APPLE-REFERENCEFRAME=1;
X-TITLE=Naturpark Altmühltal:geo:48.954682,10.909644
END:VEVENT
BEGIN:VEVENT
DTEND;TZID=Europe/Berlin:20160616T213000
UID:015A230B-1627-4C27-939B-DB0B54F8CF26
DTSTAMP:20160616T173403Z
LOCATION:Römerstraße 49
URL;VALUE=URI:message:
%3C1836419472.103507.1464935907579.JavaMail.open-xchange@omgreatgod.store%
3E
SEQUENCE:0
SUMMARY:Weinabend Franken – Castell
DTSTART;TZID=Europe/Berlin:20160616T193000
CREATED:20160603T100150Z
LAST-MODIFIED:20160603T100150Z
END:VEVENT
BEGIN:VEVENT
CREATED:20151209T212646Z
DTEND;TZID=Europe/Berlin:20151209T110000
DTSTAMP:20160401T132640Z
DTSTART;TZID=Europe/Berlin:20151209T100000
LAST-MODIFIED:20160401T132551Z
RRULE:FREQ=YEARLY
SEQUENCE:1
SUMMARY:Geburtstag
UID:09094143-005B-478F-BF37-10316FC9490B
END:VEVENT
BEGIN:VEVENT
CREATED:20160222T073027Z
DTEND;TZID=Europe/Berlin:20160222T173000
DTSTAMP:20160926T150116Z
DTSTART;TZID=Europe/Berlin:20160222T161500
EXDATE;TZID=Europe/Berlin:20160321T161500
EXDATE;TZID=Europe/Berlin:20160328T161500
EXDATE;TZID=Europe/Berlin:20160516T161500
EXDATE;TZID=Europe/Berlin:20160523T161500
EXDATE;TZID=Europe/Berlin:20160801T161500
EXDATE;TZID=Europe/Berlin:20160808T161500
EXDATE;TZID=Europe/Berlin:20160815T161500
EXDATE;TZID=Europe/Berlin:20160822T161500
EXDATE;TZID=Europe/Berlin:20160829T161500
EXDATE;TZID=Europe/Berlin:20160905T161500
EXDATE;TZID=Europe/Berlin:20160912T161500
LAST-MODIFIED:20160926T150115Z
RRULE:FREQ=WEEKLY;UNTIL=20161001T215959Z
SEQUENCE:0
SUMMARY:Kinderturnen
UID:0ED5515F-D6C2-4678-9EB1-8C483A12C410
END:VEVENT
END:VCALENDAR

Wyświetl plik

@ -0,0 +1,62 @@
import unittest
import icalevents.icaldownload
class ICalDownloadTests(unittest.TestCase):
def test_apple_data_fix(self):
data = """
DTSTART:18831118T120702
RDATE;VALUE=DATE-TIME:18831118T120702
TZNAME:PST
TZOFFSETFROM:+5328
TZOFFSETTO:-0800
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19180331T020000
"""
expected = """
DTSTART:18831118T120702
RDATE;VALUE=DATE-TIME:18831118T120702
TZNAME:PST
TZOFFSETFROM:+0053
TZOFFSETTO:-0800
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19180331T020000
"""
res = icalevents.icaldownload.apple_data_fix(data)
self.assertEqual(res, expected, "fix invalid TZOFFSETFROM")
def test_apple_url_fix(self):
data = "webcal://blah.blub/webcal/"
expected = "http://blah.blub/webcal/"
res = icalevents.icaldownload.apple_url_fix(data)
self.assertEqual(res, expected, "fix url protocol")
def test_data_from_file_google(self):
file = "test/test_data/basic.ics"
result = "test/test_data/basic_content.txt"
expected = None
with open(result, mode='r', encoding='utf-8') as f:
expected = f.read()
content = icalevents.icaldownload.ICalDownload().data_from_file(file)
self.assertEqual(expected, content, "content form iCal file, google format")
def test_data_from_file_apple(self):
file = "test/test_data/icloud.ics"
result = "test/test_data/icloud_content.txt"
expected = None
with open(result, mode='r', encoding='utf-8') as f:
expected = f.read()
content = icalevents.icaldownload.ICalDownload().data_from_file(file, apple_fix=True)
self.assertEqual(expected, content, "content form iCal file, google format")

Wyświetl plik

@ -0,0 +1,90 @@
import unittest
import icalevents.icalparser
from datetime import datetime, date
from pytz import utc
class ICalParserTests(unittest.TestCase):
def setUp(self):
self.eventA = icalevents.icalparser.Event()
self.eventA.uid = 1234
self.eventA.start = datetime(year=2017, month=2, day=3, hour=12, minute=5, tzinfo=utc)
self.eventA.end = datetime(year=2017, month=2, day=3, hour=15, minute=5, tzinfo=utc)
self.eventA.all_day = False
self.eventA.summary = "Event A"
self.eventB = icalevents.icalparser.Event()
self.eventB.uid = 1234
self.eventB.start = datetime(year=2017, month=2, day=1, hour=15, minute=5, tzinfo=utc)
self.eventB.end = datetime(year=2017, month=2, day=1, hour=16, minute=5, tzinfo=utc)
self.eventB.all_day = False
self.eventB.summary = "Event B"
def test_now(self):
n = icalevents.icalparser.now()
self.assertTrue(type(n) == datetime, "result of now has type datetime")
self.assertTrue(n.tzinfo, "result of now has a timezone info")
def test_event_copy_to(self):
new_start = utc.normalize(datetime(year=2017, month=2, day=5, hour=12, minute=5, tzinfo=utc))
eventC = self.eventA.copy_to(new_start)
self.assertNotEqual(eventC.uid, self.eventA.uid, "new event has new UID")
self.assertEqual(eventC.start, new_start, "new event has new start")
self.assertEqual(eventC.end - eventC.start, self.eventA.end - self.eventA.start, "new event has same duration")
self.assertEqual(eventC.all_day , False, "new event is no all day event")
self.assertEqual(eventC.summary, self.eventA.summary, "copy to: summary")
def test_event_order(self):
self.assertTrue(self.eventA > self.eventB, "order of events")
def test_next_year(self):
date = utc.normalize(datetime(year=2016, month=1, day=1, hour=0, minute=0, tzinfo=utc))
other = icalevents.icalparser.next_year_at(date, count=2)
self.assertEqual(date.year + 2, other.year, "year is changed")
self.assertEqual(date.month, other.month, "month is same")
self.assertEqual(date.day, other.day, "day is same")
self.assertEqual(date.hour, other.hour, "hour is same")
self.assertEqual(date.minute, other.minute, "minute is same")
self.assertEqual(date.tzinfo, other.tzinfo, "timezone is same")
def test_next_month(self):
dt = utc.normalize(datetime(year=2016, month=10, day=1, hour=0, minute=0, tzinfo=utc))
other = icalevents.icalparser.next_month_at(dt, count=5)
self.assertEqual(2017, other.year, "year is same")
self.assertEqual(3, other.month, "month is changed")
self.assertEqual(dt.day, other.day, "day is same")
self.assertEqual(dt.hour, other.hour, "hour is same")
self.assertEqual(dt.minute, other.minute, "minute is same")
self.assertEqual(dt.tzinfo, other.tzinfo, "timezone is same")
def test_normalize(self):
dt = date(year=2016, month=11, day=13)
norm = icalevents.icalparser.normalize(dt)
self.assertTrue(type(norm) is datetime, "type is datetime")
self.assertEqual(2016, norm.year, "year")
self.assertEqual(11, norm.month, "month")
self.assertEqual(13, norm.day, "day")
self.assertEqual(0, norm.hour, "hour")
self.assertEqual(0, norm.minute, "minute")
self.assertEqual(0, norm.second, "second")
self.assertEqual(0, norm.microsecond, "microsecond")
self.assertEqual(utc, norm.tzinfo, "timezone")
def test_in_range(self):
range_start = datetime(year=2017, month=2, day=2, hour=12, minute=0, tzinfo=utc)
range_end = datetime(year=2017, month=2, day=4, hour=12, minute=0, tzinfo=utc)
events = [self.eventA, self.eventB]
filtered = icalevents.icalparser.in_range(events, range_start, range_end)
self.assertEqual(len(filtered), 1, "one event is left")
self.assertEqual(filtered[0], self.eventA, "event A is left")