Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions Ical.Net.Benchmarks/ThroughputTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using BenchmarkDotNet.Attributes;
using System;
using System.Linq;
using Ical.Net.DataTypes;

namespace Ical.Net.Benchmarks;

Expand Down Expand Up @@ -68,8 +69,8 @@ rsion 08.00.0681.000"">\n<TITLE></TITLE>\n</HEAD>\n<BODY>\n<!-- Converted f

var calendar = Calendar.Load(e);
var calendarEvent = calendar.Events.First();
var searchStart = new DateTime(2009, 06, 20);
var searchEnd = new DateTime(2011, 06, 23);
var searchStart = new CalDateTime(2009, 06, 20);
var searchEnd = new CalDateTime(2011, 06, 23);
var occurrences = calendarEvent.GetOccurrences(searchStart, searchEnd);
}

Expand Down Expand Up @@ -130,8 +131,8 @@ rsion 08.00.0681.000"">\n<TITLE></TITLE>\n</HEAD>\n<BODY>\n<!-- Converted f

var calendar = Calendar.Load(e);
var calendarEvent = calendar.Events.First();
var searchStart = new DateTime(2009, 06, 20);
var searchEnd = new DateTime(2011, 06, 23);
var searchStart = new CalDateTime(2009, 06, 20);
var searchEnd = new CalDateTime(2011, 06, 23);
var occurrences = calendarEvent.GetOccurrences(searchStart, searchEnd);
}
}
}
16 changes: 8 additions & 8 deletions Ical.Net.Tests/DocumentationExamples.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ public void Daily_Test()

// Count the occurrences between July 20, and Aug 5 -- there should be 12:
// July 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
var searchStart = DateTime.Parse("2016-07-20");
var searchEnd = DateTime.Parse("2016-08-05");
var searchStart = new CalDateTime(2016, 07, 20);
var searchEnd = new CalDateTime(2016, 08, 05);
var occurrences = calendar.GetOccurrences(searchStart, searchEnd).ToList();
Assert.That(occurrences, Has.Count.EqualTo(12));
}
Expand All @@ -63,8 +63,8 @@ public void EveryOtherTuesdayUntilTheEndOfTheYear_Test()

// Count every other Tuesday between July 1 and Dec 31.
// The first Tuesday is July 5. There should be 13 in total
var searchStart = DateTime.Parse("2010-01-01");
var searchEnd = DateTime.Parse("2016-12-31");
var searchStart = new CalDateTime(2010, 01, 01);
var searchEnd = new CalDateTime(2016, 12, 31);
var tuesdays = vEvent.GetOccurrences(searchStart, searchEnd).ToList();

Assert.That(tuesdays, Has.Count.EqualTo(13));
Expand All @@ -91,8 +91,8 @@ public void FourthThursdayOfNovember_Tests()
};
vEvent.RecurrenceRules = new List<RecurrencePattern> { rrule };

var searchStart = DateTime.Parse("2000-01-01");
var searchEnd = DateTime.Parse("2017-01-01");
var searchStart = new CalDateTime(2000, 01, 01);
var searchEnd = new CalDateTime(2017, 01, 01);
var usThanksgivings = vEvent.GetOccurrences(searchStart, searchEnd).ToList();

Assert.That(usThanksgivings, Has.Count.EqualTo(17));
Expand Down Expand Up @@ -124,8 +124,8 @@ public void DailyExceptSunday_Test()
calendar.Events.Add(vEvent);

// We are essentially counting all the days that aren't Sunday in 2016, so there should be 314
var searchStart = DateTime.Parse("2015-12-31");
var searchEnd = DateTime.Parse("2017-01-01");
var searchStart = new CalDateTime(2015, 12, 31);
var searchEnd = new CalDateTime(2017, 01, 01);
var occurrences = calendar.GetOccurrences(searchStart, searchEnd).ToList();
Assert.That(occurrences, Has.Count.EqualTo(314));
}
Expand Down
10 changes: 5 additions & 5 deletions Ical.Net.Tests/GetOccurrenceTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ public void WrongDurationTest()
calendar.Events.Add(vEvent);
calendar.Events.Add(vEvent2);

var searchStart = DateTime.Parse("2015-12-29");
var searchEnd = DateTime.Parse("2017-02-10");
var searchStart = new CalDateTime(2015, 12, 29);
var searchEnd = new CalDateTime(2017, 02, 10);
var occurrences = calendar.GetOccurrences(searchStart, searchEnd).OrderBy(o => o.Period.StartTime).ToList();

var firstOccurrence = occurrences.First();
Expand Down Expand Up @@ -143,7 +143,7 @@ public void EnumerationChangedException()
END:VCALENDAR";

var calendar = GetCalendars(ical);
var date = new DateTime(2016, 10, 11);
var date = new CalDateTime(2016, 10, 11);
var occurrences = calendar.GetOccurrences(date, date.AddDays(1)).ToList();

//We really want to make sure this doesn't explode
Expand Down Expand Up @@ -207,7 +207,7 @@ public void GetOccurrencesWithRecurrenceIdShouldEnumerate()
""";

var collection = Calendar.Load(ical);
var startCheck = new DateTime(2016, 11, 11);
var startCheck = new CalDateTime(2016, 11, 11);
var occurrences = collection.GetOccurrences<CalendarEvent>(startCheck, startCheck.AddMonths(1)).ToList();

CalDateTime[] expectedStartDates = [
Expand Down Expand Up @@ -261,7 +261,7 @@ public void GetOccurrencesWithRecurrenceId_DateOnly_ShouldEnumerate()
""";

var collection = Calendar.Load(ical);
var startCheck = new DateTime(2023, 10, 1);
var startCheck = new CalDateTime(2023, 10, 1);
var occurrences = collection.GetOccurrences<CalendarEvent>(startCheck, startCheck.AddMonths(1))
.ToList();

Expand Down
47 changes: 25 additions & 22 deletions Ical.Net.Tests/RecurrenceTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1232,8 +1232,8 @@ public void WeekNoOrderingShouldNotMatter()
var rpe1 = new RecurrencePatternEvaluator(new RecurrencePattern("FREQ=YEARLY;WKST=MO;BYDAY=MO;BYWEEKNO=1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53"));
var rpe2 = new RecurrencePatternEvaluator(new RecurrencePattern("FREQ=YEARLY;WKST=MO;BYDAY=MO;BYWEEKNO=53,51,49,47,45,43,41,39,37,35,33,31,29,27,25,23,21,19,17,15,13,11,9,7,5,3,1"));

var recurringPeriods1 = rpe1.Evaluate(new CalDateTime(start), start, end, default).ToList();
var recurringPeriods2 = rpe2.Evaluate(new CalDateTime(start), start, end, default).ToList();
var recurringPeriods1 = rpe1.Evaluate(new CalDateTime(start), start, end, null).ToList();
var recurringPeriods2 = rpe2.Evaluate(new CalDateTime(start), start, end, null).ToList();

Assert.That(recurringPeriods2, Has.Count.EqualTo(recurringPeriods1.Count));
}
Expand Down Expand Up @@ -2672,7 +2672,7 @@ public void ReccurencePattern_MaxDate_StopsOnCount()

evt.RecurrenceRules.Add(pattern);

var occurrences = evt.GetOccurrences(new DateTime(2018, 1, 1), DateTime.MaxValue).ToList();
var occurrences = evt.GetOccurrences(new CalDateTime(2018, 1, 1), new CalDateTime(DateTime.MaxValue, false)).ToList();
Assert.That(occurrences, Has.Count.EqualTo(10), "There should be 10 occurrences of this event.");
}

Expand Down Expand Up @@ -2741,7 +2741,7 @@ public void Bug3178652()

evt.RecurrenceRules.Add(pattern);

var occurrences = evt.GetOccurrences(new DateTime(2011, 1, 1), new DateTime(2012, 1, 1)).ToList();
var occurrences = evt.GetOccurrences(new CalDateTime(2011, 1, 1), new CalDateTime(2012, 1, 1)).ToList();
Assert.That(occurrences, Has.Count.EqualTo(10), "There should be 10 occurrences of this event, one for each month except February and December.");
}

Expand Down Expand Up @@ -2782,7 +2782,7 @@ public void Issue432()
//Testing on both the first day and the next, results used to be different
for (var i = 0; i <= 1; i++)
{
var checkTime = DateTime.Parse("2019-01-04T08:00Z").ToUniversalTime();
var checkTime = new CalDateTime(2019, 01, 04, 08, 00, 00, CalDateTime.UtcTzId);
checkTime = checkTime.AddDays(i);
//Valid asking for the exact moment
var occurrences = vEvent.GetOccurrences(checkTime, checkTime).ToList();
Expand Down Expand Up @@ -2811,7 +2811,7 @@ public void Issue432_AllDay()
End = new CalDateTime(DateTime.Parse("2020-01-11T00:00")),
};

var occurrences = vEvent.GetOccurrences(DateTime.Parse("2020-01-10T00:00"), DateTime.Parse("2020-01-11T00:00"));
var occurrences = vEvent.GetOccurrences(new CalDateTime(2020,01, 10, 0, 0, 0), new CalDateTime(2020, 01, 11, 00, 00, 00));
Assert.That(occurrences.Count, Is.EqualTo(0));
}

Expand Down Expand Up @@ -3023,7 +3023,7 @@ public void Test1()

Assert.That(() =>
{
_ = evt.GetOccurrences(DateTime.Today.AddDays(1), DateTime.Today.AddDays(2));
_ = evt.GetOccurrences(CalDateTime.Today.AddDays(1), CalDateTime.Today.AddDays(2));
}, Throws.Exception, "An exception should be thrown when evaluating a recurrence with no specified FREQUENCY");
}

Expand Down Expand Up @@ -3403,7 +3403,7 @@ public void OneDayRange()
//Testing on both the first day and the next, results used to be different
for (var i = 0; i <= 1; i++)
{
var checkTime = DateTime.Parse("2019-06-07 00:00:00");
var checkTime = new CalDateTime(2019, 06, 07, 00, 00, 00);
checkTime = checkTime.AddDays(i);

//Valid if asking for a range starting at the same moment
Expand All @@ -3428,19 +3428,19 @@ public void SpecificMinute()
vEvent.RecurrenceRules.Add(rrule);

// Exactly on start time
var testingTime = new DateTime(2019, 6, 7, 9, 0, 0);
var testingTime = new CalDateTime(2019, 6, 7, 9, 0, 0);

var occurrences = vEvent.GetOccurrences(testingTime, testingTime).ToList();
Assert.That(occurrences, Has.Count.EqualTo(1));

// One second before end time
testingTime = new DateTime(2019, 6, 7, 16, 59, 59);
testingTime = new CalDateTime(2019, 6, 7, 16, 59, 59);

occurrences = vEvent.GetOccurrences(testingTime, testingTime).ToList();
Assert.That(occurrences, Has.Count.EqualTo(1));

// Exactly on end time
testingTime = new DateTime(2019, 6, 7, 17, 0, 0);
testingTime = new CalDateTime(2019, 6, 7, 17, 0, 0);

occurrences = vEvent.GetOccurrences(testingTime, testingTime).ToList();
Assert.That(occurrences.Count, Is.EqualTo(0));
Expand Down Expand Up @@ -3778,7 +3778,7 @@ public void ExecuteRecurrenceTestCase(RecurrenceTestCase testCase)
evt.Summary = "Event summary";

// Start at midnight, UTC time
evt.Start = testCase.DtStart;
evt.Start = testCase.DtStart!;

if (testCase.Exception != null)
{
Expand All @@ -3789,7 +3789,7 @@ public void ExecuteRecurrenceTestCase(RecurrenceTestCase testCase)

evt.RecurrenceRules.Add(new RecurrencePattern(testCase.RRule!));

var occurrences = evt.GetOccurrences(testCase.StartAt?.Value ?? DateTime.MinValue, DateTime.MaxValue)
var occurrences = evt.GetOccurrences(testCase.StartAt ?? new CalDateTime(DateTime.MinValue), new CalDateTime(DateTime.MaxValue))
.OrderBy(x => x)
.ToList();

Expand All @@ -3800,31 +3800,34 @@ public void ExecuteRecurrenceTestCase(RecurrenceTestCase testCase)

[Test]
// Reproducer from https://github.com/ical-org/ical.net/issues/629
// Note: The original reproducer used DateTime.Parse(yyyy-MM-dd) to create a CalDateTime
// which resolves to DateTime, with a Time part of 00:00:00.0000000.
// It's important to always or never use the Time part in this unit test
public void ShouldCreateARecurringYearlyEvent()
{
var springAdminEvent = new CalendarEvent
{
Start = new CalDateTime(DateTime.Parse("2024-04-15")),
End = new CalDateTime(DateTime.Parse("2024-04-15")),
Start = new CalDateTime(2024, 04, 15),
End = new CalDateTime(2024, 04, 15),
RecurrenceRules = new List<RecurrencePattern> { new RecurrencePattern(FrequencyType.Yearly, 1) },
};

var calendar = new Calendar();
calendar.Events.Add(springAdminEvent);
var searchStart = DateTime.Parse("2024-04-15");
var searchEnd = DateTime.Parse("2050-5-31");
var searchStart = new CalDateTime(2024, 04, 15);
var searchEnd = new CalDateTime(2050, 05, 31);
var occurrences = calendar.GetOccurrences(searchStart, searchEnd);
Assert.That(occurrences.Count, Is.EqualTo(27));

springAdminEvent.Start = new CalDateTime(DateTime.Parse("2024-04-16"));
springAdminEvent.End = new CalDateTime(DateTime.Parse("2024-04-16"));
springAdminEvent.Start = new CalDateTime(2024, 04, 16);
springAdminEvent.End = new CalDateTime(2024, 04, 16);
springAdminEvent.RecurrenceRules = new List<RecurrencePattern> { new RecurrencePattern(FrequencyType.Yearly, 1) };

searchStart = DateTime.Parse("2024-04-16");
searchEnd = DateTime.Parse("2050-5-31");
searchStart = new CalDateTime(2024, 04, 16);
searchEnd = new CalDateTime(2050, 05, 31);
occurrences = calendar.GetOccurrences(searchStart, searchEnd);

//occurences is 26 here, omitting 4/16/2024
// occurrences are 26 here, omitting 4/16/2024
Assert.That(occurrences.Count, Is.EqualTo(27));
}

Expand Down
9 changes: 4 additions & 5 deletions Ical.Net.Tests/RecurrenceTests_From_Issues.cs
Original file line number Diff line number Diff line change
Expand Up @@ -302,8 +302,8 @@ public void CheckCalendarZone()
}
});

var start = new DateTime(2024, 12, 9, 8, 5, 0, DateTimeKind.Utc);
var end = new DateTime(2024, 12, 10, 7, 59, 59, DateTimeKind.Utc);
var start = new CalDateTime(2024, 12, 9, 8, 5, 0, CalDateTime.UtcTzId);
var end = new CalDateTime(2024, 12, 10, 7, 59, 59, CalDateTime.UtcTzId);
var occurrence = calendar.GetOccurrences(start, end);

Assert.That(occurrence.Count, Is.EqualTo(1));
Expand Down Expand Up @@ -359,7 +359,7 @@ private static void CheckDates(DateTime startDate, DateTime endDate, CalDateTime
RecurrenceRules = new List<RecurrencePattern> { rule }
};

var occurrences = calendarEvent.GetOccurrences(startDate, endDate);
var occurrences = calendarEvent.GetOccurrences(new CalDateTime(startDate), new CalDateTime(endDate));
var occurrencesDates = occurrences.Select(o => new CalDateTime(o.Period.StartTime.Date)).ToList();

// Sort both collections to ensure they are in the same order
Expand Down Expand Up @@ -501,8 +501,7 @@ public void Except_Tuesday_Thursday_Saturday_Sunday()
var calendar = new Calendar();
calendar.Events.Add(vEvent);

var occurrences = vEvent.GetOccurrences(DateTime.Parse("2017-06-01T00:00"), DateTime.Parse("2017-06-30T23:59")).ToList();

var occurrences = vEvent.GetOccurrences(new CalDateTime(2017, 06, 01, 00, 00, 00), new CalDateTime(2017, 06, 30, 23, 59, 0)).ToList();
var excludedDays = new List<DayOfWeek> { DayOfWeek.Sunday, DayOfWeek.Saturday, DayOfWeek.Tuesday, DayOfWeek.Thursday };

Assert.Multiple(() =>
Expand Down
8 changes: 0 additions & 8 deletions Ical.Net/Calendar.cs
Original file line number Diff line number Diff line change
Expand Up @@ -218,14 +218,6 @@ public VTimeZone AddTimeZone(VTimeZone tz)
public virtual IEnumerable<Occurrence> GetOccurrences(CalDateTime startTime = null, CalDateTime endTime = null, EvaluationOptions options = default)
=> GetOccurrences<IRecurringComponent>(startTime, endTime, options);

/// <inheritdoc cref="GetOccurrences(CalDateTime, CalDateTime)"/>
public virtual IEnumerable<Occurrence> GetOccurrences(DateTime? startTime, DateTime? endTime, EvaluationOptions options = default)
=> GetOccurrences<IRecurringComponent>(startTime?.AsCalDateTime(), endTime?.AsCalDateTime(), options);

/// <inheritdoc cref="GetOccurrences(CalDateTime, CalDateTime)"/>
public virtual IEnumerable<Occurrence> GetOccurrences<T>(DateTime? startTime, DateTime? endTime, EvaluationOptions options = default) where T : IRecurringComponent
=> GetOccurrences<T>(startTime?.AsCalDateTime(), endTime?.AsCalDateTime(), options);

/// <summary>
/// Returns all occurrences of components of type T that start within the date range provided.
/// All components occurring between <paramref name="startTime"/> and <paramref name="endTime"/>
Expand Down
6 changes: 0 additions & 6 deletions Ical.Net/CalendarCollection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,15 +60,9 @@ private IEnumerable<Occurrence> GetOccurrences(Func<Calendar, IEnumerable<Occurr
public IEnumerable<Occurrence> GetOccurrences(CalDateTime startTime = null, CalDateTime endTime = null, EvaluationOptions options = default)
=> GetOccurrences(iCal => iCal.GetOccurrences(startTime, endTime, options));

public IEnumerable<Occurrence> GetOccurrences(DateTime? startTime, DateTime? endTime, EvaluationOptions options = default)
=> GetOccurrences(iCal => iCal.GetOccurrences(startTime, endTime, options));

public IEnumerable<Occurrence> GetOccurrences<T>(CalDateTime startTime = null, CalDateTime endTime = null, EvaluationOptions options = default) where T : IRecurringComponent
=> GetOccurrences(iCal => iCal.GetOccurrences<T>(startTime, endTime, options));

public IEnumerable<Occurrence> GetOccurrences<T>(DateTime? startTime, DateTime? endTime, EvaluationOptions options = default) where T : IRecurringComponent
=> GetOccurrences(iCal => iCal.GetOccurrences<T>(startTime, endTime, options));

private FreeBusy CombineFreeBusy(FreeBusy main, FreeBusy current)
{
main?.MergeWith(current);
Expand Down
5 changes: 3 additions & 2 deletions Ical.Net/CalendarComponents/Alarm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public Alarm()
/// Gets a list of alarm occurrences for the given recurring component, <paramref name="rc"/>
/// that occur between <paramref name="fromDate"/> and <paramref name="toDate"/>.
/// </summary>
public virtual IList<AlarmOccurrence> GetOccurrences(IRecurringComponent rc, CalDateTime? fromDate, CalDateTime? toDate, EvaluationOptions options)
public virtual IList<AlarmOccurrence> GetOccurrences(IRecurringComponent rc, CalDateTime? fromDate, CalDateTime? toDate, EvaluationOptions? options)
{
if (Trigger == null)
{
Expand Down Expand Up @@ -143,8 +143,9 @@ public virtual IList<AlarmOccurrence> GetOccurrences(IRecurringComponent rc, Cal
/// </summary>
/// <param name="start">The earliest date/time to poll trigered alarms for.</param>
/// <param name="end"></param>
/// <param name="options"></param>
/// <returns>A list of <see cref="AlarmOccurrence"/> objects, each containing a triggered alarm.</returns>
public virtual IList<AlarmOccurrence> Poll(CalDateTime start, CalDateTime end, EvaluationOptions options = default)
public virtual IList<AlarmOccurrence> Poll(CalDateTime? start, CalDateTime? end, EvaluationOptions? options = null)
{
var results = new List<AlarmOccurrence>();

Expand Down
Loading
Loading