1717using Ical . Net . Serialization ;
1818using Ical . Net . Serialization . DataTypes ;
1919using NUnit . Framework ;
20+ using NUnit . Framework . Constraints ;
2021
2122namespace Ical . Net . Tests ;
2223
@@ -1232,8 +1233,8 @@ public void WeekNoOrderingShouldNotMatter()
12321233 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" ) ) ;
12331234 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" ) ) ;
12341235
1235- var recurringPeriods1 = rpe1 . Evaluate ( new CalDateTime ( start ) , start , end ) . ToList ( ) ;
1236- var recurringPeriods2 = rpe2 . Evaluate ( new CalDateTime ( start ) , start , end ) . ToList ( ) ;
1236+ var recurringPeriods1 = rpe1 . Evaluate ( new CalDateTime ( start ) , start , end , default ) . ToList ( ) ;
1237+ var recurringPeriods2 = rpe2 . Evaluate ( new CalDateTime ( start ) , start , end , default ) . ToList ( ) ;
12371238
12381239 Assert . That ( recurringPeriods2 , Has . Count . EqualTo ( recurringPeriods1 . Count ) ) ;
12391240 }
@@ -2627,7 +2628,7 @@ public void BugByWeekNoNotWorking()
26272628 var end = new CalDateTime ( 2019 , 12 , 31 ) ;
26282629 var rpe = new RecurrencePatternEvaluator ( new RecurrencePattern ( "FREQ=WEEKLY;BYDAY=MO;BYWEEKNO=2" ) ) ;
26292630
2630- var recurringPeriods = rpe . Evaluate ( start , start , end ) . ToList ( ) ;
2631+ var recurringPeriods = rpe . Evaluate ( start , start , end , default ) . ToList ( ) ;
26312632
26322633 Assert . That ( recurringPeriods , Has . Count . EqualTo ( 1 ) ) ;
26332634 Assert . That ( recurringPeriods . First ( ) . StartTime , Is . EqualTo ( new CalDateTime ( 2019 , 1 , 7 ) ) ) ;
@@ -2643,7 +2644,7 @@ public void BugByMonthWhileFreqIsWeekly()
26432644 var end = new CalDateTime ( 2020 , 12 , 31 ) ;
26442645 var rpe = new RecurrencePatternEvaluator ( new RecurrencePattern ( "FREQ=WEEKLY;BYDAY=MO;BYMONTH=1" ) ) ;
26452646
2646- var recurringPeriods = rpe . Evaluate ( start , start , end ) . OrderBy ( x => x ) . ToList ( ) ;
2647+ var recurringPeriods = rpe . Evaluate ( start , start , end , default ) . OrderBy ( x => x ) . ToList ( ) ;
26472648
26482649 Assert . That ( recurringPeriods , Has . Count . EqualTo ( 4 ) ) ;
26492650 Assert . Multiple ( ( ) =>
@@ -2686,7 +2687,7 @@ public void BugByMonthWhileFreqIsMonthly()
26862687 var end = new CalDateTime ( 2020 , 12 , 31 ) ;
26872688 var rpe = new RecurrencePatternEvaluator ( new RecurrencePattern ( "FREQ=MONTHLY;BYDAY=MO;BYMONTH=1" ) ) ;
26882689
2689- var recurringPeriods = rpe . Evaluate ( start , start , end ) . OrderBy ( x => x ) . ToList ( ) ;
2690+ var recurringPeriods = rpe . Evaluate ( start , start , end , default ) . OrderBy ( x => x ) . ToList ( ) ;
26902691
26912692 Assert . That ( recurringPeriods , Has . Count . EqualTo ( 4 ) ) ;
26922693 Assert . Multiple ( ( ) =>
@@ -2710,7 +2711,7 @@ public void Bug3119920()
27102711 var serializer = new RecurrencePatternSerializer ( ) ;
27112712 var rp = ( RecurrencePattern ) serializer . Deserialize ( sr ) ! ;
27122713 var rpe = new RecurrencePatternEvaluator ( rp ) ;
2713- var recurringPeriods = rpe . Evaluate ( start , start , rp . Until ) . ToList ( ) ;
2714+ var recurringPeriods = rpe . Evaluate ( start , start , rp . Until , default ) . ToList ( ) ;
27142715
27152716 var period = recurringPeriods . ElementAt ( recurringPeriods . Count - 1 ) ;
27162717
@@ -2932,7 +2933,7 @@ public void RecurrencePattern1()
29322933 var occurrences = evaluator . Evaluate (
29332934 startDate ,
29342935 fromDate ,
2935- toDate )
2936+ toDate , default )
29362937 . OrderBy ( o => o . StartTime )
29372938 . ToList ( ) ;
29382939 Assert . That ( occurrences , Has . Count . EqualTo ( 4 ) ) ;
@@ -2964,7 +2965,7 @@ public void RecurrencePattern2()
29642965 var occurrences = evaluator . Evaluate (
29652966 startDate ,
29662967 fromDate ,
2967- toDate ) ;
2968+ toDate , default ) ;
29682969 Assert . That ( occurrences . Count , Is . Not . EqualTo ( 0 ) ) ;
29692970 }
29702971
@@ -3071,7 +3072,7 @@ public void Test4()
30713072 var periods = evaluator . Evaluate (
30723073 evtStart ,
30733074 evtStart ,
3074- evtEnd )
3075+ evtEnd , default )
30753076 . OrderBy ( p => p . StartTime )
30763077 . ToList ( ) ;
30773078 Assert . That ( periods , Has . Count . EqualTo ( 10 ) ) ;
@@ -3905,7 +3906,7 @@ public void TestDtStartTimezone(string? tzId)
39053906 var cal = Calendar . Load ( icalText ) ;
39063907 var evt = cal . Events . First ( ) ;
39073908 var ev = new EventEvaluator ( evt ) ;
3908- var occurrences = ev . Evaluate ( evt . DtStart , evt . DtStart . ToTimeZone ( tzId ) , evt . DtStart . AddMinutes ( 61 ) . ToTimeZone ( tzId ) ) ;
3909+ var occurrences = ev . Evaluate ( evt . DtStart , evt . DtStart . ToTimeZone ( tzId ) , evt . DtStart . AddMinutes ( 61 ) . ToTimeZone ( tzId ) , default ) ;
39093910 var occurrencesStartTimes = occurrences . Select ( x => x . StartTime ) . Take ( 2 ) . ToList ( ) ;
39103911
39113912 var expectedStartTimes = new [ ]
@@ -3916,4 +3917,35 @@ public void TestDtStartTimezone(string? tzId)
39163917
39173918 Assert . That ( expectedStartTimes . SequenceEqual ( occurrencesStartTimes ) , Is . True ) ;
39183919 }
3920+
3921+ [ Test ]
3922+ [ TestCase ( null , false ) ]
3923+ [ TestCase ( 0 , true ) ]
3924+ [ TestCase ( 1000 , true ) ]
3925+ [ TestCase ( 1440 , false ) ]
3926+ public void TestMaxIncrementCount ( int ? limit , bool expectException )
3927+ {
3928+ var ical = """
3929+ BEGIN:VCALENDAR
3930+ BEGIN:VEVENT
3931+ DTSTART:20250305T000000
3932+ RRULE:FREQ=MINUTELY;BYHOUR=0;COUNT=100
3933+ END:VEVENT
3934+ END:VCALENDAR
3935+ """ ;
3936+
3937+ var cal = Calendar . Load ( ical ) ;
3938+
3939+ var options = new EvaluationOptions
3940+ {
3941+ MaxIncrementCount = limit ,
3942+ } ;
3943+
3944+ IResolveConstraint constraint =
3945+ expectException
3946+ ? Throws . Exception . TypeOf < MaxIncrementsExceededEvaluationException > ( )
3947+ : Throws . Nothing ;
3948+
3949+ Assert . That ( ( ) => cal . GetOccurrences ( options : options ) . ToList ( ) , constraint ) ;
3950+ }
39193951}
0 commit comments