diff --git a/Ical.Net.Tests/Calendars/Recurrence/RecurrenceTestCases.txt b/Ical.Net.Tests/Calendars/Recurrence/RecurrenceTestCases.txt new file mode 100644 index 000000000..05dafe278 --- /dev/null +++ b/Ical.Net.Tests/Calendars/Recurrence/RecurrenceTestCases.txt @@ -0,0 +1,4 @@ +# Monday and Thursday, 3 times. +RRULE:FREQ=WEEKLY;BYDAY=MO,TH;COUNT=3 +DTSTART:20241024 +INSTANCES:20241024,20241028,20241031 diff --git a/Ical.Net.Tests/Ical.Net.Tests.csproj b/Ical.Net.Tests/Ical.Net.Tests.csproj index dbb76431b..5d9f1c03d 100644 --- a/Ical.Net.Tests/Ical.Net.Tests.csproj +++ b/Ical.Net.Tests/Ical.Net.Tests.csproj @@ -18,7 +18,10 @@ - + + + + diff --git a/Ical.Net.Tests/IcsFiles.cs b/Ical.Net.Tests/IcsFiles.cs index b6610b31c..64ddc45ce 100644 --- a/Ical.Net.Tests/IcsFiles.cs +++ b/Ical.Net.Tests/IcsFiles.cs @@ -158,5 +158,10 @@ internal static string ReadStream(string manifestResource) internal static string YearlyCountByMonth1 => ReadStream("Ical.Net.Tests.Calendars.Recurrence.YearlyCountByMonth1.ics"); internal static string YearlyCountByYearDay1 => ReadStream("Ical.Net.Tests.Calendars.Recurrence.YearlyCountByYearDay1.ics"); internal static string YearlyInterval1 => ReadStream("Ical.Net.Tests.Calendars.Recurrence.YearlyInterval1.ics"); + + internal static string RecurrrenceTestCases => ReadStream("Ical.Net.Tests.Calendars.Recurrence.RecurrenceTestCases.txt"); + + internal static string LibicalIcalrecurTest => ReadStream("Ical.Net.Tests.contrib.libical.icalrecur_test.out"); + } } diff --git a/Ical.Net.Tests/RecurrenceTests.cs b/Ical.Net.Tests/RecurrenceTests.cs index ec52cef11..039982187 100644 --- a/Ical.Net.Tests/RecurrenceTests.cs +++ b/Ical.Net.Tests/RecurrenceTests.cs @@ -3677,5 +3677,116 @@ public void InclusiveRruleUntil() var occurrences = firstEvent.GetOccurrences(startSearch, endSearch); Assert.That(occurrences, Has.Count.EqualTo(5)); } + + public class RecurrenceTestCase + { + public int LineNumber { get; set; } + + public string RRule { get; set; } + + public CalDateTime DtStart { get; set; } + + public CalDateTime StartAt { get; set; } + + public IReadOnlyList Instances { get; set; } + + public override string ToString() + => $"Line {LineNumber}: {DtStart}, {RRule}"; + } + + private static IEnumerable ParseTestCaseFile(string fileContent) + { + RecurrenceTestCase current = null; + + var rd = new StringReader(fileContent); + var lineNo = 0; + + for (string line = rd.ReadLine(); line != null; line = rd.ReadLine()) + { + lineNo++; + + if (string.IsNullOrEmpty(line)) + { + if (current != null) + { + yield return current; + current = null; + } + continue; + } + + if (line.StartsWith("#")) + continue; + + current = current ?? new RecurrenceTestCase(); + + var m = Regex.Match(line, @"^(?[A-Z-]+):(?.*)$"); + if (!m.Success) + continue; + + var hdr = m.Groups["h"].Value; + var val = m.Groups["v"].Value; + + switch (hdr) + { + case "RRULE": + current.RRule = val; + current.LineNumber = lineNo; + break; + + case "DTSTART": + current.DtStart = new CalDateTime(val) { TzId = "UTC" }; + break; + + case "START-AT": + current.StartAt = new CalDateTime(val) { TzId = "UTC" }; + break; + + case "INSTANCES": + current.Instances = val.Split(',').Select(dt => new CalDateTime(dt) { TzId = "UTC" }).ToList(); + break; + } + } + + if (current != null) + yield return current; + } + + private static IEnumerable TestLibicalTestCasesSource + => ParseTestCaseFile(IcsFiles.LibicalIcalrecurTest); + + [TestCaseSource(nameof(TestLibicalTestCasesSource))] + public void TestLibicalTestCases(RecurrenceTestCase testCase) + => ExecuteRecurrenceTestCase(testCase); + + private static IEnumerable TestFileBasedRecurrenceTestCaseSource + => ParseTestCaseFile(IcsFiles.RecurrrenceTestCases); + + [TestCaseSource(nameof(TestFileBasedRecurrenceTestCaseSource))] + public void TestFileBasedRecurrenceTestCase(RecurrenceTestCase testCase) + => ExecuteRecurrenceTestCase(testCase); + + public void ExecuteRecurrenceTestCase(RecurrenceTestCase testCase) + { + Calendar cal = new Calendar(); + + CalendarEvent evt = cal.Create(); + evt.Summary = "Event summary"; + + // Start at midnight, UTC time + evt.Start = testCase.DtStart; + evt.RecurrenceRules.Add(new RecurrencePattern(testCase.RRule) + { + RestrictionType = RecurrenceRestrictionType.NoRestriction, + }); + + var occurrences = evt.GetOccurrences(testCase.StartAt?.Value ?? DateTime.MinValue, DateTime.MaxValue) + .OrderBy(x => x) + .ToList(); + + var startDates = occurrences.Select(x => x.Period.StartTime).ToList(); + + Assert.That(startDates, Is.EqualTo(testCase.Instances)); + } } } diff --git a/Ical.Net.Tests/contrib/libical/LICENSE.txt b/Ical.Net.Tests/contrib/libical/LICENSE.txt new file mode 100644 index 000000000..ae5fcf4cc --- /dev/null +++ b/Ical.Net.Tests/contrib/libical/LICENSE.txt @@ -0,0 +1,33 @@ +libical is distributed under two licenses. +You may choose the terms of either: + + * The Mozilla Public License (MPL) v2.0 + + or + + * The GNU Lesser General Public License (LGPL) v2.1 + +---------------------------------------------------------------------- + +Software distributed under these licenses is distributed on an "AS +IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or +implied. See the License for the specific language governing rights +and limitations under the License. +Libical is distributed under both the LGPL and the MPL. The MPL +notice, reproduced below, covers the use of either of the licenses. + +---------------------------------------------------------------------- + + The Original Code is libical. + + The Initial Developer of the Original Code is Eric Busboom + + All Rights Reserved. + + Contributor(s): See individual source files. + + Copyright: The libical developers + + +The project that contains this LICENSE.txt file (ICal.Net) uses the code under the +Mozilla Public License (MPL) v2.0. diff --git a/Ical.Net.Tests/contrib/libical/icalrecur_test.out b/Ical.Net.Tests/contrib/libical/icalrecur_test.out new file mode 100644 index 000000000..ddc57c848 --- /dev/null +++ b/Ical.Net.Tests/contrib/libical/icalrecur_test.out @@ -0,0 +1,372 @@ + +RRULE:FREQ=YEARLY;UNTIL=20000131T140000Z;BYMONTH=1;BYDAY=SU,MO,TU,WE,TH,FR,SA +DTSTART:19980101T090000 +INSTANCES:19980101T090000,19980102T090000,19980103T090000,19980104T090000,19980105T090000,19980106T090000,19980107T090000,19980108T090000,19980109T090000,19980110T090000,19980111T090000,19980112T090000,19980113T090000,19980114T090000,19980115T090000,19980116T090000,19980117T090000,19980118T090000,19980119T090000,19980120T090000,19980121T090000,19980122T090000,19980123T090000,19980124T090000,19980125T090000,19980126T090000,19980127T090000,19980128T090000,19980129T090000,19980130T090000,19980131T090000,19990101T090000,19990102T090000,19990103T090000,19990104T090000,19990105T090000,19990106T090000,19990107T090000,19990108T090000,19990109T090000,19990110T090000,19990111T090000,19990112T090000,19990113T090000,19990114T090000,19990115T090000,19990116T090000,19990117T090000,19990118T090000,19990119T090000,19990120T090000,19990121T090000,19990122T090000,19990123T090000,19990124T090000,19990125T090000,19990126T090000,19990127T090000,19990128T090000,19990129T090000,19990130T090000,19990131T090000,20000101T090000,20000102T090000,20000103T090000,20000104T090000,20000105T090000,20000106T090000,20000107T090000,20000108T090000,20000109T090000,20000110T090000,20000111T090000,20000112T090000,20000113T090000,20000114T090000,20000115T090000,20000116T090000,20000117T090000,20000118T090000,20000119T090000,20000120T090000,20000121T090000,20000122T090000,20000123T090000,20000124T090000,20000125T090000,20000126T090000,20000127T090000,20000128T090000,20000129T090000,20000130T090000,20000131T090000 +PREV-INSTANCES:20000131T090000,20000130T090000,20000129T090000,20000128T090000,20000127T090000,20000126T090000,20000125T090000,20000124T090000,20000123T090000,20000122T090000,20000121T090000,20000120T090000,20000119T090000,20000118T090000,20000117T090000,20000116T090000,20000115T090000,20000114T090000,20000113T090000,20000112T090000,20000111T090000,20000110T090000,20000109T090000,20000108T090000,20000107T090000,20000106T090000,20000105T090000,20000104T090000,20000103T090000,20000102T090000,20000101T090000,19990131T090000,19990130T090000,19990129T090000,19990128T090000,19990127T090000,19990126T090000,19990125T090000,19990124T090000,19990123T090000,19990122T090000,19990121T090000,19990120T090000,19990119T090000,19990118T090000,19990117T090000,19990116T090000,19990115T090000,19990114T090000,19990113T090000,19990112T090000,19990111T090000,19990110T090000,19990109T090000,19990108T090000,19990107T090000,19990106T090000,19990105T090000,19990104T090000,19990103T090000,19990102T090000,19990101T090000,19980131T090000,19980130T090000,19980129T090000,19980128T090000,19980127T090000,19980126T090000,19980125T090000,19980124T090000,19980123T090000,19980122T090000,19980121T090000,19980120T090000,19980119T090000,19980118T090000,19980117T090000,19980116T090000,19980115T090000,19980114T090000,19980113T090000,19980112T090000,19980111T090000,19980110T090000,19980109T090000,19980108T090000,19980107T090000,19980106T090000,19980105T090000,19980104T090000,19980103T090000,19980102T090000,19980101T090000 + +RRULE:FREQ=YEARLY;COUNT=10;BYMONTH=6,7 +DTSTART:19970610T090000 +INSTANCES:19970610T090000,19970710T090000,19980610T090000,19980710T090000,19990610T090000,19990710T090000,20000610T090000,20000710T090000,20010610T090000,20010710T090000 +PREV-INSTANCES:20010610T090000,20000710T090000,20000610T090000,19990710T090000,19990610T090000,19980710T090000,19980610T090000,19970710T090000,19970610T090000 + +RRULE:FREQ=YEARLY;INTERVAL=2;COUNT=10;BYMONTH=1,2,3 +DTSTART:19970310T090000 +INSTANCES:19970310T090000,19990110T090000,19990210T090000,19990310T090000,20010110T090000,20010210T090000,20010310T090000,20030110T090000,20030210T090000,20030310T090000 +PREV-INSTANCES:20030210T090000,20030110T090000,20010310T090000,20010210T090000,20010110T090000,19990310T090000,19990210T090000,19990110T090000,19970310T090000 + +RRULE:FREQ=YEARLY;INTERVAL=3;COUNT=10;BYYEARDAY=1,100,200 +DTSTART:19970101T090000 +INSTANCES:19970101T090000,19970410T090000,19970719T090000,20000101T090000,20000409T090000,20000718T090000,20030101T090000,20030410T090000,20030719T090000,20060101T090000 +PREV-INSTANCES:20030719T090000,20030410T090000,20030101T090000,20000718T090000,20000409T090000,20000101T090000,19970719T090000,19970410T090000,19970101T090000 + +RRULE:FREQ=YEARLY;BYDAY=20MO;COUNT=3 +DTSTART:19970519T090000 +INSTANCES:19970519T090000,19980518T090000,19990517T090000 +PREV-INSTANCES:19980518T090000,19970519T090000 + +RRULE:FREQ=YEARLY;BYWEEKNO=20;BYDAY=MO;COUNT=3 +DTSTART:19970512T090000 +INSTANCES:19970512T090000,19980511T090000,19990517T090000 +PREV-INSTANCES:19980511T090000,19970512T090000 + +RRULE:FREQ=YEARLY;BYWEEKNO=20;BYDAY=MO;WKST=SU;COUNT=3 +DTSTART:19970512T090000 +INSTANCES:19970512T090000,19980518T090000,19990517T090000 +PREV-INSTANCES:19980518T090000,19970512T090000 + +RRULE:FREQ=YEARLY;BYWEEKNO=20;BYDAY=MO;WKST=FR;COUNT=3 +DTSTART:19970512T090000 +INSTANCES:19970519T090000,19980518T090000,19990517T090000 +PREV-INSTANCES:19980518T090000,19970519T090000 + +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=TH;COUNT=11 +DTSTART:19970313T090000 +INSTANCES:19970313T090000,19970320T090000,19970327T090000,19980305T090000,19980312T090000,19980319T090000,19980326T090000,19990304T090000,19990311T090000,19990318T090000,19990325T090000 +PREV-INSTANCES:19990318T090000,19990311T090000,19990304T090000,19980326T090000,19980319T090000,19980312T090000,19980305T090000,19970327T090000,19970320T090000,19970313T090000 + +RRULE:FREQ=YEARLY;BYDAY=TH;BYMONTH=6,7,8;COUNT=39 +DTSTART:19970605T090000 +INSTANCES:19970605T090000,19970612T090000,19970619T090000,19970626T090000,19970703T090000,19970710T090000,19970717T090000,19970724T090000,19970731T090000,19970807T090000,19970814T090000,19970821T090000,19970828T090000,19980604T090000,19980611T090000,19980618T090000,19980625T090000,19980702T090000,19980709T090000,19980716T090000,19980723T090000,19980730T090000,19980806T090000,19980813T090000,19980820T090000,19980827T090000,19990603T090000,19990610T090000,19990617T090000,19990624T090000,19990701T090000,19990708T090000,19990715T090000,19990722T090000,19990729T090000,19990805T090000,19990812T090000,19990819T090000,19990826T090000 +PREV-INSTANCES:19990819T090000,19990812T090000,19990805T090000,19990729T090000,19990722T090000,19990715T090000,19990708T090000,19990701T090000,19990624T090000,19990617T090000,19990610T090000,19990603T090000,19980827T090000,19980820T090000,19980813T090000,19980806T090000,19980730T090000,19980723T090000,19980716T090000,19980709T090000,19980702T090000,19980625T090000,19980618T090000,19980611T090000,19980604T090000,19970828T090000,19970821T090000,19970814T090000,19970807T090000,19970731T090000,19970724T090000,19970717T090000,19970710T090000,19970703T090000,19970626T090000,19970619T090000,19970612T090000,19970605T090000 + +RRULE:FREQ=YEARLY;INTERVAL=4;BYMONTH=11;BYDAY=TU;BYMONTHDAY=2,3,4,5,6,7,8;COUNT=3 +DTSTART:19961105T090000 +INSTANCES:19961105T090000,20001107T090000,20041102T090000 +PREV-INSTANCES:20001107T090000,19961105T090000 + +RRULE:FREQ=YEARLY;UNTIL=20100326T000000Z;BYDAY=FR;BYYEARDAY=-275,-276,-277,-278,-279,-280,-281 +DTSTART:20060331T020000 +INSTANCES:20060331T020000,20070330T020000,20080328T020000,20090327T020000 +PREV-INSTANCES:20090327T020000,20080328T020000,20070330T020000,20060331T020000 + +RRULE:FREQ=YEARLY;UNTIL=20140301T115959Z +DTSTART:20120229T120000Z +INSTANCES:20120229T120000Z +PREV-INSTANCES:20120229T120000Z + +RRULE:FREQ=MONTHLY;COUNT=10;BYDAY=1FR +DTSTART:19970905T090000 +INSTANCES:19970905T090000,19971003T090000,19971107T090000,19971205T090000,19980102T090000,19980206T090000,19980306T090000,19980403T090000,19980501T090000,19980605T090000 +PREV-INSTANCES:19980501T090000,19980403T090000,19980306T090000,19980206T090000,19980102T090000,19971205T090000,19971107T090000,19971003T090000,19970905T090000 + +RRULE:FREQ=MONTHLY;UNTIL=19971224T000000Z;BYDAY=1FR +DTSTART:19970905T090000 +INSTANCES:19970905T090000,19971003T090000,19971107T090000,19971205T090000 +PREV-INSTANCES:19971205T090000,19971107T090000,19971003T090000,19970905T090000 + +RRULE:FREQ=MONTHLY;INTERVAL=2;COUNT=10;BYDAY=1SU,-1SU +DTSTART:19970907T090000 +INSTANCES:19970907T090000,19970928T090000,19971102T090000,19971130T090000,19980104T090000,19980125T090000,19980301T090000,19980329T090000,19980503T090000,19980531T090000 +PREV-INSTANCES:19980503T090000,19980329T090000,19980301T090000,19980125T090000,19980104T090000,19971130T090000,19971102T090000,19970928T090000,19970907T090000 + +RRULE:FREQ=MONTHLY;COUNT=6;BYDAY=-2MO +DTSTART:19970922T090000 +INSTANCES:19970922T090000,19971020T090000,19971117T090000,19971222T090000,19980119T090000,19980216T090000 +PREV-INSTANCES:19980119T090000,19971222T090000,19971117T090000,19971020T090000,19970922T090000 + +RRULE:FREQ=MONTHLY;BYMONTHDAY=-3;COUNT=6 +DTSTART:19970928T090000 +INSTANCES:19970928T090000,19971029T090000,19971128T090000,19971229T090000,19980129T090000,19980226T090000 +PREV-INSTANCES:19980129T090000,19971229T090000,19971128T090000,19971029T090000,19970928T090000 + +RRULE:FREQ=MONTHLY;COUNT=10;BYMONTHDAY=2,15 +DTSTART:19970902T090000 +INSTANCES:19970902T090000,19970915T090000,19971002T090000,19971015T090000,19971102T090000,19971115T090000,19971202T090000,19971215T090000,19980102T090000,19980115T090000 +PREV-INSTANCES:19980102T090000,19971215T090000,19971202T090000,19971115T090000,19971102T090000,19971015T090000,19971002T090000,19970915T090000,19970902T090000 + +RRULE:FREQ=MONTHLY;COUNT=10;BYMONTHDAY=1,-1 +DTSTART:19970930T090000 +INSTANCES:19970930T090000,19971001T090000,19971031T090000,19971101T090000,19971130T090000,19971201T090000,19971231T090000,19980101T090000,19980131T090000,19980201T090000 +PREV-INSTANCES:19980131T090000,19980101T090000,19971231T090000,19971201T090000,19971130T090000,19971101T090000,19971031T090000,19971001T090000,19970930T090000 + +RRULE:FREQ=MONTHLY;INTERVAL=18;COUNT=10;BYMONTHDAY=10,11,12,13,14,15 +DTSTART:19970910T090000 +INSTANCES:19970910T090000,19970911T090000,19970912T090000,19970913T090000,19970914T090000,19970915T090000,19990310T090000,19990311T090000,19990312T090000,19990313T090000 +PREV-INSTANCES:19990312T090000,19990311T090000,19990310T090000,19970915T090000,19970914T090000,19970913T090000,19970912T090000,19970911T090000,19970910T090000 + +RRULE:FREQ=MONTHLY;INTERVAL=2;BYDAY=TU;COUNT=18 +DTSTART:19970902T090000 +INSTANCES:19970902T090000,19970909T090000,19970916T090000,19970923T090000,19970930T090000,19971104T090000,19971111T090000,19971118T090000,19971125T090000,19980106T090000,19980113T090000,19980120T090000,19980127T090000,19980303T090000,19980310T090000,19980317T090000,19980324T090000,19980331T090000 +PREV-INSTANCES:19980324T090000,19980317T090000,19980310T090000,19980303T090000,19980127T090000,19980120T090000,19980113T090000,19980106T090000,19971125T090000,19971118T090000,19971111T090000,19971104T090000,19970930T090000,19970923T090000,19970916T090000,19970909T090000,19970902T090000 + +RRULE:FREQ=MONTHLY;BYDAY=FR;BYMONTHDAY=13;COUNT=5 +DTSTART:19970902T090000 +INSTANCES:19980213T090000,19980313T090000,19981113T090000,19990813T090000,20001013T090000 +PREV-INSTANCES:19990813T090000,19981113T090000,19980313T090000,19980213T090000 + +RRULE:FREQ=MONTHLY;BYDAY=SA;BYMONTHDAY=7,8,9,10,11,12,13;COUNT=10 +DTSTART:19970913T090000 +INSTANCES:19970913T090000,19971011T090000,19971108T090000,19971213T090000,19980110T090000,19980207T090000,19980307T090000,19980411T090000,19980509T090000,19980613T090000 +PREV-INSTANCES:19980509T090000,19980411T090000,19980307T090000,19980207T090000,19980110T090000,19971213T090000,19971108T090000,19971011T090000,19970913T090000 + +RRULE:FREQ=MONTHLY;COUNT=3;BYDAY=TU,WE,TH;BYSETPOS=3 +DTSTART:19970904T090000 +INSTANCES:19970904T090000,19971007T090000,19971106T090000 +PREV-INSTANCES:19971007T090000,19970904T090000 + +RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-2;COUNT=7 +DTSTART:19970929T090000 +INSTANCES:19970929T090000,19971030T090000,19971127T090000,19971230T090000,19980129T090000,19980226T090000,19980330T090000 +PREV-INSTANCES:19980226T090000,19980129T090000,19971230T090000,19971127T090000,19971030T090000,19970929T090000 + +RRULE:FREQ=MONTHLY;BYMONTHDAY=15,30;COUNT=5 +DTSTART:20070115T090000 +INSTANCES:20070115T090000,20070130T090000,20070215T090000,20070315T090000,20070330T090000 +PREV-INSTANCES:20070315T090000,20070215T090000,20070130T090000,20070115T090000 + +RRULE:FREQ=MONTHLY;COUNT=12 +DTSTART:20070131T090000 +INSTANCES:20070131T090000,20070331T090000,20070531T090000,20070731T090000,20070831T090000,20071031T090000,20071231T090000,20080131T090000,20080331T090000,20080531T090000,20080731T090000,20080831T090000 +PREV-INSTANCES:20080731T090000,20080531T090000,20080331T090000,20080131T090000,20071231T090000,20071031T090000,20070831T090000,20070731T090000,20070531T090000,20070331T090000,20070131T090000 + +RRULE:FREQ=WEEKLY;COUNT=10 +DTSTART:19970902T090000 +INSTANCES:19970902T090000,19970909T090000,19970916T090000,19970923T090000,19970930T090000,19971007T090000,19971014T090000,19971021T090000,19971028T090000,19971104T090000 +PREV-INSTANCES:19971028T090000,19971021T090000,19971014T090000,19971007T090000,19970930T090000,19970923T090000,19970916T090000,19970909T090000,19970902T090000 + +RRULE:FREQ=WEEKLY;UNTIL=19971224T000000Z +DTSTART:19970902T090000 +INSTANCES:19970902T090000,19970909T090000,19970916T090000,19970923T090000,19970930T090000,19971007T090000,19971014T090000,19971021T090000,19971028T090000,19971104T090000,19971111T090000,19971118T090000,19971125T090000,19971202T090000,19971209T090000,19971216T090000,19971223T090000 +PREV-INSTANCES:19971223T090000,19971216T090000,19971209T090000,19971202T090000,19971125T090000,19971118T090000,19971111T090000,19971104T090000,19971028T090000,19971021T090000,19971014T090000,19971007T090000,19970930T090000,19970923T090000,19970916T090000,19970909T090000,19970902T090000 + +RRULE:FREQ=WEEKLY;INTERVAL=2;WKST=SU;COUNT=13 +DTSTART:19970902T090000 +INSTANCES:19970902T090000,19970916T090000,19970930T090000,19971014T090000,19971028T090000,19971111T090000,19971125T090000,19971209T090000,19971223T090000,19980106T090000,19980120T090000,19980203T090000,19980217T090000 +PREV-INSTANCES:19980203T090000,19980120T090000,19980106T090000,19971223T090000,19971209T090000,19971125T090000,19971111T090000,19971028T090000,19971014T090000,19970930T090000,19970916T090000,19970902T090000 + +RRULE:FREQ=WEEKLY;UNTIL=19971007T000000Z;WKST=SU;BYDAY=TU,TH +DTSTART:19970902T090000 +INSTANCES:19970902T090000,19970904T090000,19970909T090000,19970911T090000,19970916T090000,19970918T090000,19970923T090000,19970925T090000,19970930T090000,19971002T090000 +PREV-INSTANCES:19971002T090000,19970930T090000,19970925T090000,19970923T090000,19970918T090000,19970916T090000,19970911T090000,19970909T090000,19970904T090000,19970902T090000 + +RRULE:FREQ=WEEKLY;COUNT=10;WKST=SU;BYDAY=TU,TH +DTSTART:19970902T090000 +INSTANCES:19970902T090000,19970904T090000,19970909T090000,19970911T090000,19970916T090000,19970918T090000,19970923T090000,19970925T090000,19970930T090000,19971002T090000 +PREV-INSTANCES:19970930T090000,19970925T090000,19970923T090000,19970918T090000,19970916T090000,19970911T090000,19970909T090000,19970904T090000,19970902T090000 + +RRULE:FREQ=WEEKLY;INTERVAL=4;BYDAY=SU;COUNT=4 +DTSTART:20150322T000000 +INSTANCES:20150322T000000,20150419T000000,20150517T000000,20150614T000000 +PREV-INSTANCES:20150517T000000,20150419T000000,20150322T000000 + +RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=19971224T000000Z;WKST=SU;BYDAY=MO,WE,FR +DTSTART:19970901T090000 +INSTANCES:19970901T090000,19970903T090000,19970905T090000,19970915T090000,19970917T090000,19970919T090000,19970929T090000,19971001T090000,19971003T090000,19971013T090000,19971015T090000,19971017T090000,19971027T090000,19971029T090000,19971031T090000,19971110T090000,19971112T090000,19971114T090000,19971124T090000,19971126T090000,19971128T090000,19971208T090000,19971210T090000,19971212T090000,19971222T090000 +PREV-INSTANCES:19971222T090000,19971212T090000,19971210T090000,19971208T090000,19971128T090000,19971126T090000,19971124T090000,19971114T090000,19971112T090000,19971110T090000,19971031T090000,19971029T090000,19971027T090000,19971017T090000,19971015T090000,19971013T090000,19971003T090000,19971001T090000,19970929T090000,19970919T090000,19970917T090000,19970915T090000,19970905T090000,19970903T090000,19970901T090000 + +RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=8;WKST=SU;BYDAY=TU,TH +DTSTART:19970902T090000 +INSTANCES:19970902T090000,19970904T090000,19970916T090000,19970918T090000,19970930T090000,19971002T090000,19971014T090000,19971016T090000 +PREV-INSTANCES:19971014T090000,19971002T090000,19970930T090000,19970918T090000,19970916T090000,19970904T090000,19970902T090000 + +RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=MO +DTSTART:19970805T090000 +INSTANCES:19970805T090000,19970810T090000,19970819T090000,19970824T090000 +PREV-INSTANCES:19970819T090000,19970810T090000,19970805T090000 + +RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU +DTSTART:19970805T090000 +INSTANCES:19970805T090000,19970817T090000,19970819T090000,19970831T090000 +PREV-INSTANCES:19970819T090000,19970817T090000,19970805T090000 + +# TODO: FIX (see https://github.com/ical-org/ical.net/issues/618) +# RRULE:FREQ=WEEKLY;INTERVAL=1;COUNT=2;BYDAY=MO; +# DTSTART:20141006T090000 +# INSTANCES:20141006T090000,20141013T090000 +# PREV-INSTANCES:20141006T090000 + +RRULE:FREQ=DAILY;COUNT=10 +DTSTART:19970902T090000 +INSTANCES:19970902T090000,19970903T090000,19970904T090000,19970905T090000,19970906T090000,19970907T090000,19970908T090000,19970909T090000,19970910T090000,19970911T090000 +PREV-INSTANCES:19970910T090000,19970909T090000,19970908T090000,19970907T090000,19970906T090000,19970905T090000,19970904T090000,19970903T090000,19970902T090000 + +RRULE:FREQ=DAILY;UNTIL=19971224T000000Z +DTSTART:19970902T090000 +INSTANCES:19970902T090000,19970903T090000,19970904T090000,19970905T090000,19970906T090000,19970907T090000,19970908T090000,19970909T090000,19970910T090000,19970911T090000,19970912T090000,19970913T090000,19970914T090000,19970915T090000,19970916T090000,19970917T090000,19970918T090000,19970919T090000,19970920T090000,19970921T090000,19970922T090000,19970923T090000,19970924T090000,19970925T090000,19970926T090000,19970927T090000,19970928T090000,19970929T090000,19970930T090000,19971001T090000,19971002T090000,19971003T090000,19971004T090000,19971005T090000,19971006T090000,19971007T090000,19971008T090000,19971009T090000,19971010T090000,19971011T090000,19971012T090000,19971013T090000,19971014T090000,19971015T090000,19971016T090000,19971017T090000,19971018T090000,19971019T090000,19971020T090000,19971021T090000,19971022T090000,19971023T090000,19971024T090000,19971025T090000,19971026T090000,19971027T090000,19971028T090000,19971029T090000,19971030T090000,19971031T090000,19971101T090000,19971102T090000,19971103T090000,19971104T090000,19971105T090000,19971106T090000,19971107T090000,19971108T090000,19971109T090000,19971110T090000,19971111T090000,19971112T090000,19971113T090000,19971114T090000,19971115T090000,19971116T090000,19971117T090000,19971118T090000,19971119T090000,19971120T090000,19971121T090000,19971122T090000,19971123T090000,19971124T090000,19971125T090000,19971126T090000,19971127T090000,19971128T090000,19971129T090000,19971130T090000,19971201T090000,19971202T090000,19971203T090000,19971204T090000,19971205T090000,19971206T090000,19971207T090000,19971208T090000,19971209T090000,19971210T090000,19971211T090000,19971212T090000,19971213T090000,19971214T090000,19971215T090000,19971216T090000,19971217T090000,19971218T090000,19971219T090000,19971220T090000,19971221T090000,19971222T090000,19971223T090000 +PREV-INSTANCES:19971223T090000,19971222T090000,19971221T090000,19971220T090000,19971219T090000,19971218T090000,19971217T090000,19971216T090000,19971215T090000,19971214T090000,19971213T090000,19971212T090000,19971211T090000,19971210T090000,19971209T090000,19971208T090000,19971207T090000,19971206T090000,19971205T090000,19971204T090000,19971203T090000,19971202T090000,19971201T090000,19971130T090000,19971129T090000,19971128T090000,19971127T090000,19971126T090000,19971125T090000,19971124T090000,19971123T090000,19971122T090000,19971121T090000,19971120T090000,19971119T090000,19971118T090000,19971117T090000,19971116T090000,19971115T090000,19971114T090000,19971113T090000,19971112T090000,19971111T090000,19971110T090000,19971109T090000,19971108T090000,19971107T090000,19971106T090000,19971105T090000,19971104T090000,19971103T090000,19971102T090000,19971101T090000,19971031T090000,19971030T090000,19971029T090000,19971028T090000,19971027T090000,19971026T090000,19971025T090000,19971024T090000,19971023T090000,19971022T090000,19971021T090000,19971020T090000,19971019T090000,19971018T090000,19971017T090000,19971016T090000,19971015T090000,19971014T090000,19971013T090000,19971012T090000,19971011T090000,19971010T090000,19971009T090000,19971008T090000,19971007T090000,19971006T090000,19971005T090000,19971004T090000,19971003T090000,19971002T090000,19971001T090000,19970930T090000,19970929T090000,19970928T090000,19970927T090000,19970926T090000,19970925T090000,19970924T090000,19970923T090000,19970922T090000,19970921T090000,19970920T090000,19970919T090000,19970918T090000,19970917T090000,19970916T090000,19970915T090000,19970914T090000,19970913T090000,19970912T090000,19970911T090000,19970910T090000,19970909T090000,19970908T090000,19970907T090000,19970906T090000,19970905T090000,19970904T090000,19970903T090000,19970902T090000 + +RRULE:FREQ=DAILY;INTERVAL=2;COUNT=20 +DTSTART:19970902T090000 +INSTANCES:19970902T090000,19970904T090000,19970906T090000,19970908T090000,19970910T090000,19970912T090000,19970914T090000,19970916T090000,19970918T090000,19970920T090000,19970922T090000,19970924T090000,19970926T090000,19970928T090000,19970930T090000,19971002T090000,19971004T090000,19971006T090000,19971008T090000,19971010T090000 +PREV-INSTANCES:19971008T090000,19971006T090000,19971004T090000,19971002T090000,19970930T090000,19970928T090000,19970926T090000,19970924T090000,19970922T090000,19970920T090000,19970918T090000,19970916T090000,19970914T090000,19970912T090000,19970910T090000,19970908T090000,19970906T090000,19970904T090000,19970902T090000 + +RRULE:FREQ=DAILY;INTERVAL=10;COUNT=5 +DTSTART:19970902T090000 +INSTANCES:19970902T090000,19970912T090000,19970922T090000,19971002T090000,19971012T090000 +PREV-INSTANCES:19971002T090000,19970922T090000,19970912T090000,19970902T090000 + +RRULE:FREQ=DAILY;UNTIL=20000131T140000Z;BYMONTH=1 +DTSTART:19980101T090000 +INSTANCES:19980101T090000,19980102T090000,19980103T090000,19980104T090000,19980105T090000,19980106T090000,19980107T090000,19980108T090000,19980109T090000,19980110T090000,19980111T090000,19980112T090000,19980113T090000,19980114T090000,19980115T090000,19980116T090000,19980117T090000,19980118T090000,19980119T090000,19980120T090000,19980121T090000,19980122T090000,19980123T090000,19980124T090000,19980125T090000,19980126T090000,19980127T090000,19980128T090000,19980129T090000,19980130T090000,19980131T090000,19990101T090000,19990102T090000,19990103T090000,19990104T090000,19990105T090000,19990106T090000,19990107T090000,19990108T090000,19990109T090000,19990110T090000,19990111T090000,19990112T090000,19990113T090000,19990114T090000,19990115T090000,19990116T090000,19990117T090000,19990118T090000,19990119T090000,19990120T090000,19990121T090000,19990122T090000,19990123T090000,19990124T090000,19990125T090000,19990126T090000,19990127T090000,19990128T090000,19990129T090000,19990130T090000,19990131T090000,20000101T090000,20000102T090000,20000103T090000,20000104T090000,20000105T090000,20000106T090000,20000107T090000,20000108T090000,20000109T090000,20000110T090000,20000111T090000,20000112T090000,20000113T090000,20000114T090000,20000115T090000,20000116T090000,20000117T090000,20000118T090000,20000119T090000,20000120T090000,20000121T090000,20000122T090000,20000123T090000,20000124T090000,20000125T090000,20000126T090000,20000127T090000,20000128T090000,20000129T090000,20000130T090000,20000131T090000 +PREV-INSTANCES:20000131T090000,20000130T090000,20000129T090000,20000128T090000,20000127T090000,20000126T090000,20000125T090000,20000124T090000,20000123T090000,20000122T090000,20000121T090000,20000120T090000,20000119T090000,20000118T090000,20000117T090000,20000116T090000,20000115T090000,20000114T090000,20000113T090000,20000112T090000,20000111T090000,20000110T090000,20000109T090000,20000108T090000,20000107T090000,20000106T090000,20000105T090000,20000104T090000,20000103T090000,20000102T090000,20000101T090000,19990131T090000,19990130T090000,19990129T090000,19990128T090000,19990127T090000,19990126T090000,19990125T090000,19990124T090000,19990123T090000,19990122T090000,19990121T090000,19990120T090000,19990119T090000,19990118T090000,19990117T090000,19990116T090000,19990115T090000,19990114T090000,19990113T090000,19990112T090000,19990111T090000,19990110T090000,19990109T090000,19990108T090000,19990107T090000,19990106T090000,19990105T090000,19990104T090000,19990103T090000,19990102T090000,19990101T090000,19980131T090000,19980130T090000,19980129T090000,19980128T090000,19980127T090000,19980126T090000,19980125T090000,19980124T090000,19980123T090000,19980122T090000,19980121T090000,19980120T090000,19980119T090000,19980118T090000,19980117T090000,19980116T090000,19980115T090000,19980114T090000,19980113T090000,19980112T090000,19980111T090000,19980110T090000,19980109T090000,19980108T090000,19980107T090000,19980106T090000,19980105T090000,19980104T090000,19980103T090000,19980102T090000,19980101T090000 + +RRULE:FREQ=DAILY;BYHOUR=9,10,11,12,13,14,15,16;BYMINUTE=0,20,40;COUNT=48 +DTSTART:19970902T090000 +INSTANCES:19970902T090000,19970902T092000,19970902T094000,19970902T100000,19970902T102000,19970902T104000,19970902T110000,19970902T112000,19970902T114000,19970902T120000,19970902T122000,19970902T124000,19970902T130000,19970902T132000,19970902T134000,19970902T140000,19970902T142000,19970902T144000,19970902T150000,19970902T152000,19970902T154000,19970902T160000,19970902T162000,19970902T164000,19970903T090000,19970903T092000,19970903T094000,19970903T100000,19970903T102000,19970903T104000,19970903T110000,19970903T112000,19970903T114000,19970903T120000,19970903T122000,19970903T124000,19970903T130000,19970903T132000,19970903T134000,19970903T140000,19970903T142000,19970903T144000,19970903T150000,19970903T152000,19970903T154000,19970903T160000,19970903T162000,19970903T164000 +PREV-INSTANCES:19970903T162000,19970903T160000,19970903T154000,19970903T152000,19970903T150000,19970903T144000,19970903T142000,19970903T140000,19970903T134000,19970903T132000,19970903T130000,19970903T124000,19970903T122000,19970903T120000,19970903T114000,19970903T112000,19970903T110000,19970903T104000,19970903T102000,19970903T100000,19970903T094000,19970903T092000,19970903T090000,19970902T164000,19970902T162000,19970902T160000,19970902T154000,19970902T152000,19970902T150000,19970902T144000,19970902T142000,19970902T140000,19970902T134000,19970902T132000,19970902T130000,19970902T124000,19970902T122000,19970902T120000,19970902T114000,19970902T112000,19970902T110000,19970902T104000,19970902T102000,19970902T100000,19970902T094000,19970902T092000,19970902T090000 + +RRULE:FREQ=HOURLY;INTERVAL=3;UNTIL=19970902T170000Z +DTSTART:19970902T090000 +INSTANCES:19970902T090000,19970902T120000,19970902T150000 +PREV-INSTANCES:19970902T150000,19970902T120000,19970902T090000 + +RRULE:FREQ=MINUTELY;INTERVAL=15;COUNT=6 +DTSTART:19970902T090000 +INSTANCES:19970902T090000,19970902T091500,19970902T093000,19970902T094500,19970902T100000,19970902T101500 +PREV-INSTANCES:19970902T100000,19970902T094500,19970902T093000,19970902T091500,19970902T090000 + +RRULE:FREQ=MINUTELY;INTERVAL=90;COUNT=4 +DTSTART:19970902T090000 +INSTANCES:19970902T090000,19970902T103000,19970902T120000,19970902T133000 +PREV-INSTANCES:19970902T120000,19970902T103000,19970902T090000 + +RRULE:FREQ=DAILY;BYHOUR=9,10,11,12,13,14,15,16;BYMINUTE=0,20,40;COUNT=48 +DTSTART:19970902T090000 +INSTANCES:19970902T090000,19970902T092000,19970902T094000,19970902T100000,19970902T102000,19970902T104000,19970902T110000,19970902T112000,19970902T114000,19970902T120000,19970902T122000,19970902T124000,19970902T130000,19970902T132000,19970902T134000,19970902T140000,19970902T142000,19970902T144000,19970902T150000,19970902T152000,19970902T154000,19970902T160000,19970902T162000,19970902T164000,19970903T090000,19970903T092000,19970903T094000,19970903T100000,19970903T102000,19970903T104000,19970903T110000,19970903T112000,19970903T114000,19970903T120000,19970903T122000,19970903T124000,19970903T130000,19970903T132000,19970903T134000,19970903T140000,19970903T142000,19970903T144000,19970903T150000,19970903T152000,19970903T154000,19970903T160000,19970903T162000,19970903T164000 +PREV-INSTANCES:19970903T162000,19970903T160000,19970903T154000,19970903T152000,19970903T150000,19970903T144000,19970903T142000,19970903T140000,19970903T134000,19970903T132000,19970903T130000,19970903T124000,19970903T122000,19970903T120000,19970903T114000,19970903T112000,19970903T110000,19970903T104000,19970903T102000,19970903T100000,19970903T094000,19970903T092000,19970903T090000,19970902T164000,19970902T162000,19970902T160000,19970902T154000,19970902T152000,19970902T150000,19970902T144000,19970902T142000,19970902T140000,19970902T134000,19970902T132000,19970902T130000,19970902T124000,19970902T122000,19970902T120000,19970902T114000,19970902T112000,19970902T110000,19970902T104000,19970902T102000,19970902T100000,19970902T094000,19970902T092000,19970902T090000 + +RRULE:FREQ=WEEKLY;COUNT=35;BYDAY=SU,TH +DTSTART:20111120T100000Z +INSTANCES:20111120T100000Z,20111124T100000Z,20111127T100000Z,20111201T100000Z,20111204T100000Z,20111208T100000Z,20111211T100000Z,20111215T100000Z,20111218T100000Z,20111222T100000Z,20111225T100000Z,20111229T100000Z,20120101T100000Z,20120105T100000Z,20120108T100000Z,20120112T100000Z,20120115T100000Z,20120119T100000Z,20120122T100000Z,20120126T100000Z,20120129T100000Z,20120202T100000Z,20120205T100000Z,20120209T100000Z,20120212T100000Z,20120216T100000Z,20120219T100000Z,20120223T100000Z,20120226T100000Z,20120301T100000Z,20120304T100000Z,20120308T100000Z,20120311T100000Z,20120315T100000Z,20120318T100000Z +PREV-INSTANCES:20120315T100000Z,20120311T100000Z,20120308T100000Z,20120304T100000Z,20120301T100000Z,20120226T100000Z,20120223T100000Z,20120219T100000Z,20120216T100000Z,20120212T100000Z,20120209T100000Z,20120205T100000Z,20120202T100000Z,20120129T100000Z,20120126T100000Z,20120122T100000Z,20120119T100000Z,20120115T100000Z,20120112T100000Z,20120108T100000Z,20120105T100000Z,20120101T100000Z,20111229T100000Z,20111225T100000Z,20111222T100000Z,20111218T100000Z,20111215T100000Z,20111211T100000Z,20111208T100000Z,20111204T100000Z,20111201T100000Z,20111127T100000Z,20111124T100000Z,20111120T100000Z + +RRULE:FREQ=DAILY;UNTIL=20141206T000000Z;BYMONTH=11,12,1,2,3,4,10 +DTSTART:20141030T000000Z +INSTANCES:20141030T000000Z,20141031T000000Z,20141101T000000Z,20141102T000000Z,20141103T000000Z,20141104T000000Z,20141105T000000Z,20141106T000000Z,20141107T000000Z,20141108T000000Z,20141109T000000Z,20141110T000000Z,20141111T000000Z,20141112T000000Z,20141113T000000Z,20141114T000000Z,20141115T000000Z,20141116T000000Z,20141117T000000Z,20141118T000000Z,20141119T000000Z,20141120T000000Z,20141121T000000Z,20141122T000000Z,20141123T000000Z,20141124T000000Z,20141125T000000Z,20141126T000000Z,20141127T000000Z,20141128T000000Z,20141129T000000Z,20141130T000000Z,20141201T000000Z,20141202T000000Z,20141203T000000Z,20141204T000000Z,20141205T000000Z,20141206T000000Z +PREV-INSTANCES:20141206T000000Z,20141205T000000Z,20141204T000000Z,20141203T000000Z,20141202T000000Z,20141201T000000Z,20141130T000000Z,20141129T000000Z,20141128T000000Z,20141127T000000Z,20141126T000000Z,20141125T000000Z,20141124T000000Z,20141123T000000Z,20141122T000000Z,20141121T000000Z,20141120T000000Z,20141119T000000Z,20141118T000000Z,20141117T000000Z,20141116T000000Z,20141115T000000Z,20141114T000000Z,20141113T000000Z,20141112T000000Z,20141111T000000Z,20141110T000000Z,20141109T000000Z,20141108T000000Z,20141107T000000Z,20141106T000000Z,20141105T000000Z,20141104T000000Z,20141103T000000Z,20141102T000000Z,20141101T000000Z,20141031T000000Z,20141030T000000Z + +RRULE:FREQ=YEARLY;BYWEEKNO=1,2;UNTIL=20170101T000000Z +DTSTART:20130101T000000 +INSTANCES:20130101T000000,20130108T000000,20131231T000000,20140107T000000,20141230T000000,20150106T000000,20160105T000000,20160112T000000 +PREV-INSTANCES:20160112T000000,20160105T000000,20150106T000000,20141230T000000,20140107T000000,20131231T000000,20130108T000000,20130101T000000 + +RRULE:FREQ=YEARLY;BYYEARDAY=366;UNTIL=20200101T000000 +DTSTART:20121231T120000 +INSTANCES:20121231T120000,20161231T120000 +PREV-INSTANCES:20161231T120000,20121231T120000 + +RRULE:FREQ=YEARLY;BYDAY=-1FR;BYMONTH=10;UNTIL=20150101T000000Z +DTSTART:20101029T120000 +INSTANCES:20101029T120000,20111028T120000,20121026T120000,20131025T120000,20141031T120000 +PREV-INSTANCES:20141031T120000,20131025T120000,20121026T120000,20111028T120000,20101029T120000 + +RRULE:FREQ=YEARLY;BYDAY=1FR;BYMONTH=4;UNTIL=20150101T000000Z +DTSTART:20100402T120000 +INSTANCES:20100402T120000,20110401T120000,20120406T120000,20130405T120000,20140404T120000 +PREV-INSTANCES:20140404T120000,20130405T120000,20120406T120000,20110401T120000,20100402T120000 + +RRULE:FREQ=MONTHLY;BYMONTHDAY=31;COUNT=12 +DTSTART:20150131T000000Z +INSTANCES:20150131T000000Z,20150331T000000Z,20150531T000000Z,20150731T000000Z,20150831T000000Z,20151031T000000Z,20151231T000000Z,20160131T000000Z,20160331T000000Z,20160531T000000Z,20160731T000000Z,20160831T000000Z +PREV-INSTANCES:20160731T000000Z,20160531T000000Z,20160331T000000Z,20160131T000000Z,20151231T000000Z,20151031T000000Z,20150831T000000Z,20150731T000000Z,20150531T000000Z,20150331T000000Z,20150131T000000Z + +RRULE:FREQ=MONTHLY;BYMONTHDAY=-31;COUNT=12 +DTSTART:20150101T000000Z +INSTANCES:20150101T000000Z,20150301T000000Z,20150501T000000Z,20150701T000000Z,20150801T000000Z,20151001T000000Z,20151201T000000Z,20160101T000000Z,20160301T000000Z,20160501T000000Z,20160701T000000Z,20160801T000000Z +PREV-INSTANCES:20160701T000000Z,20160501T000000Z,20160301T000000Z,20160101T000000Z,20151201T000000Z,20151001T000000Z,20150801T000000Z,20150701T000000Z,20150501T000000Z,20150301T000000Z,20150101T000000Z + +RRULE:FREQ=YEARLY;BYYEARDAY=366;COUNT=3 +DTSTART:20121231T120000 +INSTANCES:20121231T120000,20161231T120000,20201231T120000 +PREV-INSTANCES:20161231T120000,20121231T120000 + +RRULE:FREQ=YEARLY;BYYEARDAY=-366;COUNT=3 +DTSTART:20120101T120000 +INSTANCES:20120101T120000,20160101T120000,20200101T120000 +PREV-INSTANCES:20160101T120000,20120101T120000 + +RRULE:FREQ=YEARLY;INTERVAL=2;UNTIL=20211231T140000Z;BYMONTH=2;BYDAY=WE +DTSTART:20170201T090000 +START-AT:20200101T100000 +INSTANCES:20210203T090000,20210210T090000,20210217T090000,20210224T090000 +PREV-INSTANCES:20190227T090000,20190220T090000,20190213T090000,20190206T090000,20170222T090000,20170215T090000,20170208T090000,20170201T090000 + +RRULE:FREQ=MONTHLY;UNTIL=20171229T000000Z;BYDAY=1FR +DTSTART:20170901T090000 +START-AT:20170915T090000 +INSTANCES:20171006T090000,20171103T090000,20171201T090000 +PREV-INSTANCES:20170901T090000 + +# TODO: FIX (see https://github.com/ical-org/ical.net/issues/618) +# RRULE:FREQ=WEEKLY;UNTIL=20170127T000000Z;WKST=MO;BYDAY=SU,TU,TH;INTERVAL=2 +# DTSTART:20161229T090000 +# START-AT:20161231T090000 +# INSTANCES:20170101T090000,20170110T090000,20170112T090000,20170115T090000,20170124T090000,20170126T090000 +# PREV-INSTANCES:20161229T090000 + +# TODO: FIX (see https://github.com/ical-org/ical.net/issues/618) +# RRULE:FREQ=WEEKLY;UNTIL=20170127T000000Z;WKST=MO;BYDAY=SU,TU,TH;INTERVAL=2 +# DTSTART:20161229T090000 +# START-AT:20170102T090000 +# INSTANCES:20170110T090000,20170112T090000,20170115T090000,20170124T090000,20170126T090000 +# PREV-INSTANCES:20170101T090000,20161229T090000 + +RRULE:FREQ=DAILY;UNTIL=20170131T140000Z;BYMONTH=1;INTERVAL=3 +DTSTART:20170101T090000 +START-AT:20170103T090000 +INSTANCES:20170104T090000,20170107T090000,20170110T090000,20170113T090000,20170116T090000,20170119T090000,20170122T090000,20170125T090000,20170128T090000,20170131T090000 +PREV-INSTANCES:20170101T090000 + +RRULE:FREQ=HOURLY;INTERVAL=3;UNTIL=20170903T170000Z +DTSTART:20170902T090000 +START-AT:20170902T230000 +INSTANCES:20170903T000000,20170903T030000,20170903T060000,20170903T090000,20170903T120000,20170903T150000 +PREV-INSTANCES:20170902T210000,20170902T180000,20170902T150000,20170902T120000,20170902T090000 + +RRULE:FREQ=MONTHLY;INTERVAL=13;BYMONTH=5;COUNT=3 +DTSTART:20100212T000000 +INSTANCES:20130512T000000,20260512T000000,20390512T000000 +PREV-INSTANCES:20260512T000000,20130512T000000 + +RRULE:FREQ=WEEKLY;BYDAY=WE,FR;INTERVAL=2;COUNT=4 +DTSTART:20190101T100000 +INSTANCES:20190102T100000,20190104T100000,20190116T100000,20190118T100000 +PREV-INSTANCES:20190116T100000,20190104T100000,20190102T100000 + +# TODO: FIX (see https://github.com/ical-org/ical.net/issues/618) +# RRULE:FREQ=YEARLY;BYWEEKNO=1,2,-1,-2;BYDAY=TU;UNTIL=20170101T000000Z +# DTSTART:20130101T000000 +# INSTANCES:20130101T000000,20130108T000000,20131217T000000,20131224T000000,20131231T000000,20140107T000000,20141216T000000,20141223T000000,20141230T000000,20150106T000000,20151222T000000,20151229T000000,20160105T000000,20160112T000000,20161220T000000,20161227T000000 +# PREV-INSTANCES:20161227T000000,20161220T000000,20160112T000000,20160105T000000,20151229T000000,20151222T000000,20150106T000000,20141230T000000,20141223T000000,20141216T000000,20140107T000000,20131231T000000,20131224T000000,20131217T000000,20130108T000000,20130101T000000 + +RRULE:FREQ=YEARLY;BYWEEKNO=53;BYDAY=TU,SA;UNTIL=20170101T000000Z +DTSTART:20130101T000000 +INSTANCES:20151229T000000,20160102T000000 +PREV-INSTANCES:20160102T000000,20151229T000000 + +RRULE:FREQ=HOURLY;UNTIL=20210303T000000Z +DTSTART:20210301T142000 +START-AT:20210302T100000 +INSTANCES:20210302T102000,20210302T112000,20210302T122000,20210302T132000,20210302T142000,20210302T152000,20210302T162000,20210302T172000,20210302T182000,20210302T192000,20210302T202000,20210302T212000,20210302T222000,20210302T232000 +PREV-INSTANCES:20210302T092000,20210302T082000,20210302T072000,20210302T062000,20210302T052000,20210302T042000,20210302T032000,20210302T022000,20210302T012000,20210302T002000,20210301T232000,20210301T222000,20210301T212000,20210301T202000,20210301T192000,20210301T182000,20210301T172000,20210301T162000,20210301T152000,20210301T142000 + +# TODO: FIX (see https://github.com/ical-org/ical.net/issues/618) +# RRULE:FREQ=YEARLY;BYWEEKNO=6;BYDAY=TU;WKST=TH;UNTIL=20210612T000000Z +# DTSTART:20180206T080001 +# INSTANCES:20180213T080001,20190212T080001,20200211T080001,20210209T080001 +# PREV-INSTANCES:20210209T080001,20200211T080001,20190212T080001,20180213T080001 + +RRULE:FREQ=DAILY;BYMINUTE=1,2,3,4;INTERVAL=2;COUNT=3 +DTSTART:20241018 +INSTANCES:20241018,20241020,20241022 +PREV-INSTANCES:20241020,20241018 diff --git a/Ical.Net.Tests/contrib/libical/readme.txt b/Ical.Net.Tests/contrib/libical/readme.txt new file mode 100644 index 000000000..2544db28a --- /dev/null +++ b/Ical.Net.Tests/contrib/libical/readme.txt @@ -0,0 +1 @@ +Files in this folder have originally been developed as part of [the libical project](https://github.com/libical/libical). The files may have been modified after copying from libical. To identify the modifications made since copying, refer to the Git history of the individual file or compare with the source file in the libical project. \ No newline at end of file diff --git a/license.md b/license.md index b972e2fdc..6ab648cd6 100644 --- a/license.md +++ b/license.md @@ -1,4 +1,4 @@ -The MIT License (MIT) +The MIT License (MIT) ===================== Copyright © `2016` `Douglas Day`, `Rian Stockbower` @@ -24,3 +24,12 @@ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +===================== + + +The following directories and their subdirectories contain code +that was developed by different projects and is therefore available +under different licenses. The applicable licensing terms are listed +in the individual directories and subdirectories. + +- `/Ical.Net.Tests/contrib`