Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.11.x will end 14 Nov 2022 (12 months plus 6 months extension).
  • Bug fixes for security issues in 3.11.x will end 13 Nov 2023 (18 months plus 12 months extension).
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is supported too.

Differences Between: [Versions 310 and 311] [Versions 39 and 311]

(no description)

File Size: 2897 lines (118 kb)
Included or required:0 times
Referenced: 0 times
Includes or requires: 0 files

Defines 1 class

rrule_manager_test:: (87 methods):
  setUp()
  test_parse_rrule()
  test_parse_rrule_validation()
  test_freq_validation()
  test_until_count_validation()
  test_interval_validation()
  test_bysecond_validation()
  test_byminute_validation()
  test_byhour_validation()
  test_byday_validation()
  test_byday_with_prefix_validation()
  test_bymonthday_upper_bound_validation()
  test_bymonthday_0_validation()
  test_bymonthday_lower_bound_validation()
  test_byyearday_upper_bound_validation()
  test_byyearday_0_validation()
  test_byyearday_lower_bound_validation()
  test_non_yearly_freq_with_byweekno()
  test_byweekno_upper_bound_validation()
  test_byweekno_0_validation()
  test_byweekno_lower_bound_validation()
  test_bymonth_upper_bound_validation()
  test_bymonth_lower_bound_validation()
  test_bysetpos_without_other_byrules()
  test_bysetpos_upper_bound_validation()
  test_bysetpos_0_validation()
  test_bysetpos_lower_bound_validation()
  test_daily_events()
  test_every_300_days_forever()
  test_weekly_events()
  test_weekly_byday_forever()
  test_monthly_events_with_count_bymonthday()
  test_monthly_events_with_until_bymonthday()
  test_monthly_events_with_until_bymonthday_multi()
  test_monthly_events_with_bymonthday_forever()
  test_monthly_events_with_count_byday()
  test_monthly_events_with_until_byday()
  test_monthly_events_with_until_byday_multi()
  test_monthly_events_with_byday_forever()
  test_yearly_events()
  test_yearly_september_every_two_years_forever()
  test_yearly_bymonth_byday_forever()
  test_yearly_forever()
  test_daily_count()
  test_daily_until()
  test_every_other_day_forever()
  test_every_10_days_5_count()
  test_everyday_in_jan_for_3_years_yearly()
  test_everyday_in_jan_for_3_years_daily()
  test_weekly_10_count()
  test_weekly_until_24_dec_1997()
  test_every_other_week_forever()
  test_weekly_on_tue_thu_for_5_weeks_by_until()
  test_weekly_on_tue_thu_for_5_weeks_by_count()
  test_every_other_week_until_24_dec_1997_byday()
  test_every_other_week_byday_8_count()
  test_monthly_every_first_friday_10_count()
  test_monthly_every_first_friday_until()
  test_every_other_month_1st_and_last_sunday_10_count()
  test_monthly_last_monday_for_6_months()
  test_third_to_the_last_day_of_the_month_forever()
  test_every_2nd_and_15th_of_the_month_10_count()
  test_every_first_and_last_day_of_the_month_10_count()
  test_every_18_months_days_10_to_15_10_count()
  test_every_tuesday_every_other_month_forever()
  test_yearly_in_june_july_10_count()
  test_every_other_year_in_june_july_10_count()
  test_every_3_years_1st_100th_200th_days_10_count()
  test_yearly_every_20th_monday_forever()
  test_yearly_byweekno_forever()
  test_every_thursday_in_march_forever()
  test_every_thursday_june_july_august_forever()
  test_friday_the_thirteenth_forever()
  test_first_saturday_following_first_sunday_forever()
  test_every_us_presidential_election_forever()
  test_monthly_bysetpos_3_count()
  test_second_to_the_last_weekday_of_the_month()
  test_every_3hours_9am_to_5pm()
  test_every_15minutes_6_count()
  test_every_90minutes_4_count()
  test_every_20minutes_daily_byhour_byminute_50_count()
  test_every_20minutes_minutely_byhour_50_count()
  test_weekly_byday_with_wkst_mo()
  test_weekly_byday_with_wkst_su()
  test_monthly_bymonthday_31()
  test_yearly_on_the_last_day_of_february()
  change_event_startdate()


Class: rrule_manager_test  - X-Ref

Defines test class to test manage rrule during ical imports.

setUp()   X-Ref
Set up method.


test_parse_rrule()   X-Ref
Test parse_rrule() method.


test_parse_rrule_validation()   X-Ref
Test exception is thrown for invalid property.


test_freq_validation()   X-Ref
Test exception is thrown for invalid frequency.


test_until_count_validation()   X-Ref
Test parsing of rules with both COUNT and UNTIL parameters.


test_interval_validation()   X-Ref
Test parsing of INTERVAL rule.


test_bysecond_validation()   X-Ref
Test parsing of BYSECOND rule.


test_byminute_validation()   X-Ref
Test parsing of BYMINUTE rule.


test_byhour_validation()   X-Ref
Test parsing of BYMINUTE rule.


test_byday_validation()   X-Ref
Test parsing of BYDAY rule.


test_byday_with_prefix_validation()   X-Ref
Test parsing of BYDAY rule with prefixes.


test_bymonthday_upper_bound_validation()   X-Ref
Test parsing of BYMONTHDAY rule.


test_bymonthday_0_validation()   X-Ref
Test parsing of BYMONTHDAY rule.


test_bymonthday_lower_bound_validation()   X-Ref
Test parsing of BYMONTHDAY rule.


test_byyearday_upper_bound_validation()   X-Ref
Test parsing of BYYEARDAY rule.


test_byyearday_0_validation()   X-Ref
Test parsing of BYYEARDAY rule.


test_byyearday_lower_bound_validation()   X-Ref
Test parsing of BYYEARDAY rule.


test_non_yearly_freq_with_byweekno()   X-Ref
Test parsing of BYWEEKNO rule.


test_byweekno_upper_bound_validation()   X-Ref
Test parsing of BYWEEKNO rule.


test_byweekno_0_validation()   X-Ref
Test parsing of BYWEEKNO rule.


test_byweekno_lower_bound_validation()   X-Ref
Test parsing of BYWEEKNO rule.


test_bymonth_upper_bound_validation()   X-Ref
Test parsing of BYMONTH rule.


test_bymonth_lower_bound_validation()   X-Ref
Test parsing of BYMONTH rule.


test_bysetpos_without_other_byrules()   X-Ref
Test parsing of BYSETPOS rule.


test_bysetpos_upper_bound_validation()   X-Ref
Test parsing of BYSETPOS rule.


test_bysetpos_0_validation()   X-Ref
Test parsing of BYSETPOS rule.


test_bysetpos_lower_bound_validation()   X-Ref
Test parsing of BYSETPOS rule.


test_daily_events()   X-Ref
Test recurrence rules for daily frequency.


test_every_300_days_forever()   X-Ref
Every 300 days, forever.


test_weekly_events()   X-Ref
Test recurrence rules for weekly frequency.


test_weekly_byday_forever()   X-Ref
Test recurrence rules for weekly frequency for RRULE with BYDAY rule set, recurring forever.


test_monthly_events_with_count_bymonthday()   X-Ref
Test recurrence rules for monthly frequency for RRULE with COUNT and BYMONTHDAY rules set.


test_monthly_events_with_until_bymonthday()   X-Ref
Test recurrence rules for monthly frequency for RRULE with BYMONTHDAY and UNTIL rules set.


test_monthly_events_with_until_bymonthday_multi()   X-Ref
Test recurrence rules for monthly frequency for RRULE with BYMONTHDAY and UNTIL rules set.


test_monthly_events_with_bymonthday_forever()   X-Ref
Test recurrence rules for monthly frequency for RRULE with BYMONTHDAY forever.


test_monthly_events_with_count_byday()   X-Ref
Test recurrence rules for monthly frequency for RRULE with COUNT and BYDAY rules set.


test_monthly_events_with_until_byday()   X-Ref
Test recurrence rules for monthly frequency for RRULE with BYDAY and UNTIL rules set.


test_monthly_events_with_until_byday_multi()   X-Ref
Test recurrence rules for monthly frequency for RRULE with BYMONTHDAY and UNTIL rules set.


test_monthly_events_with_byday_forever()   X-Ref
Test recurrence rules for monthly frequency for RRULE with BYDAY forever.


test_yearly_events()   X-Ref
Test recurrence rules for yearly frequency.


test_yearly_september_every_two_years_forever()   X-Ref
Test for rrule with FREQ=YEARLY and INTERVAL=2 with BYMONTH rule set, recurring forever.


test_yearly_bymonth_byday_forever()   X-Ref
Test for rrule with FREQ=YEARLY with BYMONTH and BYDAY rules set, recurring forever.


test_yearly_forever()   X-Ref
Test for rrule with FREQ=YEARLY recurring forever.


test_daily_count()   X-Ref
Daily for 10 occurrences:

DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=DAILY;COUNT=10
==> (1997 9:00 AM EDT)September 2-11

test_daily_until()   X-Ref
Daily until December 24, 1997:

DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=DAILY;UNTIL=19971224T000000Z
==> (1997 9:00 AM EDT)September 2-30;October 1-25
(1997 9:00 AM EST)October 26-31;November 1-30;December 1-23

test_every_other_day_forever()   X-Ref
Every other day - forever:

DTSTART;TZID=US-Eastern:[Current date]T090000
RRULE:FREQ=DAILY;INTERVAL=2

Sample results (e.g. in the year 1997):
(1997 9:00 AM EDT)September2,4,6,8...24,26,28,30;October 2,4,6...20,22,24
(1997 9:00 AM EST)October 26,28,30;November 1,3,5,7...25,27,29;Dec 1,3,...

test_every_10_days_5_count()   X-Ref
Every 10 days, 5 occurrences:

DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=DAILY;INTERVAL=10;COUNT=5
==> (1997 9:00 AM EDT)September 2,12,22;October 2,12

test_everyday_in_jan_for_3_years_yearly()   X-Ref
Everyday in January, for 3 years:

DTSTART;TZID=US-Eastern:19980101T090000
RRULE:FREQ=YEARLY;UNTIL=20000131T090000Z;BYMONTH=1;BYDAY=SU,MO,TU,WE,TH,FR,SA
==> (1998 9:00 AM EDT)January 1-31
(1999 9:00 AM EDT)January 1-31
(2000 9:00 AM EDT)January 1-31

test_everyday_in_jan_for_3_years_daily()   X-Ref
Everyday in January, for 3 years:

DTSTART;TZID=US-Eastern:19980101T090000
RRULE:FREQ=DAILY;UNTIL=20000131T090000Z;BYMONTH=1
==> (1998 9:00 AM EDT)January 1-31
(1999 9:00 AM EDT)January 1-31
(2000 9:00 AM EDT)January 1-31

test_weekly_10_count()   X-Ref
Weekly for 10 occurrences

DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=WEEKLY;COUNT=10
==> (1997 9:00 AM EDT)September 2,9,16,23,30;October 7,14,21
(1997 9:00 AM EST)October 28;November 4

test_weekly_until_24_dec_1997()   X-Ref
Weekly until December 24, 1997.

DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=WEEKLY;UNTIL=19971224T000000Z
==> (1997 9:00 AM EDT)September 2,9,16,23,30;October 7,14,21,28
(1997 9:00 AM EST)November 4,11,18,25;December 2,9,16,23

test_every_other_week_forever()   X-Ref
Every other week - forever:

DTSTART;TZID=US-Eastern:[Current date]T090000
RRULE:FREQ=WEEKLY;INTERVAL=2;WKST=SU

Sample results (e.g. in the year 1997):
(1997 9:00 AM EDT)September 2,16,30;October 14
(1997 9:00 AM EST)October 28;November 11,25;December 9,23
(1998 9:00 AM EST)January 6,20;February
...

test_weekly_on_tue_thu_for_5_weeks_by_until()   X-Ref
Weekly on Tuesday and Thursday for 5 weeks:

DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=WEEKLY;UNTIL=19971007T000000Z;WKST=SU;BYDAY=TU,TH
==> (1997 9:00 AM EDT)September 2,4,9,11,16,18,23,25,30;October 2

test_weekly_on_tue_thu_for_5_weeks_by_count()   X-Ref
Weekly on Tuesday and Thursday for 5 weeks:

DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=WEEKLY;COUNT=10;WKST=SU;BYDAY=TU,TH
==> (1997 9:00 AM EDT)September 2,4,9,11,16,18,23,25,30;October 2

test_every_other_week_until_24_dec_1997_byday()   X-Ref
Every other week on Monday, Wednesday and Friday until December 24, 1997, but starting on Tuesday, September 2, 1997:

DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=19971224T000000Z;WKST=SU;BYDAY=MO,WE,FR
==> (1997 9:00 AM EDT)September 3,5,15,17,19,29;October 1,3,13,15,17
(1997 9:00 AM EST)October 27,29,31;November 10,12,14,24,26,28;December 8,10,12,22

test_every_other_week_byday_8_count()   X-Ref
Every other week on Tuesday and Thursday, for 8 occurrences:

DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=8;WKST=SU;BYDAY=TU,TH
==> (1997 9:00 AM EDT)September 2,4,16,18,30;October 2,14,16

test_monthly_every_first_friday_10_count()   X-Ref
Monthly on the 1st Friday for ten occurrences:

DTSTART;TZID=US-Eastern:19970905T090000
RRULE:FREQ=MONTHLY;COUNT=10;BYDAY=1FR
==> (1997 9:00 AM EDT)September 5;October 3
(1997 9:00 AM EST)November 7;Dec 5
(1998 9:00 AM EST)January 2;February 6;March 6;April 3
(1998 9:00 AM EDT)May 1;June 5

test_monthly_every_first_friday_until()   X-Ref
Monthly on the 1st Friday until December 24, 1997:

DTSTART;TZID=US-Eastern:19970905T090000
RRULE:FREQ=MONTHLY;UNTIL=19971224T000000Z;BYDAY=1FR
==> (1997 9:00 AM EDT)September 5;October 3
(1997 9:00 AM EST)November 7;December 5

test_every_other_month_1st_and_last_sunday_10_count()   X-Ref
Every other month on the 1st and last Sunday of the month for 10 occurrences:

DTSTART;TZID=US-Eastern:19970907T090000
RRULE:FREQ=MONTHLY;INTERVAL=2;COUNT=10;BYDAY=1SU,-1SU
==> (1997 9:00 AM EDT)September 7,28
(1997 9:00 AM EST)November 2,30
(1998 9:00 AM EST)January 4,25;March 1,29
(1998 9:00 AM EDT)May 3,31

test_monthly_last_monday_for_6_months()   X-Ref
Monthly on the second to last Monday of the month for 6 months:

DTSTART;TZID=US-Eastern:19970922T090000
RRULE:FREQ=MONTHLY;COUNT=6;BYDAY=-2MO
==> (1997 9:00 AM EDT)September 22;October 20
(1997 9:00 AM EST)November 17;December 22
(1998 9:00 AM EST)January 19;February 16

test_third_to_the_last_day_of_the_month_forever()   X-Ref
Monthly on the third to the last day of the month, forever:

DTSTART;TZID=US-Eastern:[Current year]0928T090000
RRULE:FREQ=MONTHLY;BYMONTHDAY=-3

Sample results (e.g. in the year 1997):
(1997 9:00 AM EDT)September 28
(1997 9:00 AM EST)October 29;November 28;December 29
(1998 9:00 AM EST)January 29;February 26
...

test_every_2nd_and_15th_of_the_month_10_count()   X-Ref
Monthly on the 2nd and 15th of the month for 10 occurrences:

DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=MONTHLY;COUNT=10;BYMONTHDAY=2,15
==> (1997 9:00 AM EDT)September 2,15;October 2,15
(1997 9:00 AM EST)November 2,15;December 2,15
(1998 9:00 AM EST)January 2,15

test_every_first_and_last_day_of_the_month_10_count()   X-Ref
Monthly on the first and last day of the month for 10 occurrences:

DTSTART;TZID=US-Eastern:19970930T090000
RRULE:FREQ=MONTHLY;COUNT=10;BYMONTHDAY=1,-1
==> (1997 9:00 AM EDT)September 30;October 1
(1997 9:00 AM EST)October 31;November 1,30;December 1,31
(1998 9:00 AM EST)January 1,31;February 1

test_every_18_months_days_10_to_15_10_count()   X-Ref
Every 18 months on the 10th thru 15th of the month for 10 occurrences:

DTSTART;TZID=US-Eastern:19970910T090000
RRULE:FREQ=MONTHLY;INTERVAL=18;COUNT=10;BYMONTHDAY=10,11,12,13,14,15
==> (1997 9:00 AM EDT)September 10,11,12,13,14,15
(1999 9:00 AM EST)March 10,11,12,13

test_every_tuesday_every_other_month_forever()   X-Ref
Every Tuesday, every other month:

DTSTART;TZID=US-Eastern:[Next Tuesday]T090000
RRULE:FREQ=MONTHLY;INTERVAL=2;BYDAY=TU

Sample results (e.g. in the year 1997):
(1997 9:00 AM EDT)September 2,9,16,23,30
(1997 9:00 AM EST)November 4,11,18,25
(1998 9:00 AM EST)January 6,13,20,27;March 3,10,17,24,31
...

test_yearly_in_june_july_10_count()   X-Ref
Yearly in June and July for 10 occurrences:

DTSTART;TZID=US-Eastern:19970610T090000
RRULE:FREQ=YEARLY;COUNT=10;BYMONTH=6,7
==> (1997 9:00 AM EDT)June 10;July 10
(1998 9:00 AM EDT)June 10;July 10
(1999 9:00 AM EDT)June 10;July 10
(2000 9:00 AM EDT)June 10;July 10
(2001 9:00 AM EDT)June 10;July 10
Note: Since none of the BYDAY, BYMONTHDAY or BYYEARDAY components are specified, the day is gotten from DTSTART.

test_every_other_year_in_june_july_10_count()   X-Ref
Every other year on January, February, and March for 10 occurrences:

DTSTART;TZID=US-Eastern:19970310T090000
RRULE:FREQ=YEARLY;INTERVAL=2;COUNT=10;BYMONTH=1,2,3
==> (1997 9:00 AM EST)March 10
(1999 9:00 AM EST)January 10;February 10;March 10
(2001 9:00 AM EST)January 10;February 10;March 10
(2003 9:00 AM EST)January 10;February 10;March 10

test_every_3_years_1st_100th_200th_days_10_count()   X-Ref
Every 3rd year on the 1st, 100th and 200th day for 10 occurrences:

DTSTART;TZID=US-Eastern:19970101T090000
RRULE:FREQ=YEARLY;INTERVAL=3;COUNT=10;BYYEARDAY=1,100,200
==> (1997 9:00 AM EST)January 1
(1997 9:00 AM EDT)April 10;July 19
(2000 9:00 AM EST)January 1
(2000 9:00 AM EDT)April 9;July 18
(2003 9:00 AM EST)January 1
(2003 9:00 AM EDT)April 10;July 19
(2006 9:00 AM EST)January 1

test_yearly_every_20th_monday_forever()   X-Ref
Every 20th Monday of the year, forever:

DTSTART;TZID=US-Eastern:[20th Monday of the current year]T090000
RRULE:FREQ=YEARLY;BYDAY=20MO

Sample results (e.g. in the year 1997):
(1997 9:00 AM EDT)May 19
(1998 9:00 AM EDT)May 18
(1999 9:00 AM EDT)May 17
...

test_yearly_byweekno_forever()   X-Ref
Monday of week number 20 (where the default start of the week is Monday), forever:

DTSTART;TZID=US-Eastern:[1st day of the 20th week this year]T090000
RRULE:FREQ=YEARLY;BYWEEKNO=20;BYDAY=MO

Sample results (e.g. in the year 1997):
(1997 9:00 AM EDT)May 12
(1998 9:00 AM EDT)May 11
(1999 9:00 AM EDT)May 17
...

test_every_thursday_in_march_forever()   X-Ref
Every Thursday in March, forever:

DTSTART;TZID=US-Eastern:[First thursday of March of the current year]T090000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=TH

Sample results (e.g. in the year 1997):
(1997 9:00 AM EST)March 13,20,27
(1998 9:00 AM EST)March 5,12,19,26
(1999 9:00 AM EST)March 4,11,18,25
...

test_every_thursday_june_july_august_forever()   X-Ref
Every Thursday, but only during June, July, and August, forever:

DTSTART;TZID=US-Eastern:[First Thursday of June of the current year]T090000
RRULE:FREQ=YEARLY;BYDAY=TH;BYMONTH=6,7,8

Sample results (e.g. in the year 1997):
(1997 9:00 AM EDT)June 5,12,19,26;July 3,10,17,24,31;August 7,14,21,28
(1998 9:00 AM EDT)June 4,11,18,25;July 2,9,16,23,30;August 6,13,20,27
(1999 9:00 AM EDT)June 3,10,17,24;July 1,8,15,22,29;August 5,12,19,26
...

test_friday_the_thirteenth_forever()   X-Ref
Every Friday the 13th, forever:

DTSTART;TZID=US-Eastern:[Current date]T090000
RRULE:FREQ=MONTHLY;BYDAY=FR;BYMONTHDAY=13

Sample results (e.g. in the year 1997):
(1998 9:00 AM EST)February 13;March 13;November 13
(1999 9:00 AM EDT)August 13
(2000 9:00 AM EDT)October 13
...

test_first_saturday_following_first_sunday_forever()   X-Ref
The first Saturday that follows the first Sunday of the month, forever:

DTSTART;TZID=US-Eastern:[The Saturday after the month's first Sunday]T090000
RRULE:FREQ=MONTHLY;BYDAY=SA;BYMONTHDAY=7,8,9,10,11,12,13

Sample results (e.g. from 13 September 1997):
(1997 9:00 AM EDT)September 13;October 11
(1997 9:00 AM EST)November 8;December 13
(1998 9:00 AM EST)January 10;February 7;March 7
(1998 9:00 AM EDT)April 11;May 9;June 13...

test_every_us_presidential_election_forever()   X-Ref
Every four years, the first Tuesday after a Monday in November, forever (U.S. Presidential Election day):

DTSTART;TZID=US-Eastern:[Most recent election date]T090000
RRULE:FREQ=YEARLY;INTERVAL=4;BYMONTH=11;BYDAY=TU;BYMONTHDAY=2,3,4,5,6,7,8

Sample results (e.g. from 05 November 1996):
(1996 9:00 AM EST)November 5
(2000 9:00 AM EST)November 7
(2004 9:00 AM EST)November 2
...

test_monthly_bysetpos_3_count()   X-Ref
The 3rd instance into the month of one of Tuesday, Wednesday or Thursday, for the next 3 months:

DTSTART;TZID=US-Eastern:19970904T090000
RRULE:FREQ=MONTHLY;COUNT=3;BYDAY=TU,WE,TH;BYSETPOS=3
==> (1997 9:00 AM EDT)September 4;October 7
(1997 9:00 AM EST)November 6

test_second_to_the_last_weekday_of_the_month()   X-Ref
The 2nd to last weekday of the month:

DTSTART;TZID=US-Eastern:19970929T090000
RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-2;COUNT=7
==> (1997 9:00 AM EDT)September 29
(1997 9:00 AM EST)October 30;November 27;December 30
(1998 9:00 AM EST)January 29;February 26;March 30
...

(Original RFC example is set to recur forever. But we just want to verify that the results match the dates listed from
the RFC example. So just limit the count to 7.)

test_every_3hours_9am_to_5pm()   X-Ref
Every 3 hours from 9:00 AM to 5:00 PM on a specific day:

DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=HOURLY;INTERVAL=3;UNTIL=19970902T210000Z
==> (September 2, 1997 EDT)09:00,12:00,15:00

test_every_15minutes_6_count()   X-Ref
Every 15 minutes for 6 occurrences:

DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=MINUTELY;INTERVAL=15;COUNT=6
==> (September 2, 1997 EDT)09:00,09:15,09:30,09:45,10:00,10:15

test_every_90minutes_4_count()   X-Ref
Every hour and a half for 4 occurrences:

DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=MINUTELY;INTERVAL=90;COUNT=4
==> (September 2, 1997 EDT)09:00,10:30;12:00;13:30

test_every_20minutes_daily_byhour_byminute_50_count()   X-Ref
Every 20 minutes from 9:00 AM to 4:40 PM every day for 100 times:

(Original RFC example is set to everyday forever, but that will just take a lot of time for the test,
so just limit the count to 50).

DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=DAILY;BYHOUR=9,10,11,12,13,14,15,16;BYMINUTE=0,20,40;COUNT=50
==> (September 2, 1997 EDT)9:00,9:20,9:40,10:00,10:20,...16:00,16:20,16:40
(September 3, 1997 EDT)9:00,9:20,9:40,10:00,10:20,...16:00,16:20,16:40
...

test_every_20minutes_minutely_byhour_50_count()   X-Ref
Every 20 minutes from 9:00 AM to 4:40 PM every day for 100 times:

(Original RFC example is set to everyday forever, but that will just take a lot of time for the test,
so just limit the count to 50).

DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=MINUTELY;INTERVAL=20;BYHOUR=9,10,11,12,13,14,15,16;COUNT=50
==> (September 2, 1997 EDT)9:00,9:20,9:40,10:00,10:20,...16:00,16:20,16:40
(September 3, 1997 EDT)9:00,9:20,9:40,10:00,10:20,...16:00,16:20,16:40
...

test_weekly_byday_with_wkst_mo()   X-Ref
An example where the days generated makes a difference because of WKST:

DTSTART;TZID=US-Eastern:19970805T090000
RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=MO
==> (1997 EDT)Aug 5,10,19,24

test_weekly_byday_with_wkst_su()   X-Ref
An example where the days generated makes a difference because of WKST:
Changing only WKST from MO to SU, yields different results...

DTSTART;TZID=US-Eastern:19970805T090000
RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU
==> (1997 EDT)August 5,17,19,31

test_monthly_bymonthday_31()   X-Ref
Tests for MONTHLY RRULE with BYMONTHDAY set to 31.
Should not include February, April, June, September and November.


test_yearly_on_the_last_day_of_february()   X-Ref
Tests for the last day in February. (Leap year test)


change_event_startdate($datestr, $timezonestr = null)   X-Ref
Change the event's timestart (DTSTART) based on the test's needs.

param: string $datestr The date string. In 'Ymd\This' format. e.g. 19990902T090000.
param: null|string $timezonestr A valid timezone string. e.g. 'US/Eastern'.
return: bool|DateTime