runt 0.3.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +107 -71
- data/LICENSE.txt +43 -43
- data/README +100 -94
- data/Rakefile +119 -120
- data/TODO +11 -20
- data/doc/tutorial_schedule.rdoc +84 -51
- data/doc/tutorial_te.rdoc +190 -190
- data/lib/runt.rb +219 -110
- data/lib/runt/daterange.rb +74 -74
- data/lib/runt/dprecision.rb +141 -137
- data/lib/runt/pdate.rb +153 -126
- data/lib/runt/schedule.rb +88 -89
- data/lib/runt/temporalexpression.rb +695 -524
- data/setup.rb +1331 -1331
- data/site/blue-robot3.css +131 -131
- data/site/index.html +94 -93
- data/site/runt-logo.psd +0 -0
- data/test/daterangetest.rb +87 -87
- data/test/dprecisiontest.rb +55 -45
- data/test/icalendartest.rb +524 -0
- data/test/pdatetest.rb +117 -104
- data/test/runttest.rb +101 -0
- data/test/scheduletest.rb +148 -88
- data/test/temporalexpressiontest.rb +612 -402
- metadata +56 -43
- data/test/alltests.rb +0 -10
data/test/daterangetest.rb
CHANGED
@@ -1,87 +1,87 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'test/unit'
|
4
|
-
require 'runt'
|
5
|
-
require 'date'
|
6
|
-
|
7
|
-
# Unit tests for DateRange class
|
8
|
-
#
|
9
|
-
# Author:: Matthew Lipper
|
10
|
-
class DateRangeTest < Test::Unit::TestCase
|
11
|
-
|
12
|
-
include Runt
|
13
|
-
|
14
|
-
def test_sub_range
|
15
|
-
r_start = PDate.sec(2004,2,29,16,24,12)
|
16
|
-
r_end = PDate.sec(2004,3,2,4,22,58)
|
17
|
-
range = DateRange.new(r_start,r_end)
|
18
|
-
assert(range.min==r_start)
|
19
|
-
assert(range.max==r_end)
|
20
|
-
assert(range.include?(r_start+1))
|
21
|
-
assert(range.include?(r_end-1))
|
22
|
-
sub_range = DateRange.new((r_start+1),(r_end-1))
|
23
|
-
assert(range.include?(sub_range))
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_date
|
27
|
-
r_start = PDate.min(1979,12,31,23,57)
|
28
|
-
r_end = PDate.min(1980,1,1,0,2)
|
29
|
-
range = DateRange.new(r_start,r_end)
|
30
|
-
assert(range.min==r_start)
|
31
|
-
assert(range.max==r_end)
|
32
|
-
assert(range.include?(r_start+1))
|
33
|
-
assert(range.include?(r_end-1))
|
34
|
-
sub_range = DateRange.new((r_start+1),(r_end-1))
|
35
|
-
assert(range.include?(sub_range))
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_spaceship_operator
|
39
|
-
r_start = PDate.min(1984,8,31,22,00)
|
40
|
-
r_end = PDate.min(1984,9,15,0,2)
|
41
|
-
range = DateRange.new(r_start,r_end)
|
42
|
-
assert(-1==(range<=>(DateRange.new(r_start+2,r_end+5))))
|
43
|
-
assert(1==(range<=>(DateRange.new(r_start-24,r_end+5))))
|
44
|
-
assert(0==(range<=>(DateRange.new(r_start,r_end))))
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_overlap
|
48
|
-
r_start = PDate.month(2010,12)
|
49
|
-
r_end = PDate.month(2011,12)
|
50
|
-
range = DateRange.new(r_start,r_end)
|
51
|
-
o_start = PDate.month(2010,11)
|
52
|
-
o_end = PDate.month(2012,2)
|
53
|
-
o_range = DateRange.new(o_start,o_end)
|
54
|
-
assert(range.overlap?(o_range))
|
55
|
-
assert(o_range.overlap?(range))
|
56
|
-
assert(o_range.overlap?(DateRange.new(r_start,o_end)))
|
57
|
-
assert(o_range.overlap?(DateRange.new(o_start,r_end)))
|
58
|
-
|
59
|
-
# September 18th - 19th, 2005, 8am - 10am
|
60
|
-
expr1=DateRange.new(PDate.day(2005,9,18),PDate.day(2005,9,19))
|
61
|
-
# September 19th - 20th, 2005, 9am - 11am
|
62
|
-
expr2=DateRange.new(PDate.day(2005,9,19),PDate.day(2005,9,20))
|
63
|
-
|
64
|
-
assert(expr1.overlap?(expr2))
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_empty
|
68
|
-
r_start = PDate.hour(2004,2,10,0)
|
69
|
-
r_end = PDate.hour(2004,2,9,23)
|
70
|
-
empty_range = DateRange.new(r_start,r_end)
|
71
|
-
assert(empty_range.empty?)
|
72
|
-
assert(DateRange::EMPTY.empty?)
|
73
|
-
end
|
74
|
-
|
75
|
-
def test_gap
|
76
|
-
r_start = PDate.day(2000,6,12)
|
77
|
-
r_end = PDate.day(2000,6,14)
|
78
|
-
range = DateRange.new(r_start,r_end)
|
79
|
-
g_start = PDate.day(2000,6,18)
|
80
|
-
g_end = PDate.day(2000,6,20)
|
81
|
-
g_range = DateRange.new(g_start,g_end)
|
82
|
-
the_gap=range.gap(g_range)
|
83
|
-
assert(the_gap.start_expr==(r_end+1))
|
84
|
-
assert(the_gap.end_expr==(g_start-1))
|
85
|
-
end
|
86
|
-
|
87
|
-
end
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'runt'
|
5
|
+
require 'date'
|
6
|
+
|
7
|
+
# Unit tests for DateRange class
|
8
|
+
#
|
9
|
+
# Author:: Matthew Lipper
|
10
|
+
class DateRangeTest < Test::Unit::TestCase
|
11
|
+
|
12
|
+
include Runt
|
13
|
+
|
14
|
+
def test_sub_range
|
15
|
+
r_start = PDate.sec(2004,2,29,16,24,12)
|
16
|
+
r_end = PDate.sec(2004,3,2,4,22,58)
|
17
|
+
range = DateRange.new(r_start,r_end)
|
18
|
+
assert(range.min==r_start)
|
19
|
+
assert(range.max==r_end)
|
20
|
+
assert(range.include?(r_start+1))
|
21
|
+
assert(range.include?(r_end-1))
|
22
|
+
sub_range = DateRange.new((r_start+1),(r_end-1))
|
23
|
+
assert(range.include?(sub_range))
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_date
|
27
|
+
r_start = PDate.min(1979,12,31,23,57)
|
28
|
+
r_end = PDate.min(1980,1,1,0,2)
|
29
|
+
range = DateRange.new(r_start,r_end)
|
30
|
+
assert(range.min==r_start)
|
31
|
+
assert(range.max==r_end)
|
32
|
+
assert(range.include?(r_start+1))
|
33
|
+
assert(range.include?(r_end-1))
|
34
|
+
sub_range = DateRange.new((r_start+1),(r_end-1))
|
35
|
+
assert(range.include?(sub_range))
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_spaceship_operator
|
39
|
+
r_start = PDate.min(1984,8,31,22,00)
|
40
|
+
r_end = PDate.min(1984,9,15,0,2)
|
41
|
+
range = DateRange.new(r_start,r_end)
|
42
|
+
assert(-1==(range<=>(DateRange.new(r_start+2,r_end+5))))
|
43
|
+
assert(1==(range<=>(DateRange.new(r_start-24,r_end+5))))
|
44
|
+
assert(0==(range<=>(DateRange.new(r_start,r_end))))
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_overlap
|
48
|
+
r_start = PDate.month(2010,12)
|
49
|
+
r_end = PDate.month(2011,12)
|
50
|
+
range = DateRange.new(r_start,r_end)
|
51
|
+
o_start = PDate.month(2010,11)
|
52
|
+
o_end = PDate.month(2012,2)
|
53
|
+
o_range = DateRange.new(o_start,o_end)
|
54
|
+
assert(range.overlap?(o_range))
|
55
|
+
assert(o_range.overlap?(range))
|
56
|
+
assert(o_range.overlap?(DateRange.new(r_start,o_end)))
|
57
|
+
assert(o_range.overlap?(DateRange.new(o_start,r_end)))
|
58
|
+
|
59
|
+
# September 18th - 19th, 2005, 8am - 10am
|
60
|
+
expr1=DateRange.new(PDate.day(2005,9,18),PDate.day(2005,9,19))
|
61
|
+
# September 19th - 20th, 2005, 9am - 11am
|
62
|
+
expr2=DateRange.new(PDate.day(2005,9,19),PDate.day(2005,9,20))
|
63
|
+
|
64
|
+
assert(expr1.overlap?(expr2))
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_empty
|
68
|
+
r_start = PDate.hour(2004,2,10,0)
|
69
|
+
r_end = PDate.hour(2004,2,9,23)
|
70
|
+
empty_range = DateRange.new(r_start,r_end)
|
71
|
+
assert(empty_range.empty?)
|
72
|
+
assert(DateRange::EMPTY.empty?)
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_gap
|
76
|
+
r_start = PDate.day(2000,6,12)
|
77
|
+
r_end = PDate.day(2000,6,14)
|
78
|
+
range = DateRange.new(r_start,r_end)
|
79
|
+
g_start = PDate.day(2000,6,18)
|
80
|
+
g_end = PDate.day(2000,6,20)
|
81
|
+
g_range = DateRange.new(g_start,g_end)
|
82
|
+
the_gap=range.gap(g_range)
|
83
|
+
assert(the_gap.start_expr==(r_end+1))
|
84
|
+
assert(the_gap.end_expr==(g_start-1))
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
data/test/dprecisiontest.rb
CHANGED
@@ -1,45 +1,55 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'test/unit'
|
4
|
-
require 'runt'
|
5
|
-
require 'date'
|
6
|
-
|
7
|
-
# Unit tests for DPrecision class
|
8
|
-
#
|
9
|
-
# Author:: Matthew Lipper
|
10
|
-
|
11
|
-
class DPrecisionTest < Test::Unit::TestCase
|
12
|
-
|
13
|
-
include Runt
|
14
|
-
|
15
|
-
def test_comparable
|
16
|
-
assert(DPrecision::YEAR<DPrecision::MONTH, "DPrecision.year was not less than DPrecision.month")
|
17
|
-
assert(DPrecision::MONTH<DPrecision::DAY, "DPrecision.month was not less than DPrecision.day")
|
18
|
-
assert(DPrecision::DAY<DPrecision::HOUR, "DPrecision.day was not less than DPrecision.hour")
|
19
|
-
assert(DPrecision::HOUR<DPrecision::MIN, "DPrecision.hour was not less than DPrecision.min")
|
20
|
-
assert(DPrecision::MIN<DPrecision::SEC, "DPrecision.min was not less than DPrecision.sec")
|
21
|
-
assert(DPrecision::SEC<DPrecision::MILLI, "DPrecision.sec was not less than DPrecision.millisec")
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_pseudo_singleton_instance
|
25
|
-
assert(DPrecision::YEAR.object_id==DPrecision::YEAR.object_id, "Object Id's not equal.")
|
26
|
-
assert(DPrecision::MONTH.object_id==DPrecision::MONTH.object_id, "Object Id's not equal.")
|
27
|
-
assert(DPrecision::DAY.object_id==DPrecision::DAY.object_id, "Object Id's not equal.")
|
28
|
-
assert(DPrecision::HOUR.object_id==DPrecision::HOUR.object_id, "Object Id's not equal.")
|
29
|
-
assert(DPrecision::MIN.object_id==DPrecision::MIN.object_id, "Object Id's not equal.")
|
30
|
-
assert(DPrecision::SEC.object_id==DPrecision::SEC.object_id, "Object Id's not equal.")
|
31
|
-
assert(DPrecision::MILLI.object_id==DPrecision::MILLI.object_id, "Object Id's not equal.")
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_to_precision
|
35
|
-
#February 29th, 2004
|
36
|
-
no_prec_date = PDate.civil(2004,2,29)
|
37
|
-
month_prec = PDate.month(2004,2,29)
|
38
|
-
assert(month_prec==DPrecision.to_p(no_prec_date,DPrecision::MONTH))
|
39
|
-
#11:59:59 am, February 29th, 2004
|
40
|
-
no_prec_datetime = PDate.civil(2004,2,29,23,59,59)
|
41
|
-
#puts "-->#{no_prec_datetime.date_precision}<--"
|
42
|
-
assert(month_prec==DPrecision.to_p(no_prec_datetime,DPrecision::MONTH))
|
43
|
-
end
|
44
|
-
|
45
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'runt'
|
5
|
+
require 'date'
|
6
|
+
|
7
|
+
# Unit tests for DPrecision class
|
8
|
+
#
|
9
|
+
# Author:: Matthew Lipper
|
10
|
+
|
11
|
+
class DPrecisionTest < Test::Unit::TestCase
|
12
|
+
|
13
|
+
include Runt
|
14
|
+
|
15
|
+
def test_comparable
|
16
|
+
assert(DPrecision::YEAR<DPrecision::MONTH, "DPrecision.year was not less than DPrecision.month")
|
17
|
+
assert(DPrecision::MONTH<DPrecision::DAY, "DPrecision.month was not less than DPrecision.day")
|
18
|
+
assert(DPrecision::DAY<DPrecision::HOUR, "DPrecision.day was not less than DPrecision.hour")
|
19
|
+
assert(DPrecision::HOUR<DPrecision::MIN, "DPrecision.hour was not less than DPrecision.min")
|
20
|
+
assert(DPrecision::MIN<DPrecision::SEC, "DPrecision.min was not less than DPrecision.sec")
|
21
|
+
assert(DPrecision::SEC<DPrecision::MILLI, "DPrecision.sec was not less than DPrecision.millisec")
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_pseudo_singleton_instance
|
25
|
+
assert(DPrecision::YEAR.object_id==DPrecision::YEAR.object_id, "Object Id's not equal.")
|
26
|
+
assert(DPrecision::MONTH.object_id==DPrecision::MONTH.object_id, "Object Id's not equal.")
|
27
|
+
assert(DPrecision::DAY.object_id==DPrecision::DAY.object_id, "Object Id's not equal.")
|
28
|
+
assert(DPrecision::HOUR.object_id==DPrecision::HOUR.object_id, "Object Id's not equal.")
|
29
|
+
assert(DPrecision::MIN.object_id==DPrecision::MIN.object_id, "Object Id's not equal.")
|
30
|
+
assert(DPrecision::SEC.object_id==DPrecision::SEC.object_id, "Object Id's not equal.")
|
31
|
+
assert(DPrecision::MILLI.object_id==DPrecision::MILLI.object_id, "Object Id's not equal.")
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_to_precision
|
35
|
+
#February 29th, 2004
|
36
|
+
no_prec_date = PDate.civil(2004,2,29)
|
37
|
+
month_prec = PDate.month(2004,2,29)
|
38
|
+
assert(month_prec==DPrecision.to_p(no_prec_date,DPrecision::MONTH))
|
39
|
+
#11:59:59 am, February 29th, 2004
|
40
|
+
no_prec_datetime = PDate.civil(2004,2,29,23,59,59)
|
41
|
+
#puts "-->#{no_prec_datetime.date_precision}<--"
|
42
|
+
assert(month_prec==DPrecision.to_p(no_prec_datetime,DPrecision::MONTH))
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_label
|
46
|
+
assert_equal(DPrecision::YEAR.label,"YEAR")
|
47
|
+
assert_equal(DPrecision::MONTH.label,"MONTH")
|
48
|
+
assert_equal(DPrecision::DAY.label,"DAY")
|
49
|
+
assert_equal(DPrecision::HOUR.label,"HOUR")
|
50
|
+
assert_equal(DPrecision::MIN.label,"MINUTE")
|
51
|
+
assert_equal(DPrecision::SEC.label,"SECOND")
|
52
|
+
assert_equal(DPrecision::MILLI.label,"MILLISECOND")
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,524 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'date'
|
5
|
+
require 'runt'
|
6
|
+
require 'set'
|
7
|
+
|
8
|
+
include Runt
|
9
|
+
|
10
|
+
# RFC 2445 is the iCalendar specification. It includes dozens of
|
11
|
+
# specific examples that make great tests for Runt temporal expressions.
|
12
|
+
class ICalendarTest < Test::Unit::TestCase
|
13
|
+
|
14
|
+
# "Daily for 10 occurences"
|
15
|
+
def test_example_1
|
16
|
+
start_date = DateTime.parse("US-Eastern:19970902T090000") #Sep 2, 1997
|
17
|
+
end_date = start_date + 365 #Sep 2, 1998
|
18
|
+
|
19
|
+
#rrule = RecurrenceRule.new("FREQ=DAILY;COUNT=10")
|
20
|
+
te = REWeek.new(Sun, Sat)
|
21
|
+
|
22
|
+
expected = ICalendarTest.get_date_range(start_date, DateTime.parse("US-Eastern:19970911T090000"))
|
23
|
+
results = te.dates(DateRange.new(start_date, end_date), 10)
|
24
|
+
assert_equal(expected, results)
|
25
|
+
end
|
26
|
+
|
27
|
+
# "Daily until December 24, 1997"
|
28
|
+
def test_example_2
|
29
|
+
start_date = DateTime.parse("US-Eastern:19970902T090000") #Sep 2, 1997
|
30
|
+
end_date = start_date + 365
|
31
|
+
|
32
|
+
#rrule = RecurrenceRule.new("FREQ=DAILY;UNTIL=19971224T000000Z")
|
33
|
+
te = BeforeTE.new(DateTime.parse("19971224T090000"), true) & REWeek.new(Sun, Sat)
|
34
|
+
|
35
|
+
expected = ICalendarTest.get_date_range(start_date, DateTime.parse("19971224T090000"))
|
36
|
+
results = te.dates(DateRange.new(start_date, end_date))
|
37
|
+
assert_equal(expected, results)
|
38
|
+
end
|
39
|
+
|
40
|
+
# "Every other day - forever"
|
41
|
+
def test_example_3
|
42
|
+
start_date = DateTime.parse("US-Eastern:19970902T090000") #Sep 2
|
43
|
+
end_date = DateTime.parse("US-Eastern:19971003T090000") #Oct 3
|
44
|
+
|
45
|
+
#rrule = RecurrenceRule.new("FREQ=DAILY;INTERVAL=2")
|
46
|
+
|
47
|
+
expected = [
|
48
|
+
DateTime.parse("US-Eastern:19970902T090000"), #Sep 2
|
49
|
+
DateTime.parse("US-Eastern:19970904T090000"), #Sep 4
|
50
|
+
DateTime.parse("US-Eastern:19970906T090000"), #Sep 6
|
51
|
+
DateTime.parse("US-Eastern:19970908T090000"), #Sep 8
|
52
|
+
DateTime.parse("US-Eastern:19970910T090000"), #Sep 10
|
53
|
+
DateTime.parse("US-Eastern:19970912T090000"), #Sep 12
|
54
|
+
DateTime.parse("US-Eastern:19970914T090000"), #Sep 14
|
55
|
+
DateTime.parse("US-Eastern:19970916T090000"), #Sep 16
|
56
|
+
DateTime.parse("US-Eastern:19970918T090000"), #Sep 18
|
57
|
+
DateTime.parse("US-Eastern:19970920T090000"), #Sep 20
|
58
|
+
DateTime.parse("US-Eastern:19970922T090000"), #Sep 22
|
59
|
+
DateTime.parse("US-Eastern:19970924T090000"), #Sep 24
|
60
|
+
DateTime.parse("US-Eastern:19970926T090000"), #Sep 26
|
61
|
+
DateTime.parse("US-Eastern:19970928T090000"), #Sep 28
|
62
|
+
DateTime.parse("US-Eastern:19970930T090000"), #Sep 30
|
63
|
+
DateTime.parse("US-Eastern:19971002T090000"), #Oct 02
|
64
|
+
]
|
65
|
+
|
66
|
+
#we have to set the precision for use in EveryTE
|
67
|
+
start_date.date_precision = DPrecision::DAY
|
68
|
+
te = REWeek.new(Sun,Sat) & EveryTE.new(start_date, 2)
|
69
|
+
results = te.dates(DateRange.new(start_date, end_date))
|
70
|
+
assert_equal(expected, results)
|
71
|
+
|
72
|
+
#alternatively we could use the DayIntervalTE
|
73
|
+
te = DayIntervalTE.new(start_date, 2)
|
74
|
+
results = te.dates(DateRange.new(start_date, end_date))
|
75
|
+
assert_equal(expected, results)
|
76
|
+
end
|
77
|
+
|
78
|
+
# "Every 10 days, 5 occurrences"
|
79
|
+
def test_example_4
|
80
|
+
start_date = DateTime.parse("US-Eastern:19970902T090000") #Sep 2, 1997
|
81
|
+
end_date = start_date + 180 #Mar 1, 1998 (halved the normal test range because EveryTE is pretty slow)
|
82
|
+
|
83
|
+
#rrule = RecurrenceRule.new("FREQ=DAILY;INTERVAL=10;COUNT=5")
|
84
|
+
|
85
|
+
expected = [
|
86
|
+
DateTime.parse("US-Eastern:19970902T090000"), #Sep 2
|
87
|
+
DateTime.parse("US-Eastern:19970912T090000"), #Sep 12
|
88
|
+
DateTime.parse("US-Eastern:19970922T090000"), #Sep 22
|
89
|
+
DateTime.parse("US-Eastern:19971002T090000"), #Oct 2
|
90
|
+
DateTime.parse("US-Eastern:19971012T090000"), #Oct 12
|
91
|
+
]
|
92
|
+
|
93
|
+
#we have to set the precision for use in EveryTE
|
94
|
+
start_date.date_precision = DPrecision::DAY
|
95
|
+
te = REWeek.new(Sun,Sat) & EveryTE.new(start_date, 10)
|
96
|
+
results = te.dates(DateRange.new(start_date, end_date), 5)
|
97
|
+
assert_equal(expected, results)
|
98
|
+
|
99
|
+
#alternatively we could use the DayIntervalTE
|
100
|
+
te = DayIntervalTE.new(start_date, 10)
|
101
|
+
results = te.dates(DateRange.new(start_date, end_date), 5 )
|
102
|
+
assert_equal(expected, results)
|
103
|
+
end
|
104
|
+
|
105
|
+
# "Every day in January, for 3 years" (first example, yearly byday)
|
106
|
+
def test_example_5_a
|
107
|
+
start_date = DateTime.parse("US-Eastern:19980101T090000") #Jan 1, 1998
|
108
|
+
end_date = start_date + 365 + 365 + 366 + 31 #Feb 1, 2001
|
109
|
+
|
110
|
+
#rrule = RecurrenceRule.new("FREQ=YEARLY;UNTIL=20000131T090000Z;BYMONTH=1;BYDAY=SU,MO,TU,WE,TH,FR,SA")
|
111
|
+
|
112
|
+
expected = []
|
113
|
+
expected += ICalendarTest.get_date_range(DateTime.parse("US-Eastern:19980101T090000"), DateTime.parse("US-Eastern:19980131T090000"))
|
114
|
+
expected += ICalendarTest.get_date_range(DateTime.parse("US-Eastern:19990101T090000"), DateTime.parse("US-Eastern:19990131T090000"))
|
115
|
+
expected += ICalendarTest.get_date_range(DateTime.parse("US-Eastern:20000101T090000"), DateTime.parse("US-Eastern:20000131T090000"))
|
116
|
+
|
117
|
+
te = BeforeTE.new(DateTime.parse("20000131T090000"), true) & REYear.new(1) & (DIWeek.new(Sun) | DIWeek.new(Mon) | DIWeek.new(Tue) | DIWeek.new(Wed) | DIWeek.new(Thu) | DIWeek.new(Fri) | DIWeek.new(Sat))
|
118
|
+
results = te.dates(DateRange.new(start_date, end_date))
|
119
|
+
assert_equal(expected, results)
|
120
|
+
end
|
121
|
+
|
122
|
+
# "Every day in January, for 3 years" (second example, daily bymonth)
|
123
|
+
def test_example_5_b
|
124
|
+
start_date = DateTime.parse("US-Eastern:19980101T090000")
|
125
|
+
end_date = start_date + 365 + 365 + 366 + 31 #Feb 1, 2001
|
126
|
+
|
127
|
+
#rrule = RecurrenceRule.new("FREQ=DAILY;UNTIL=20000131T090000Z;BYMONTH=1")
|
128
|
+
|
129
|
+
expected = []
|
130
|
+
expected += ICalendarTest.get_date_range(DateTime.parse("US-Eastern:19980101T090000"), DateTime.parse("US-Eastern:19980131T090000"))
|
131
|
+
expected += ICalendarTest.get_date_range(DateTime.parse("US-Eastern:19990101T090000"), DateTime.parse("US-Eastern:19990131T090000"))
|
132
|
+
expected += ICalendarTest.get_date_range(DateTime.parse("US-Eastern:20000101T090000"), DateTime.parse("US-Eastern:20000131T090000"))
|
133
|
+
|
134
|
+
te = BeforeTE.new(DateTime.parse("20000131T090000"), true) & REWeek.new(Sun, Sat) & REYear.new(1)
|
135
|
+
results = te.dates(DateRange.new(start_date, end_date))
|
136
|
+
assert_equal(expected, results)
|
137
|
+
end
|
138
|
+
|
139
|
+
=begin
|
140
|
+
# "Weekly for 10 occurrences"
|
141
|
+
def test_example_6
|
142
|
+
start_date = DateTime.parse("US-Eastern:19970902T090000")
|
143
|
+
rrule = RecurrenceRule.new("FREQ=WEEKLY;COUNT=10")
|
144
|
+
|
145
|
+
expected = [
|
146
|
+
DateTime.parse("US-Eastern:19970902T090000"), #Sep 2
|
147
|
+
DateTime.parse("US-Eastern:19970909T090000"), #Sep 9
|
148
|
+
DateTime.parse("US-Eastern:19970916T090000"), #Sep 16
|
149
|
+
DateTime.parse("US-Eastern:19970923T090000"), #Sep 23
|
150
|
+
DateTime.parse("US-Eastern:19970930T090000"), #Sep 30
|
151
|
+
DateTime.parse("US-Eastern:19971007T090000"), #Oct 7
|
152
|
+
DateTime.parse("US-Eastern:19971014T090000"), #Oct 14
|
153
|
+
DateTime.parse("US-Eastern:19971021T090000"), #Oct 21
|
154
|
+
DateTime.parse("US-Eastern:19971028T090000"), #Oct 28
|
155
|
+
DateTime.parse("US-Eastern:19971104T090000"), #Nov 4
|
156
|
+
]
|
157
|
+
results = te.dates(DateRange.new(start_date, END_DATE))
|
158
|
+
|
159
|
+
assert_equal(expected, results)
|
160
|
+
end
|
161
|
+
|
162
|
+
# "Weekly until December 24th, 1997"
|
163
|
+
def test_example_7
|
164
|
+
start_date = DateTime.parse("US-Eastern:19970902T090000")
|
165
|
+
rrule = RecurrenceRule.new("FREQ=WEEKLY;UNTIL=19971224T000000Z")
|
166
|
+
|
167
|
+
expected = [
|
168
|
+
DateTime.parse("US-Eastern:19970902T090000"), #Sep 2
|
169
|
+
DateTime.parse("US-Eastern:19970909T090000"), #Sep 9
|
170
|
+
DateTime.parse("US-Eastern:19970916T090000"), #Sep 16
|
171
|
+
DateTime.parse("US-Eastern:19970923T090000"), #Sep 23
|
172
|
+
DateTime.parse("US-Eastern:19970930T090000"), #Sep 30
|
173
|
+
DateTime.parse("US-Eastern:19971007T090000"), #Oct 7
|
174
|
+
DateTime.parse("US-Eastern:19971014T090000"), #Oct 14
|
175
|
+
DateTime.parse("US-Eastern:19971021T090000"), #Oct 21
|
176
|
+
DateTime.parse("US-Eastern:19971028T090000"), #Oct 28
|
177
|
+
DateTime.parse("US-Eastern:19971104T090000"), #Nov 4
|
178
|
+
DateTime.parse("US-Eastern:19971111T090000"), #Nov 11
|
179
|
+
DateTime.parse("US-Eastern:19971118T090000"), #Nov 18
|
180
|
+
DateTime.parse("US-Eastern:19971125T090000"), #Nov 25
|
181
|
+
DateTime.parse("US-Eastern:19971202T090000"), #Dec 2
|
182
|
+
DateTime.parse("US-Eastern:19971209T090000"), #Dec 9
|
183
|
+
DateTime.parse("US-Eastern:19971216T090000"), #Dec 16
|
184
|
+
DateTime.parse("US-Eastern:19971223T090000"), #Dec 23
|
185
|
+
]
|
186
|
+
results = te.dates(DateRange.new(start_date, END_DATE))
|
187
|
+
|
188
|
+
assert_equal(expected, results)
|
189
|
+
end
|
190
|
+
|
191
|
+
# "Every other week - forever"
|
192
|
+
def test_example_8
|
193
|
+
end
|
194
|
+
|
195
|
+
# "Weekly on Tuesday and Thursday for 5 weeks (first example, using until)"
|
196
|
+
def test_example_9_a
|
197
|
+
start_date = DateTime.parse("US-Eastern:19970902T090000")
|
198
|
+
rrule = RecurrenceRule.new("FREQ=WEEKLY;UNTIL=19971007T000000Z;WKST=SU;BYDAY=TU,TH")
|
199
|
+
|
200
|
+
expected = [
|
201
|
+
DateTime.parse("US-Eastern:19970902T090000"), #Sep 2
|
202
|
+
DateTime.parse("US-Eastern:19970904T090000"), #Sep 4
|
203
|
+
DateTime.parse("US-Eastern:19970909T090000"), #Sep 9
|
204
|
+
DateTime.parse("US-Eastern:19970911T090000"), #Sep 11
|
205
|
+
DateTime.parse("US-Eastern:19970916T090000"), #Sep 16
|
206
|
+
DateTime.parse("US-Eastern:19970918T090000"), #Sep 18
|
207
|
+
DateTime.parse("US-Eastern:19970923T090000"), #Sep 23
|
208
|
+
DateTime.parse("US-Eastern:19970925T090000"), #Sep 25
|
209
|
+
DateTime.parse("US-Eastern:19970930T090000"), #Sep 30
|
210
|
+
DateTime.parse("US-Eastern:19971002T090000"), #Oct 2
|
211
|
+
]
|
212
|
+
results = te.dates(DateRange.new(start_date, END_DATE))
|
213
|
+
|
214
|
+
assert_equal(expected, results)
|
215
|
+
end
|
216
|
+
|
217
|
+
# "Weekly on Tuesday and Thursday for 5 weeks (second example, using count)"
|
218
|
+
def test_example_9_b
|
219
|
+
start_date = DateTime.parse("US-Eastern:19970902T090000")
|
220
|
+
rrule = RecurrenceRule.new("FREQ=WEEKLY;COUNT=10;WKST=SU;BYDAY=TU,TH")
|
221
|
+
|
222
|
+
expected = [
|
223
|
+
DateTime.parse("US-Eastern:19970902T090000"), #Sep 2
|
224
|
+
DateTime.parse("US-Eastern:19970904T090000"), #Sep 4
|
225
|
+
DateTime.parse("US-Eastern:19970909T090000"), #Sep 9
|
226
|
+
DateTime.parse("US-Eastern:19970911T090000"), #Sep 11
|
227
|
+
DateTime.parse("US-Eastern:19970916T090000"), #Sep 16
|
228
|
+
DateTime.parse("US-Eastern:19970918T090000"), #Sep 18
|
229
|
+
DateTime.parse("US-Eastern:19970923T090000"), #Sep 23
|
230
|
+
DateTime.parse("US-Eastern:19970925T090000"), #Sep 25
|
231
|
+
DateTime.parse("US-Eastern:19970930T090000"), #Sep 30
|
232
|
+
DateTime.parse("US-Eastern:19971002T090000"), #Oct 2
|
233
|
+
]
|
234
|
+
results = te.dates(DateRange.new(start_date, END_DATE))
|
235
|
+
|
236
|
+
assert_equal(expected, results)
|
237
|
+
end
|
238
|
+
|
239
|
+
# "Every other week on Monday, Wednesday, and Friday until December 24, 1997
|
240
|
+
# but starting on Tuesday, September 2, 1997"
|
241
|
+
def test_example_10
|
242
|
+
end
|
243
|
+
|
244
|
+
# "Every other week on Tuesday and Thursday, for 8 occurences"
|
245
|
+
def test_example_11
|
246
|
+
end
|
247
|
+
=end
|
248
|
+
|
249
|
+
# "Monthly on the 1st Friday for ten occurences"
|
250
|
+
def test_example_12
|
251
|
+
start_date = DateTime.parse("US-Eastern:19970905T090000") #Sep 5, 1997
|
252
|
+
end_date = start_date + 365 #Sep 5, 1998
|
253
|
+
|
254
|
+
#rrule = RecurrenceRule.new("FREQ=MONTHLY;COUNT=10;BYDAY=1FR")
|
255
|
+
|
256
|
+
expected = [
|
257
|
+
DateTime.parse("US-Eastern:19970905T090000"), #Sep 5
|
258
|
+
DateTime.parse("US-Eastern:19971003T090000"), #Oct 3
|
259
|
+
DateTime.parse("US-Eastern:19971107T090000"), #Nov 7
|
260
|
+
DateTime.parse("US-Eastern:19971205T090000"), #Dec 5
|
261
|
+
DateTime.parse("US-Eastern:19980102T090000"), #Jan 2
|
262
|
+
DateTime.parse("US-Eastern:19980206T090000"), #Feb 6
|
263
|
+
DateTime.parse("US-Eastern:19980306T090000"), #Mar 6
|
264
|
+
DateTime.parse("US-Eastern:19980403T090000"), #Apr 3
|
265
|
+
DateTime.parse("US-Eastern:19980501T090000"), #May 1
|
266
|
+
DateTime.parse("US-Eastern:19980605T090000"), #Jun 5
|
267
|
+
]
|
268
|
+
|
269
|
+
te = DIMonth.new(1,5) #first friday
|
270
|
+
results = te.dates(DateRange.new(start_date, end_date), 10)
|
271
|
+
assert_equal(expected, results)
|
272
|
+
end
|
273
|
+
|
274
|
+
# "Monthly on the 1st Friday until December 24, 1997"
|
275
|
+
def test_example_13
|
276
|
+
start_date = DateTime.parse("US-Eastern:19970905T090000") #Sep 5, 1997
|
277
|
+
end_date = start_date + 365 #Sep 5, 1998
|
278
|
+
|
279
|
+
#rrule = RecurrenceRule.new("FREQ=MONTHLY;UNTIL=19971224T000000;BYDAY=1FR")
|
280
|
+
|
281
|
+
expected = [
|
282
|
+
DateTime.parse("US-Eastern:19970905T090000"), #Sep 5
|
283
|
+
DateTime.parse("US-Eastern:19971003T090000"), #Oct 3
|
284
|
+
DateTime.parse("US-Eastern:19971107T090000"), #Nov 7
|
285
|
+
DateTime.parse("US-Eastern:19971205T090000"), #Dec 5
|
286
|
+
]
|
287
|
+
|
288
|
+
te = BeforeTE.new(DateTime.parse("US-Eastern:19971224T000000")) & DIMonth.new(1,5) #first friday
|
289
|
+
results = te.dates(DateRange.new(start_date, end_date))
|
290
|
+
assert_equal(expected, results)
|
291
|
+
end
|
292
|
+
|
293
|
+
# "Every other month on the 1st and last Sunday of the month for 10 occurences"
|
294
|
+
def test_example_14
|
295
|
+
start_date = DateTime.parse("US-Eastern:19970907T090000") #Sep 7, 1997
|
296
|
+
end_date = start_date + 365 #Sep 7, 1998
|
297
|
+
|
298
|
+
#rrule = RecurrenceRule.new("FREQ=MONTHLY;INTERVAL=2;COUNT=10;BYDAY=1SU,-1SU")
|
299
|
+
|
300
|
+
expected = [
|
301
|
+
DateTime.parse("US-Eastern:19970907T090000"), #Sep 5
|
302
|
+
DateTime.parse("US-Eastern:19970928T090000"), #Sep 28
|
303
|
+
DateTime.parse("US-Eastern:19971102T090000"), #Nov 2
|
304
|
+
DateTime.parse("US-Eastern:19971130T090000"), #Nov 30
|
305
|
+
DateTime.parse("US-Eastern:19980104T090000"), #Jan 4
|
306
|
+
DateTime.parse("US-Eastern:19980125T090000"), #Jan 25
|
307
|
+
DateTime.parse("US-Eastern:19980301T090000"), #Mar 1
|
308
|
+
DateTime.parse("US-Eastern:19980329T090000"), #Mar 29
|
309
|
+
DateTime.parse("US-Eastern:19980503T090000"), #May 3
|
310
|
+
DateTime.parse("US-Eastern:19980531T090000"), #May 31
|
311
|
+
]
|
312
|
+
|
313
|
+
#set the date precision for the EveryTe
|
314
|
+
start_date.date_precision = DPrecision::MONTH
|
315
|
+
te = EveryTE.new(start_date, 2) & (DIMonth.new(1,0) | DIMonth.new(-1,0)) #first and last Sundays
|
316
|
+
results = te.dates(DateRange.new(start_date, end_date), 10)
|
317
|
+
assert_equal(expected, results)
|
318
|
+
end
|
319
|
+
|
320
|
+
# "Monthly on the second to last Monday of the month for 6 months"
|
321
|
+
def test_example_15
|
322
|
+
start_date = DateTime.parse("US-Eastern:19970922T090000") #Sep 22, 1997
|
323
|
+
end_date = start_date + 365 #Sep 22, 1998
|
324
|
+
|
325
|
+
#rrule = RecurrenceRule.new("FREQ=MONTHLY;COUNT=6;BYDAY=-2MO")
|
326
|
+
|
327
|
+
expected = [
|
328
|
+
DateTime.parse("US-Eastern:19970922T090000"), #Sep 22
|
329
|
+
DateTime.parse("US-Eastern:19971020T090000"), #Oct 20
|
330
|
+
DateTime.parse("US-Eastern:19971117T090000"), #Nov 17
|
331
|
+
DateTime.parse("US-Eastern:19971222T090000"), #Dec 22
|
332
|
+
DateTime.parse("US-Eastern:19980119T090000"), #Jan 19
|
333
|
+
DateTime.parse("US-Eastern:19980216T090000"), #Feb 16
|
334
|
+
]
|
335
|
+
|
336
|
+
te = DIMonth.new(-2,1) #second to last Monday
|
337
|
+
results = te.dates(DateRange.new(start_date, end_date), 6)
|
338
|
+
assert_equal(expected, results)
|
339
|
+
end
|
340
|
+
|
341
|
+
=begin
|
342
|
+
#### NOTE: Runt does not currently support negative day of month references!
|
343
|
+
# "Monthly on the third to the last day of the month, forever"
|
344
|
+
def test_example_16
|
345
|
+
start_date = DateTime.parse("US-Eastern:19970922T090000") #Sep 22, 1997
|
346
|
+
end_date = DateTime.parse("US-Eastern:19980301T090000"), #Mar 1, 1998
|
347
|
+
|
348
|
+
#rrule = RecurrenceRule.new("FREQ=MONTHLY;BYMONTHDAY=-3")
|
349
|
+
|
350
|
+
expected = [
|
351
|
+
DateTime.parse("US-Eastern:19970928T090000"), #Sep 28
|
352
|
+
DateTime.parse("US-Eastern:19971029T090000"), #Oct 29
|
353
|
+
DateTime.parse("US-Eastern:19971128T090000"), #Nov 28
|
354
|
+
DateTime.parse("US-Eastern:19971229T090000"), #Dec 29
|
355
|
+
DateTime.parse("US-Eastern:19980129T090000"), #Jan 29
|
356
|
+
DateTime.parse("US-Eastern:19980226T090000"), #Feb 26
|
357
|
+
]
|
358
|
+
|
359
|
+
te = REMonth.new(-3) #third to last day of the month
|
360
|
+
results = te.dates(DateRange.new(start_date, end_date))
|
361
|
+
assert_equal(expected, results)
|
362
|
+
end
|
363
|
+
=end
|
364
|
+
|
365
|
+
# "Monthly on the 2nd and 15th of the month for 10 occurences"
|
366
|
+
def test_example_17
|
367
|
+
start_date = DateTime.parse("US-Eastern:19970902T090000") #Sep 2, 1997
|
368
|
+
end_date = start_date + 365 #Sep 2, 1998
|
369
|
+
|
370
|
+
#rrule = RecurrenceRule.new("FREQ=MONTHLY;COUNT=10;BYMONTHDAY=2,15")
|
371
|
+
|
372
|
+
expected = [
|
373
|
+
DateTime.parse("US-Eastern:19970902T090000"), #Sep 2
|
374
|
+
DateTime.parse("US-Eastern:19970915T090000"), #Sep 15
|
375
|
+
DateTime.parse("US-Eastern:19971002T090000"), #Oct 2
|
376
|
+
DateTime.parse("US-Eastern:19971015T090000"), #Oct 15
|
377
|
+
DateTime.parse("US-Eastern:19971102T090000"), #Nov 2
|
378
|
+
DateTime.parse("US-Eastern:19971115T090000"), #Nov 15
|
379
|
+
DateTime.parse("US-Eastern:19971202T090000"), #Dec 2
|
380
|
+
DateTime.parse("US-Eastern:19971215T090000"), #Dec 15
|
381
|
+
DateTime.parse("US-Eastern:19980102T090000"), #Jan 2
|
382
|
+
DateTime.parse("US-Eastern:19980115T090000"), #Jan 15
|
383
|
+
]
|
384
|
+
|
385
|
+
te = REMonth.new(2) | REMonth.new(15) #second or fifteenth of the month
|
386
|
+
results = te.dates(DateRange.new(start_date, end_date), 10)
|
387
|
+
assert_equal(expected, results)
|
388
|
+
end
|
389
|
+
|
390
|
+
=begin
|
391
|
+
#### NOTE: Runt does not currently support negative day of month references!
|
392
|
+
# "Monthly on the first and last day of the month for 10 occurences"
|
393
|
+
def test_example_18
|
394
|
+
start_date = DateTime.parse("US-Eastern:19970930T090000") #Sep 30, 1997
|
395
|
+
end_date = start_date + 365 #Sep 30, 1998
|
396
|
+
|
397
|
+
#rrule = RecurrenceRule.new("FREQ=MONTHLY;COUNT=10;BYMONTHDAY=1,-1")
|
398
|
+
|
399
|
+
expected = [
|
400
|
+
DateTime.parse("US-Eastern:19970930T090000"), #Sep 30
|
401
|
+
DateTime.parse("US-Eastern:19971001T090000"), #Oct 1
|
402
|
+
DateTime.parse("US-Eastern:19971031T090000"), #Oct 31
|
403
|
+
DateTime.parse("US-Eastern:19971101T090000"), #Nov 1
|
404
|
+
DateTime.parse("US-Eastern:19971130T090000"), #Nov 30
|
405
|
+
DateTime.parse("US-Eastern:19971201T090000"), #Dec 1
|
406
|
+
DateTime.parse("US-Eastern:19971231T090000"), #Dec 31
|
407
|
+
DateTime.parse("US-Eastern:19980101T090000"), #Jan 1
|
408
|
+
DateTime.parse("US-Eastern:19980131T090000"), #Jan 31
|
409
|
+
DateTime.parse("US-Eastern:19980201T090000"), #Feb 1
|
410
|
+
]
|
411
|
+
|
412
|
+
te = REMonth.new(1) | REMonth.new(-1) #first and last days of the month
|
413
|
+
results = te.dates(DateRange.new(start_date, end_date), 10)
|
414
|
+
assert_equal(expected, results)
|
415
|
+
end
|
416
|
+
=end
|
417
|
+
|
418
|
+
# "Every 18 months on the 10th thru 15th of the month for 10 occurrences"
|
419
|
+
def test_example_19
|
420
|
+
start_date = DateTime.parse("US-Eastern:19970910T090000") #Sep 10, 1997
|
421
|
+
end_date = start_date + 365 + 365 #Sep 10, 1999
|
422
|
+
|
423
|
+
#rrule = RecurrenceRule.new("FREQ=MONTHLY;INTERVAL=18;COUNT=10;BYMONTHDAY=10,11,12,13,14,15")
|
424
|
+
|
425
|
+
expected = [
|
426
|
+
DateTime.parse("US-Eastern:19970910T090000"), #Sep 10, 1997
|
427
|
+
DateTime.parse("US-Eastern:19970911T090000"), #Sep 11, 1997
|
428
|
+
DateTime.parse("US-Eastern:19970912T090000"), #Sep 12, 1997
|
429
|
+
DateTime.parse("US-Eastern:19970913T090000"), #Sep 13, 1997
|
430
|
+
DateTime.parse("US-Eastern:19970914T090000"), #Sep 14, 1997
|
431
|
+
DateTime.parse("US-Eastern:19970915T090000"), #Sep 15, 1997
|
432
|
+
DateTime.parse("US-Eastern:19990310T090000"), #Mar 10, 1999
|
433
|
+
DateTime.parse("US-Eastern:19990311T090000"), #Mar 11, 1999
|
434
|
+
DateTime.parse("US-Eastern:19990312T090000"), #Mar 12, 1999
|
435
|
+
DateTime.parse("US-Eastern:19990313T090000"), #Mar 13, 1999
|
436
|
+
]
|
437
|
+
|
438
|
+
#we have to set the precision for use in EveryTE
|
439
|
+
start_date.date_precision = DPrecision::MONTH
|
440
|
+
te = EveryTE.new(start_date, 18) & REMonth.new(10,15) #tenth through the fifteenth
|
441
|
+
results = te.dates(DateRange.new(start_date, end_date), 10)
|
442
|
+
assert_equal(expected, results)
|
443
|
+
end
|
444
|
+
|
445
|
+
# "Every Tuesday, every other month"
|
446
|
+
def test_example_20
|
447
|
+
start_date = DateTime.parse("US-Eastern:19970902T090000") #Sep 2, 1997
|
448
|
+
end_date = start_date + 220 #Oct 4, 1998
|
449
|
+
|
450
|
+
#rrule = RecurrenceRule.new("FREQ=MONTHLY;INTERVAL=2;BYDAY=TU)
|
451
|
+
|
452
|
+
expected = [
|
453
|
+
DateTime.parse("US-Eastern:19970902T090000"), #Sep 02, 1997
|
454
|
+
DateTime.parse("US-Eastern:19970909T090000"), #Sep 09, 1997
|
455
|
+
DateTime.parse("US-Eastern:19970916T090000"), #Sep 16, 1997
|
456
|
+
DateTime.parse("US-Eastern:19970923T090000"), #Sep 23, 1997
|
457
|
+
DateTime.parse("US-Eastern:19970930T090000"), #Sep 30, 1997
|
458
|
+
DateTime.parse("US-Eastern:19971104T090000"), #Nov 04, 1997
|
459
|
+
DateTime.parse("US-Eastern:19971111T090000"), #Nov 11, 1997
|
460
|
+
DateTime.parse("US-Eastern:19971118T090000"), #Nov 18, 1997
|
461
|
+
DateTime.parse("US-Eastern:19971125T090000"), #Nov 25, 1997
|
462
|
+
DateTime.parse("US-Eastern:19980106T090000"), #Jan 06, 1998
|
463
|
+
DateTime.parse("US-Eastern:19980113T090000"), #Jan 13, 1998
|
464
|
+
DateTime.parse("US-Eastern:19980120T090000"), #Jan 20, 1998
|
465
|
+
DateTime.parse("US-Eastern:19980127T090000"), #Jan 27, 1998
|
466
|
+
DateTime.parse("US-Eastern:19980303T090000"), #Mar 03, 1998
|
467
|
+
DateTime.parse("US-Eastern:19980310T090000"), #Mar 10, 1998
|
468
|
+
DateTime.parse("US-Eastern:19980317T090000"), #Mar 17, 1998
|
469
|
+
DateTime.parse("US-Eastern:19980324T090000"), #Mar 24, 1998
|
470
|
+
DateTime.parse("US-Eastern:19980331T090000"), #Mar 31, 1998
|
471
|
+
]
|
472
|
+
|
473
|
+
#we have to set the precision for use in EveryTE
|
474
|
+
start_date.date_precision = DPrecision::MONTH
|
475
|
+
te = EveryTE.new(start_date, 2) & DIWeek.new(Tuesday)
|
476
|
+
results = te.dates(DateRange.new(start_date, end_date))
|
477
|
+
assert_equal(expected, results)
|
478
|
+
end
|
479
|
+
|
480
|
+
# "Yearly in June and July for 10 occurrences"
|
481
|
+
def test_example_21
|
482
|
+
start_date = DateTime.parse("US-Eastern:19970610T090000") #June 10, 1997
|
483
|
+
end_date = DateTime.parse("US-Eastern:20020725T090000") #July 25, 2002
|
484
|
+
|
485
|
+
#rrule = RecurrenceRule.new("FREQ=YEARLY;COUNT=10;BYMONTH=6,7)
|
486
|
+
|
487
|
+
expected = [
|
488
|
+
DateTime.parse("US-Eastern:19970610T090000"), #Jun 10, 1997
|
489
|
+
DateTime.parse("US-Eastern:19970710T090000"), #Jul 10, 1997
|
490
|
+
|
491
|
+
DateTime.parse("US-Eastern:19980610T090000"), #Jun 10, 1998
|
492
|
+
DateTime.parse("US-Eastern:19980710T090000"), #Jul 10, 1998
|
493
|
+
|
494
|
+
DateTime.parse("US-Eastern:19990610T090000"), #Jun 10, 1999
|
495
|
+
DateTime.parse("US-Eastern:19990710T090000"), #Jul 10, 1999
|
496
|
+
|
497
|
+
DateTime.parse("US-Eastern:20000610T090000"), #Jun 10, 2000
|
498
|
+
DateTime.parse("US-Eastern:20000710T090000"), #Jul 10, 2000
|
499
|
+
|
500
|
+
DateTime.parse("US-Eastern:20010610T090000"), #Jun 10, 2001
|
501
|
+
DateTime.parse("US-Eastern:20010710T090000"), #Jul 10, 2001
|
502
|
+
]
|
503
|
+
|
504
|
+
#we have to set the precision for use in EveryTE
|
505
|
+
start_date.date_precision = DPrecision::YEAR
|
506
|
+
te = (REYear.new(6) | REYear.new(7)) & REMonth.new(start_date.day)
|
507
|
+
results = te.dates(DateRange.new(start_date, end_date), 10)
|
508
|
+
assert_equal(expected, results)
|
509
|
+
end
|
510
|
+
|
511
|
+
def debug(expected, results)
|
512
|
+
puts "expected:"
|
513
|
+
expected.each {|date| puts date}
|
514
|
+
puts "results:"
|
515
|
+
results.each {|date| puts date}
|
516
|
+
end
|
517
|
+
|
518
|
+
#convenience method for creating an array of dates, one per day, from a start to an end date
|
519
|
+
def self.get_date_range(start_date, end_date)
|
520
|
+
dates = []
|
521
|
+
start_date.upto(end_date) {|date| dates << date}
|
522
|
+
dates
|
523
|
+
end
|
524
|
+
end
|