runt 0.7.0 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +19 -0
- data/.travis.yml +5 -0
- data/{CHANGES → CHANGES.txt} +24 -8
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -44
- data/README.md +79 -0
- data/Rakefile +6 -119
- data/doc/tutorial_schedule.md +365 -0
- data/doc/tutorial_sugar.md +170 -0
- data/doc/tutorial_te.md +155 -0
- data/lib/runt.rb +36 -21
- data/lib/runt/dprecision.rb +4 -2
- data/lib/runt/pdate.rb +101 -95
- data/lib/runt/schedule.rb +18 -0
- data/lib/runt/sugar.rb +41 -9
- data/lib/runt/temporalexpression.rb +246 -30
- data/lib/runt/version.rb +3 -0
- data/runt.gemspec +24 -0
- data/site/.cvsignore +1 -0
- data/site/dcl-small.gif +0 -0
- data/site/index-rubforge-www.html +72 -0
- data/site/index.html +75 -60
- data/site/runt-logo.gif +0 -0
- data/site/runt-logo.psd +0 -0
- data/test/baseexpressiontest.rb +10 -8
- data/test/combinedexpressionstest.rb +166 -158
- data/test/daterangetest.rb +4 -6
- data/test/diweektest.rb +32 -32
- data/test/dprecisiontest.rb +2 -4
- data/test/everytetest.rb +6 -0
- data/test/expressionbuildertest.rb +2 -3
- data/test/icalendartest.rb +3 -6
- data/test/minitest_helper.rb +7 -0
- data/test/pdatetest.rb +21 -6
- data/test/redaytest.rb +3 -0
- data/test/reyeartest.rb +1 -1
- data/test/runttest.rb +5 -8
- data/test/scheduletest.rb +13 -14
- data/test/sugartest.rb +28 -6
- data/test/{spectest.rb → temporaldatetest.rb} +14 -4
- data/test/{rspectest.rb → temporalrangetest.rb} +4 -4
- data/test/test_runt.rb +11 -0
- data/test/weekintervaltest.rb +106 -0
- metadata +161 -116
- data/README +0 -106
- data/doc/tutorial_schedule.rdoc +0 -393
- data/doc/tutorial_sugar.rdoc +0 -143
- data/doc/tutorial_te.rdoc +0 -190
- data/setup.rb +0 -1331
data/test/daterangetest.rb
CHANGED
@@ -1,19 +1,17 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'runt'
|
5
|
-
require 'date'
|
3
|
+
require 'minitest_helper'
|
6
4
|
|
7
5
|
# Unit tests for DateRange class
|
8
6
|
#
|
9
7
|
# Author:: Matthew Lipper
|
10
|
-
class DateRangeTest <
|
8
|
+
class DateRangeTest < MiniTest::Unit::TestCase
|
11
9
|
|
12
10
|
include Runt
|
13
11
|
|
14
12
|
def test_sub_range
|
15
|
-
r_start = PDate.
|
16
|
-
r_end = PDate.
|
13
|
+
r_start = PDate.min(2004,2,29,16,24)
|
14
|
+
r_end = PDate.min(2004,3,2,4,22)
|
17
15
|
range = DateRange.new(r_start,r_end)
|
18
16
|
assert(range.min==r_start)
|
19
17
|
assert(range.max==r_end)
|
data/test/diweektest.rb
CHANGED
@@ -1,32 +1,32 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'baseexpressiontest'
|
4
|
-
|
5
|
-
# Unit tests for DIWeek class
|
6
|
-
# Author:: Matthew Lipper
|
7
|
-
|
8
|
-
class DIWeekTest < BaseExpressionTest
|
9
|
-
|
10
|
-
def test_day_in_week_te
|
11
|
-
expr = DIWeek.new(Friday)
|
12
|
-
assert expr.include?(@date_20040109), "'Friday' should include #{@date_20040109} which is a Friday"
|
13
|
-
assert expr.include?(@date_20040116), "'Friday' should include #{@date_20040116} which is a Friday"
|
14
|
-
assert !expr.include?(@date_20040125), "'Friday' should not include #{@date_20040125} which is a Sunday"
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_day_in_week_te_to_s
|
18
|
-
assert_equal 'Friday', DIWeek.new(Friday).to_s
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_day_in_week_dates
|
22
|
-
expr = DIWeek.new(Sunday)
|
23
|
-
dates = expr.dates(@date_20050101..@date_20050131)
|
24
|
-
assert dates.size == 5, "There are five Sundays in January, 2005: found #{dates.size}"
|
25
|
-
assert dates.include?(@date_20050102), "Should include #{@date_20050102}"
|
26
|
-
assert dates.include?(@date_20050109), "Should include #{@date_20050109}"
|
27
|
-
assert dates.include?(@date_20050116), "Should include #{@date_20050116}"
|
28
|
-
assert dates.include?(@date_20050123), "Should include #{@date_20050123}"
|
29
|
-
assert dates.include?(@date_20050130), "Should include #{@date_20050130}"
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'baseexpressiontest'
|
4
|
+
|
5
|
+
# Unit tests for DIWeek class
|
6
|
+
# Author:: Matthew Lipper
|
7
|
+
|
8
|
+
class DIWeekTest < BaseExpressionTest
|
9
|
+
|
10
|
+
def test_day_in_week_te
|
11
|
+
expr = DIWeek.new(Friday)
|
12
|
+
assert expr.include?(@date_20040109), "'Friday' should include #{@date_20040109} which is a Friday"
|
13
|
+
assert expr.include?(@date_20040116), "'Friday' should include #{@date_20040116} which is a Friday"
|
14
|
+
assert !expr.include?(@date_20040125), "'Friday' should not include #{@date_20040125} which is a Sunday"
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_day_in_week_te_to_s
|
18
|
+
assert_equal 'Friday', DIWeek.new(Friday).to_s
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_day_in_week_dates
|
22
|
+
expr = DIWeek.new(Sunday)
|
23
|
+
dates = expr.dates(@date_20050101..@date_20050131)
|
24
|
+
assert dates.size == 5, "There are five Sundays in January, 2005: found #{dates.size}"
|
25
|
+
assert dates.include?(@date_20050102), "Should include #{@date_20050102}"
|
26
|
+
assert dates.include?(@date_20050109), "Should include #{@date_20050109}"
|
27
|
+
assert dates.include?(@date_20050116), "Should include #{@date_20050116}"
|
28
|
+
assert dates.include?(@date_20050123), "Should include #{@date_20050123}"
|
29
|
+
assert dates.include?(@date_20050130), "Should include #{@date_20050130}"
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
data/test/dprecisiontest.rb
CHANGED
@@ -1,14 +1,12 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'runt'
|
5
|
-
require 'date'
|
3
|
+
require 'minitest_helper'
|
6
4
|
|
7
5
|
# Unit tests for DPrecision class
|
8
6
|
#
|
9
7
|
# Author:: Matthew Lipper
|
10
8
|
|
11
|
-
class DPrecisionTest <
|
9
|
+
class DPrecisionTest < MiniTest::Unit::TestCase
|
12
10
|
|
13
11
|
include Runt
|
14
12
|
|
data/test/everytetest.rb
CHANGED
@@ -7,6 +7,12 @@ require 'baseexpressiontest'
|
|
7
7
|
|
8
8
|
class EveryTETest < BaseExpressionTest
|
9
9
|
|
10
|
+
def test_every_other_week
|
11
|
+
date = @pdate_20081112
|
12
|
+
expr = EveryTE.new(date, 14, DPrecision::DAY)
|
13
|
+
assert !expr.include?(date + 7)
|
14
|
+
assert expr.include?(date + 14)
|
15
|
+
end
|
10
16
|
|
11
17
|
def test_every_2_minutes
|
12
18
|
date = @pdate_200401282100
|
data/test/icalendartest.rb
CHANGED
@@ -1,15 +1,12 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'date'
|
5
|
-
require 'runt'
|
6
|
-
require 'set'
|
3
|
+
require 'minitest_helper'
|
7
4
|
|
8
|
-
include Runt
|
9
5
|
|
10
6
|
# RFC 2445 is the iCalendar specification. It includes dozens of
|
11
7
|
# specific examples that make great tests for Runt temporal expressions.
|
12
|
-
class ICalendarTest <
|
8
|
+
class ICalendarTest < MiniTest::Unit::TestCase
|
9
|
+
include Runt
|
13
10
|
|
14
11
|
# "Daily for 10 occurences"
|
15
12
|
def test_example_1
|
data/test/pdatetest.rb
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'date'
|
5
|
-
require 'runt'
|
3
|
+
require 'minitest_helper'
|
6
4
|
|
7
5
|
# Unit tests for PDate class
|
8
6
|
# Author:: Matthew Lipper
|
9
|
-
class PDateTest <
|
7
|
+
class PDateTest < MiniTest::Unit::TestCase
|
10
8
|
|
11
9
|
include Runt
|
12
10
|
|
@@ -25,13 +23,24 @@ class PDateTest < Test::Unit::TestCase
|
|
25
23
|
@second_prec = PDate.sec(2004,3,1,0,0,10)
|
26
24
|
end
|
27
25
|
|
26
|
+
def test_pdate_with_native_range
|
27
|
+
start_dt = PDate.min(2013,04,22,8,0)
|
28
|
+
middle_dt = PDate.min(2013,04,22,8,2)
|
29
|
+
end_dt = PDate.min(2013,04,22,8,04)
|
30
|
+
range = start_dt..end_dt
|
31
|
+
assert(range.include?(middle_dt))
|
32
|
+
end
|
33
|
+
|
28
34
|
def test_marshal
|
29
35
|
# Thanks to Jodi Showers for finding/fixing this bug
|
30
36
|
pdate=PDate.new(2004,2,29,22,13,2)
|
31
|
-
|
37
|
+
refute_nil pdate.date_precision
|
32
38
|
data=Marshal.dump pdate
|
33
39
|
obj=Marshal.load data
|
34
|
-
|
40
|
+
refute_nil obj.date_precision
|
41
|
+
#FIXME: marshall broken in 1.9
|
42
|
+
#assert(obj.eql?(pdate))
|
43
|
+
#assert(pdate.eql?(obj))
|
35
44
|
end
|
36
45
|
|
37
46
|
def test_include
|
@@ -144,4 +153,10 @@ class PDateTest < Test::Unit::TestCase
|
|
144
153
|
end
|
145
154
|
end
|
146
155
|
|
156
|
+
def test_parse_with_precision
|
157
|
+
month_parsed = PDate.parse('April 2004', :precision => PDate::MONTH)
|
158
|
+
assert_equal month_parsed, PDate.month(2004,04)
|
159
|
+
refute_equal month_parsed, PDate.year(2004,04)
|
160
|
+
end
|
161
|
+
|
147
162
|
end
|
data/test/redaytest.rb
CHANGED
@@ -35,6 +35,9 @@ class REDayTest < BaseExpressionTest
|
|
35
35
|
expr = REDay.new(8,00,10,00, false)
|
36
36
|
assert !expr.include?(@pdate_20040531), \
|
37
37
|
"Expression #{expr.to_s} created with less_precise_match=false should not include any lower precision argument automatically"
|
38
|
+
## Date class which has no public hour or min methods should not cause an exception
|
39
|
+
assert !expr.include?(@date_19611101), \
|
40
|
+
"Expression #{expr.to_s} created with less_precise_match=false should not hurl when given a Date instance"
|
38
41
|
end
|
39
42
|
|
40
43
|
end
|
data/test/reyeartest.rb
CHANGED
@@ -31,7 +31,7 @@ class REYearTest < BaseExpressionTest
|
|
31
31
|
assert expr.end_day == REYear::NO_DAY, "End day should equal constant NO_DAY"
|
32
32
|
end
|
33
33
|
|
34
|
-
def
|
34
|
+
def test_ctor_four_args
|
35
35
|
expr = REYear.new(10,21,12,3)
|
36
36
|
assert expr.start_month == 10, "Start month should equal 10"
|
37
37
|
assert expr.end_month == 12, "End month should equal 12"
|
data/test/runttest.rb
CHANGED
@@ -1,11 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'runt'
|
5
|
-
require 'date'
|
6
|
-
require 'pp'
|
3
|
+
require 'minitest_helper'
|
7
4
|
|
8
|
-
class RuntModuleTest <
|
5
|
+
class RuntModuleTest < MiniTest::Unit::TestCase
|
9
6
|
|
10
7
|
def test_last
|
11
8
|
assert Runt::Last == -1
|
@@ -80,19 +77,19 @@ class RuntModuleTest < Test::Unit::TestCase
|
|
80
77
|
|
81
78
|
def test_date_class_dprecision
|
82
79
|
date=Date.today
|
83
|
-
assert_equal(Runt::DPrecision::
|
80
|
+
assert_equal(Runt::DPrecision::DAY,date.date_precision)
|
84
81
|
end
|
85
82
|
|
86
83
|
def test_datetime_class_dprecision
|
87
84
|
date=DateTime.civil
|
88
|
-
assert_equal(Runt::DPrecision::
|
85
|
+
assert_equal(Runt::DPrecision::SEC,date.date_precision)
|
89
86
|
end
|
90
87
|
|
91
88
|
def test_time_plus
|
92
89
|
time=Time.local(2006, 12, 9, 5, 56, 12)
|
93
90
|
# Default precision is minute
|
94
91
|
assert_equal(Runt::PDate.min(2006,12,9,5,56),Runt::DPrecision.to_p(time))
|
95
|
-
|
92
|
+
refute_equal(Time.parse("Sat Dec 09 05:56:00 -0500 2006"),time)
|
96
93
|
end
|
97
94
|
|
98
95
|
end
|
data/test/scheduletest.rb
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'runt'
|
5
|
-
require 'date'
|
3
|
+
require 'minitest_helper'
|
6
4
|
|
7
5
|
# Unit tests for Schedule classes
|
8
6
|
# Author:: Matthew Lipper
|
9
|
-
class ScheduleTest <
|
7
|
+
class ScheduleTest < MiniTest::Unit::TestCase
|
10
8
|
|
11
9
|
include Runt
|
12
10
|
|
@@ -87,14 +85,15 @@ class ScheduleTest < Test::Unit::TestCase
|
|
87
85
|
@sched=Schedule.new
|
88
86
|
e1=Event.new("e1")
|
89
87
|
assert(!@sched.include?(e1,nil))
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
assert(
|
88
|
+
#FIXME: Temporarily comment this out since it hangs JRuby 1.9
|
89
|
+
#range=TemporalRange.new(DateRange.new(PDate.new(2006,12,3),PDate.new(2007,1,24)))
|
90
|
+
#in_range=PDate.new(2007,1,4)
|
91
|
+
#assert(range.include?(in_range))
|
92
|
+
#out_of_range=PDate.new(2006,1,4)
|
93
|
+
#assert(!range.include?(out_of_range))
|
94
|
+
#@sched.add(e1,range)
|
95
|
+
#assert(@sched.include?(e1,in_range))
|
96
|
+
#assert(!@sched.include?(e1,out_of_range))
|
98
97
|
end
|
99
98
|
|
100
99
|
def test_dates
|
@@ -113,10 +112,10 @@ class ScheduleTest < Test::Unit::TestCase
|
|
113
112
|
def test_using_a_schedule
|
114
113
|
|
115
114
|
# September 18th - 19th, 2005, 8am - 10am
|
116
|
-
expr1=
|
115
|
+
expr1=TemporalRange.new(DateRange.new(PDate.day(2005,9,18),PDate.day(2005,9,19))) & REDay.new(8,0,10,0)
|
117
116
|
assert(expr1.include?(PDate.min(2005,9,18,8,15)))
|
118
117
|
# September 19th - 20th, 2005, 9am - 11am
|
119
|
-
expr2=
|
118
|
+
expr2=TemporalRange.new(DateRange.new(PDate.day(2005,9,19),PDate.day(2005,9,20))) & REDay.new(9,0,11,0)
|
120
119
|
# Quick sanuty check
|
121
120
|
assert(expr1.overlap?(expr2))
|
122
121
|
# Setup a @schedule w/first expression
|
data/test/sugartest.rb
CHANGED
@@ -1,14 +1,12 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'runt'
|
5
|
-
require 'runt/sugar'
|
3
|
+
require 'minitest_helper'
|
6
4
|
|
7
|
-
class SugarTest <
|
5
|
+
class SugarTest < MiniTest::Unit::TestCase
|
8
6
|
include Runt
|
9
7
|
|
10
|
-
def
|
11
|
-
|
8
|
+
def setup
|
9
|
+
@date = PDate.day(2008,7,1)
|
12
10
|
end
|
13
11
|
|
14
12
|
def test_method_missing_should_be_called_for_invalid_name
|
@@ -87,6 +85,30 @@ class SugarTest < Test::Unit::TestCase
|
|
87
85
|
end
|
88
86
|
end
|
89
87
|
|
88
|
+
def test_after_should_define_after_te_with_inclusive_parameter
|
89
|
+
result = self.after(@date, true)
|
90
|
+
assert_expression AfterTE.new(@date, true), result
|
91
|
+
assert result.instance_variable_get("@inclusive")
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_after_should_define_after_te_without_inclusive_parameter
|
95
|
+
result = self.after(@date)
|
96
|
+
assert_expression AfterTE.new(@date), result
|
97
|
+
assert !result.instance_variable_get("@inclusive")
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_before_should_define_before_te_with_inclusive_parameter
|
101
|
+
result = self.before(@date, true)
|
102
|
+
assert_expression BeforeTE.new(@date, true), result
|
103
|
+
assert result.instance_variable_get("@inclusive")
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_before_should_define_before_te_without_inclusive_parameter
|
107
|
+
result = self.before(@date)
|
108
|
+
assert_expression BeforeTE.new(@date), result
|
109
|
+
assert !result.instance_variable_get("@inclusive")
|
110
|
+
end
|
111
|
+
|
90
112
|
private
|
91
113
|
def assert_expression(expected, actual)
|
92
114
|
assert_equal expected.to_s, actual.to_s, \
|
@@ -3,19 +3,29 @@
|
|
3
3
|
|
4
4
|
require 'baseexpressiontest'
|
5
5
|
|
6
|
-
# Unit tests for
|
6
|
+
# Unit tests for TemporalDate class
|
7
7
|
# Author:: Matthew Lipper
|
8
8
|
|
9
|
-
class
|
9
|
+
class TemporalDateTest < BaseExpressionTest
|
10
10
|
|
11
11
|
def setup
|
12
12
|
super
|
13
|
-
@spec =
|
13
|
+
@spec = TemporalDate.new(@stub1)
|
14
14
|
end
|
15
15
|
|
16
16
|
def test_initialize
|
17
17
|
assert_same @stub1, @spec.date_expr, "Expected #{@stub1}, instead got #{@spec.date_expr}"
|
18
18
|
end
|
19
|
+
|
20
|
+
def test_specific_date
|
21
|
+
date_spec = TemporalDate.new(Date.new(2006,06,27))
|
22
|
+
|
23
|
+
assert !date_spec.include?(Date.new(2005,06,27))
|
24
|
+
assert !date_spec.include?(Date.new(2006,06,26))
|
25
|
+
assert date_spec.include?(Date.new(2006,06,27))
|
26
|
+
assert !date_spec.include?(Date.new(2006,06,28))
|
27
|
+
assert !date_spec.include?(Date.new(2007,06,27))
|
28
|
+
end
|
19
29
|
|
20
30
|
def test_include_arg_has_include_method
|
21
31
|
assert !@spec.include?(@stub2), "Expression should not include configured stub"
|
@@ -24,7 +34,7 @@ class SpecTest < BaseExpressionTest
|
|
24
34
|
end
|
25
35
|
|
26
36
|
def test_include_arg_without_include_method
|
27
|
-
@spec =
|
37
|
+
@spec = TemporalDate.new(4)
|
28
38
|
assert !@spec.include?(3), "Expression #{@spec.to_s} should not include 3"
|
29
39
|
assert @spec.include?(4), "Expression #{@spec.to_s} should include 4"
|
30
40
|
end
|
@@ -3,13 +3,13 @@
|
|
3
3
|
|
4
4
|
require 'baseexpressiontest'
|
5
5
|
|
6
|
-
# Unit tests for
|
6
|
+
# Unit tests for TemporalRange class
|
7
7
|
# Author:: Matthew Lipper
|
8
8
|
|
9
|
-
class
|
9
|
+
class TemporalRangeTest < BaseExpressionTest
|
10
10
|
|
11
11
|
def test_include
|
12
|
-
rspec =
|
12
|
+
rspec = TemporalRange.new(@stub1)
|
13
13
|
assert !rspec.include?("Any Object"), "Expression should not include any given argument"
|
14
14
|
@stub1.match = true
|
15
15
|
assert rspec.include?("Any Object"), "Expression should include any given argument"
|
@@ -17,7 +17,7 @@ class RSpecTest < BaseExpressionTest
|
|
17
17
|
|
18
18
|
def test_overlap
|
19
19
|
range = DateRange.new(@date_20050101, @date_20050109)
|
20
|
-
rspec =
|
20
|
+
rspec = TemporalRange.new(range)
|
21
21
|
assert !rspec.include?(@date_20050116), "Expression #{rspec.to_s} should not include #{@date_20050116.to_s}"
|
22
22
|
assert rspec.include?(@date_20050102), "Expression #{rspec.to_s} should include #{@date_20050102.to_s}"
|
23
23
|
end
|