// from https://tools.ietf.org/html/rfc5545#section-3.6.1 pub static TEST_EVENT_MULTIDAY_ALLDAY: &str = indoc!( " BEGIN:VCALENDAR VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN BEGIN:VEVENT UID:20070423T123432Z-541111@example.com DTSTAMP:20070423T123432Z DTSTART;VALUE=DATE:20070628 DTEND;VALUE=DATE:20070709 SUMMARY:Festival International de Jazz de Montreal LOCATION:LDB Lobby TRANSP:TRANSPARENT END:VEVENT END:VCALENDAR " ); pub static TEST_EVENT_MULTIDAY: &str = indoc!( " BEGIN:VCALENDAR VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN BEGIN:VEVENT UID:20070423T123432Z-541111@example.com DTSTAMP:20070423T123432Z DTSTART:20070628T132900 DTEND:20070709T072900 SUMMARY:Festival International de Jazz de Montreal LOCATION:LDB Lobby TRANSP:TRANSPARENT END:VEVENT END:VCALENDAR " ); pub static TEST_EVENT_MULTIDAY_LASTMODIFIED: &str = indoc!( " BEGIN:VCALENDAR VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN BEGIN:VEVENT UID:20070423T123432Z-541111@example.com DTSTAMP:20070423T123432Z DTSTART;VALUE=DATE:20070628T132900 DTEND;VALUE=DATE:20070709T072900 SUMMARY:Festival International de Jazz de Montreal LAST-MODIFIED:20070423T123432Z LOCATION:LDB Lobby TRANSP:TRANSPARENT END:VEVENT END:VCALENDAR " ); pub static TEST_DTSTART_ONLY_DATE: &str = indoc!( " BEGIN:VCALENDAR VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN BEGIN:VEVENT UID:20070423T123432Z-541111@example.com DTSTAMP:20070423T123432Z DTSTART;VALUE=DATE:20070628 SUMMARY:Festival International de Jazz de Montreal LOCATION:LDB Lobby TRANSP:TRANSPARENT END:VEVENT END:VCALENDAR " ); pub static TEST_DTSTART_ONLY_DATETIME: &str = indoc!( " BEGIN:VCALENDAR VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN BEGIN:VEVENT UID:20070423T123432Z-541111@example.com DTSTAMP:20070423T123432Z DTSTART:20070628T132900 SUMMARY:Festival International de Jazz de Montreal LOCATION:LDB Lobby TRANSP:TRANSPARENT END:VEVENT END:VCALENDAR " ); pub static TEST_EVENT_EMPTY_SUMMARY: &str = indoc!( " BEGIN:VCALENDAR VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN BEGIN:VEVENT UID:20070423T123432Z-541111@example.com DTSTAMP:20070423T123432Z DTSTART;VALUE=DATE:20070628 DTEND;VALUE=DATE:20070709 SUMMARY: LOCATION:LDB Lobby TRANSP:TRANSPARENT END:VEVENT END:VCALENDAR " ); pub static TEST_EVENT_NO_UID: &str = indoc!( " BEGIN:VCALENDAR VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN BEGIN:VEVENT DTSTAMP:20070423T123432Z DTSTART;VALUE=DATE:20070628 DTEND;VALUE=DATE:20070709 SUMMARY:Festival International de Jazz de Montreal LOCATION:LDB Lobby TRANSP:TRANSPARENT END:VEVENT END:VCALENDAR " ); pub static TEST_EVENT_NO_PRODID: &str = indoc!( " BEGIN:VCALENDAR VERSION:2.0 BEGIN:VEVENT UID:20070423T123432Z-541111@example.com DTSTAMP:20070423T123432Z DTSTART;VALUE=DATE:20070628 DTEND;VALUE=DATE:20070709 SUMMARY:Festival International de Jazz de Montreal LOCATION:LDB Lobby TRANSP:TRANSPARENT END:VEVENT END:VCALENDAR " ); // from https://tools.ietf.org/html/rfc5545#section-4 pub static TEST_EVENT_ONE_MEETING: &str = indoc!( r" BEGIN:VCALENDAR METHOD:xyz VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN BEGIN:VEVENT DTSTAMP:19970324T120000Z SEQUENCE:0 UID:uid3@example.com ORGANIZER:mailto:jdoe@example.com ATTENDEE;RSVP=TRUE:mailto:jsmith@example.com DTSTART:19970324T123000Z DTEND:19970324T210000Z CATEGORIES:MEETING,PROJECT CLASS:PUBLIC SUMMARY:Calendaring Interoperability Planning Meeting DESCRIPTION:Discuss how we can test c&s interoperability\n using iCalendar and other IETF standards. LOCATION:LDB Lobby ATTACH;FMTTYPE=application/postscript:ftp://example.com/pub/conf/bkgrnd.ps END:VEVENT END:VCALENDAR " ); pub static TEST_EVENT_RECUR: &str = indoc!( " BEGIN:VCALENDAR VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN BEGIN:VEVENT UID:autocryptthursday DTSTART;VALUE=DATE:20181011 DURATION:P2D SUMMARY:Autocrypt Thursdays RRULE:FREQ=WEEKLY;COUNT=10 END:VEVENT END:VCALENDAR " ); pub static TEST_EVENT_WITH_TIMEZONE_COMPONENT: &str = indoc!( " BEGIN:VCALENDAR VERSION:2.0 PRODID:-//PIMUTILS.ORG//NONSGML khal / icalendar //EN BEGIN:VTIMEZONE TZID:Europe/Berlin BEGIN:DAYLIGHT DTSTART;VALUE=DATE-TIME:20180325T030000 TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 END:DAYLIGHT BEGIN:STANDARD DTSTART;VALUE=DATE-TIME:20181028T020000 TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 END:STANDARD END:VTIMEZONE BEGIN:VEVENT SUMMARY:Some Event DTSTART;TZID=Europe/Berlin;VALUE=DATE-TIME:20181026T133000 DTEND;TZID=Europe/Berlin;VALUE=DATE-TIME:20181026T160000 DTSTAMP;VALUE=DATE-TIME:20181022T145405Z UID:O2G1SKNFDGC1OZ1675I1A9OFQOFZXTNONYNO SEQUENCE:1 LOCATION:Some Location END:VEVENT END:VCALENDAR " ); pub static TEST_MULTIPLE_EVENTS: &str = indoc!( " BEGIN:VCALENDAR VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN BEGIN:VEVENT UID:uid1 DTSTAMP:20070423T123432Z DTSTART;VALUE=DATE:20070628 SUMMARY:First Event END:VEVENT BEGIN:VEVENT UID:uid2 DTSTAMP:20070423T123432Z DTSTART;VALUE=DATE:20070628 SUMMARY:Second Event END:VEVENT END:VCALENDAR " ); pub static TEST_NO_DTSTART: &str = indoc!( " BEGIN:VCALENDAR VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN BEGIN:VEVENT UID:uid3 DTSTAMP:20070423T123432Z END:VEVENT END:VCALENDAR " ); pub static TEST_NO_SUMMARY: &str = indoc!( " BEGIN:VCALENDAR VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN BEGIN:VEVENT UID:uid3 DTSTAMP:20070423T123432Z DTSTART;VALUE=DATE:20070628 END:VEVENT END:VCALENDAR " ); pub static TEST_BARE_EVENT: &str = indoc!( " BEGIN:VEVENT UID:uid4 DTSTAMP:20070423T123432Z DTSTART;VALUE=DATE:20070628 END:VEVENT " ); pub static TEST_EVENT_WITH_X_LIC_ERROR: &str = indoc!( " BEGIN:VCALENDAR PRODID:CommuniGate Pro 6.2.5 VERSION:2.0 BEGIN:VEVENT DTSTAMP:20180821T103922Z UID:1 SUMMARY:Summary DTSTART:20180516T093000Z DTEND:20180516T110000Z X-MICROSOFT-CDO-BUSYSTATUS:BUSY LAST-MODIFIED:20180821T103105Z CREATED:20180404T130941Z PRIORITY:5 STATUS:CONFIRMED X-LIC-ERROR:No value for LOCATION property. Removing entire property: END:VEVENT END:VCALENDAR " ); use chrono::{DateTime, TimeZone, Utc}; lazy_static! { pub static ref NOW_TEST: DateTime = Utc.ymd(2013, 01, 01).and_hms(1, 2, 3); }