runt19 0.7.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/.gitignore +17 -0
  2. data/Gemfile +4 -0
  3. data/History.txt +153 -0
  4. data/LICENSE +22 -0
  5. data/LICENSE.txt +44 -0
  6. data/Manifest.txt +112 -0
  7. data/README.md +29 -0
  8. data/README.txt +106 -0
  9. data/Rakefile +2 -0
  10. data/TODO +13 -0
  11. data/examples/payment_report.rb +59 -0
  12. data/examples/payment_reporttest.rb +49 -0
  13. data/examples/reminder.rb +63 -0
  14. data/examples/schedule_tutorial.rb +59 -0
  15. data/examples/schedule_tutorialtest.rb +52 -0
  16. data/lib/runt.rb +249 -0
  17. data/lib/runt/daterange.rb +74 -0
  18. data/lib/runt/dprecision.rb +150 -0
  19. data/lib/runt/expressionbuilder.rb +65 -0
  20. data/lib/runt/pdate.rb +165 -0
  21. data/lib/runt/schedule.rb +88 -0
  22. data/lib/runt/sugar.rb +171 -0
  23. data/lib/runt/temporalexpression.rb +795 -0
  24. data/lib/runt/version.rb +3 -0
  25. data/lib/runt19.rb +1 -0
  26. data/runt19.gemspec +17 -0
  27. data/setup.rb +1331 -0
  28. data/site/blue-robot3.css +132 -0
  29. data/site/dcl-small.gif +0 -0
  30. data/site/index.html +72 -0
  31. data/site/logohover.png +0 -0
  32. data/site/runt-logo.gif +0 -0
  33. data/site/runt-logo.psd +0 -0
  34. data/test/aftertetest.rb +31 -0
  35. data/test/baseexpressiontest.rb +110 -0
  36. data/test/beforetetest.rb +31 -0
  37. data/test/collectiontest.rb +63 -0
  38. data/test/combinedexpressionstest.rb +158 -0
  39. data/test/daterangetest.rb +89 -0
  40. data/test/dayintervaltetest.rb +37 -0
  41. data/test/difftest.rb +37 -0
  42. data/test/dimonthtest.rb +59 -0
  43. data/test/diweektest.rb +32 -0
  44. data/test/dprecisiontest.rb +58 -0
  45. data/test/everytetest.rb +36 -0
  46. data/test/expressionbuildertest.rb +64 -0
  47. data/test/icalendartest.rb +1104 -0
  48. data/test/intersecttest.rb +34 -0
  49. data/test/pdatetest.rb +147 -0
  50. data/test/redaytest.rb +40 -0
  51. data/test/remonthtest.rb +37 -0
  52. data/test/reweektest.rb +51 -0
  53. data/test/reyeartest.rb +99 -0
  54. data/test/rspectest.rb +25 -0
  55. data/test/runttest.rb +98 -0
  56. data/test/scheduletest.rb +148 -0
  57. data/test/spectest.rb +36 -0
  58. data/test/sugartest.rb +104 -0
  59. data/test/temporalexpressiontest.rb +76 -0
  60. data/test/uniontest.rb +36 -0
  61. data/test/wimonthtest.rb +54 -0
  62. data/test/yeartetest.rb +22 -0
  63. metadata +137 -0
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'baseexpressiontest'
4
+
5
+ # Unit tests for Intersect class
6
+ # Author:: Matthew Lipper
7
+
8
+ class IntersectTest < BaseExpressionTest
9
+
10
+ def setup
11
+ super
12
+ @intersect = Intersect.new
13
+ @date = @pdate_20071008
14
+ end
15
+
16
+ def test_to_s
17
+ assert_equal 'empty', @intersect.to_s
18
+ @intersect.add(@stub1)
19
+ assert_equal 'every ' + @stub1.to_s, @intersect.to_s
20
+ @intersect.add(@stub2)
21
+ assert_equal 'every ' + @stub1.to_s + ' and ' + @stub2.to_s, @intersect.to_s
22
+ end
23
+
24
+
25
+ def test_include
26
+ assert !@intersect.include?(@date), "Empty Intersect instance should not include any dates"
27
+ @intersect.add(@stub1).add(@stub2) # both expressions will return false
28
+ assert !@intersect.include?(@date), "Intersect instance should not include any dates"
29
+ @stub2.match = true
30
+ assert !@intersect.include?(@date), "Intersect instance should not include any dates"
31
+ @stub1.match = true
32
+ assert @intersect.include?(@date), "Intersect instance should include any dates"
33
+ end
34
+ end
@@ -0,0 +1,147 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'date'
5
+ require 'runt'
6
+
7
+ # Unit tests for PDate class
8
+ # Author:: Matthew Lipper
9
+ class PDateTest < Test::Unit::TestCase
10
+
11
+ include Runt
12
+
13
+ def setup
14
+ # 2010 (August - ignored)
15
+ @year_prec = PDate.year(2010,8)
16
+ #August, 2004
17
+ @month_prec = PDate.month(2004,8)
18
+ #January 25th, 2004 (11:39 am - ignored)
19
+ @week_prec = PDate.week(2004,1,25,11,39)
20
+ #January 25th, 2004 (11:39 am - ignored)
21
+ @day_prec = PDate.day(2004,1,25,11,39)
22
+ #11:59(:04 - ignored), December 31st, 1999
23
+ @minute_prec = PDate.min(1999,12,31,23,59,4)
24
+ #12:00:10 am, March 1st, 2004
25
+ @second_prec = PDate.sec(2004,3,1,0,0,10)
26
+ end
27
+
28
+ def test_marshal
29
+ # Thanks to Jodi Showers for finding/fixing this bug
30
+ pdate=PDate.new(2004,2,29,22,13,2)
31
+ assert_not_nil pdate.date_precision
32
+ data=Marshal.dump pdate
33
+ obj=Marshal.load data
34
+ assert_not_nil obj.date_precision
35
+ end
36
+
37
+ def test_include
38
+ pdate = PDate.new(2006,3,10)
39
+ assert(pdate.include?(Date.new(2006,3,10)))
40
+ date = Date.new(2006,3,10)
41
+ assert(date.include?(PDate.new(2006,3,10)))
42
+ end
43
+
44
+ def test_new
45
+ date = PDate.new(2004,2,29)
46
+ assert(!date.date_precision.nil?)
47
+ date_time = PDate.new(2004,2,29,22,13,2)
48
+ assert(!date_time.date_precision.nil?)
49
+ date2 = PDate.day(2004,2,29)
50
+ assert(date==date2)
51
+ date_time2 = PDate.sec(2004,2,29,22,13,2)
52
+ assert(date_time==date_time2)
53
+ end
54
+
55
+ def test_plus
56
+ assert(PDate.year(2022,12)==(@year_prec+12))
57
+ assert(PDate.month(2005,2)==(@month_prec+6))
58
+ assert(PDate.week(2004,2,1)==(@week_prec+1))
59
+ assert(PDate.day(2004,2,1)==(@day_prec+7))
60
+ assert(PDate.min(2000,1,1,0,0)==(@minute_prec+1))
61
+ assert(PDate.sec(2004,3,1,0,0,21)==(@second_prec+11))
62
+ end
63
+
64
+ def test_minus
65
+ assert(PDate.year(1998,12)==(@year_prec-12))
66
+ assert(PDate.month(2002,6)==(@month_prec-26))
67
+ assert(PDate.week(2004,1,11)==(@week_prec-2))
68
+ #Hmmm...FIXME? @day_prec-26 == 12/31??
69
+ assert(PDate.day(2003,12,30)==(@day_prec-26))
70
+ assert(PDate.min(1999,12,31,21,57)==(@minute_prec-122))
71
+ assert(PDate.sec(2004,2,29,23,59,59)==(@second_prec-11))
72
+ end
73
+ def test_spaceship_comparison_operator
74
+ sec_prec = PDate.sec(2002,8,28,6,04,02)
75
+ assert(PDate.year(1998,12)<sec_prec)
76
+ assert(PDate.month(2002,9)>sec_prec)
77
+ assert(PDate.week(2002,8,28)==sec_prec)
78
+ assert(PDate.day(2002,8,28)==sec_prec)
79
+ assert(PDate.min(1999,12,31,21,57)<sec_prec)
80
+ assert(DateTime.new(2002,8,28,6,04,02)==sec_prec)
81
+ assert(Date.new(2004,8,28)>sec_prec)
82
+ end
83
+ def test_succ
84
+ #~ fail("FIXME! Implement succ")
85
+ end
86
+ def test_range
87
+ #11:50 pm (:22 seconds ignored), February 2nd, 2004
88
+ min1 = PDate.min(2004,2,29,23,50,22)
89
+ #12:02 am , March 1st, 2004
90
+ min2 = PDate.min(2004,3,1,0,2)
91
+ #Inclusive Range w/minute precision
92
+ r_min = min1..min2
93
+ assert( r_min.include?(PDate.min(2004,2,29,23,50,22)) )
94
+ assert( r_min.include?(PDate.min(2004,3,1,0,2)) )
95
+ assert( r_min.include?(PDate.min(2004,3,1,0,0)) )
96
+ assert( ! r_min.include?(PDate.min(2004,3,1,0,3)) )
97
+ #Exclusive Range w/minute precision
98
+ r_min = min1...min2
99
+ assert( r_min.include?(PDate.min(2004,2,29,23,50,22)) )
100
+ assert( !r_min.include?(PDate.min(2004,3,1,0,2)) )
101
+ end
102
+
103
+ def test_create_with_class_methods
104
+ #December 12th, 1968
105
+ no_prec = PDate.civil(1968,12,12)
106
+ #December 12th, 1968 (at 11:15 am - ignored)
107
+ day_prec = PDate.day(1968,12,12,11,15)
108
+ assert(no_prec==day_prec, "PDate instance does not equal precisioned instance.")
109
+ #December 2004 (24th - ignored)
110
+ month_prec1 = PDate.month(2004,12,24)
111
+ #December 31st, 2004 (31st - ignored)
112
+ month_prec2 = PDate.month(2004,12,31)
113
+ assert(month_prec1==month_prec2, "PDate.month instances not equal.")
114
+ #December 2004
115
+ month_prec3 = PDate.month(2004,12)
116
+ assert(month_prec1==month_prec3, "PDate.month instances not equal.")
117
+ assert(month_prec2==month_prec3, "PDate.month instances not equal.")
118
+ #December 2003
119
+ month_prec4 = PDate.month(2003,12)
120
+ assert(month_prec4!=month_prec1, "PDate.month instances not equal.")
121
+
122
+ one_week = [
123
+ PDate.week(2004, 12, 20), # Monday
124
+ PDate.week(2004, 12, 21), # Tuesday
125
+ PDate.week(2004, 12, 22), # Wednesday
126
+ PDate.week(2004, 12, 23), # Thursday
127
+ PDate.week(2004, 12, 24), # Friday
128
+ PDate.week(2004, 12, 25), # Saturday
129
+ PDate.week(2004, 12, 26), # Sunday
130
+ ]
131
+
132
+ one_week.each do |week_prec1|
133
+ one_week.each do |week_prec2|
134
+ assert_equal week_prec1, week_prec2
135
+ end
136
+ end
137
+
138
+ week_before = PDate.week(2004, 12, 19)
139
+ week_after = PDate.week(2004, 12, 27)
140
+
141
+ one_week.each do |week_prec|
142
+ assert week_prec != week_before
143
+ assert week_prec != week_after
144
+ end
145
+ end
146
+
147
+ end
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'baseexpressiontest'
4
+
5
+ # Unit tests for REDay class
6
+ # Author:: Matthew Lipper
7
+
8
+ class REDayTest < BaseExpressionTest
9
+
10
+
11
+ def test_noon_to_430
12
+ #noon to 4:30pm
13
+ expr = REDay.new(12,0,16,30)
14
+ assert expr.include?(@pdate_2012050815), "Expression #{expr.to_s} should include #{@pdate_2012050815.to_s}"
15
+ assert expr.include?(@pdate_1922041816), "Expression #{expr.to_s} should include #{@pdate_1922041816.to_s}"
16
+ assert expr.include?(@pdate_1975060512), "Expression #{expr.to_s} should include #{@pdate_1975060512.to_s}"
17
+ assert !expr.include?(@pdate_2012050803), "Expression #{expr.to_s} should not include #{@pdate_2012050803.to_s}"
18
+ end
19
+ def test_830_to_midnight
20
+ expr = REDay.new(20,30,00,00)
21
+ assert expr.include?(@pdate_200401282100), "Expression #{expr.to_s} should include #{@pdate_200401282100.to_s}"
22
+ assert expr.include?(@pdate_200401280000), "Expression #{expr.to_s} should include #{@pdate_200401280000.to_s}"
23
+ assert !expr.include?(@pdate_200401280001), "Expression #{expr.to_s} should not include #{@pdate_200401280001.to_s}"
24
+ end
25
+
26
+ def test_range_each_day_te_to_s
27
+ assert_equal 'from 11:10PM to 01:20AM daily', REDay.new(23,10,1,20).to_s
28
+ end
29
+
30
+ def test_less_precise_argument_and_precision_policy
31
+ expr = REDay.new(8,00,10,00)
32
+ assert expr.include?(@pdate_20040531), \
33
+ "Expression #{expr.to_s} should include any lower precision argument by default"
34
+
35
+ expr = REDay.new(8,00,10,00, false)
36
+ assert !expr.include?(@pdate_20040531), \
37
+ "Expression #{expr.to_s} created with less_precise_match=false should not include any lower precision argument automatically"
38
+ end
39
+
40
+ end
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'baseexpressiontest'
4
+
5
+ # Unit tests for REMonth class
6
+ # Author:: Matthew Lipper
7
+
8
+ class REMonthTest < BaseExpressionTest
9
+
10
+
11
+ def test_20th_thru_29th_of_every_month
12
+ expr = REMonth.new(20,29)
13
+ assert expr.include?(@date_20050123), "Expression #{expr.to_s} should include #{@date_20050123.to_s}"
14
+ assert !expr.include?(@date_20050116), "Expression #{expr.to_s} should not include #{@date_20050116.to_s}"
15
+ end
16
+
17
+ def test_16th_of_every_month
18
+ expr = REMonth.new(16)
19
+ assert expr.include?(@date_20050116), "Expression #{expr.to_s} should include #{@date_20050116.to_s}"
20
+ assert !expr.include?(@date_20050123), "Expression #{expr.to_s} should not include #{@date_20050123.to_s}"
21
+ end
22
+
23
+ def test_dates_mixin
24
+ expr = REMonth.new(22, 26)
25
+ dates = expr.dates(@pdate_20071024..@pdate_20071028)
26
+ assert dates.size == 3, "Expected 2 dates and got #{dates.size}"
27
+ # Use default Test::Unit assertion message
28
+ assert_equal "2007-10-24T00:00:00+00:00", dates[0].to_s
29
+ assert_equal "2007-10-25T00:00:00+00:00", dates[1].to_s
30
+ assert_equal "2007-10-26T00:00:00+00:00", dates[2].to_s
31
+ end
32
+
33
+ def test_range_each_month_to_s
34
+ assert_equal 'from the 2nd to the 5th monthly',REMonth.new(2,5).to_s
35
+ end
36
+
37
+ end
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'baseexpressiontest'
4
+
5
+ # Unit tests for REWeek class
6
+ # Author:: Matthew Lipper
7
+
8
+ class REWeekTest < BaseExpressionTest
9
+
10
+
11
+ def test_invalid_ctor_arg
12
+ assert_raises(ArgumentError,"Expected ArgumentError for invalid day of week ordinal"){ REWeek.new(10,4) }
13
+ end
14
+
15
+ def test_monday_thru_friday
16
+ expr = REWeek.new(Mon,Fri)
17
+ assert expr.include?(@date_20040116), "Expression #{expr.to_s} should include #{@date_20040116.to_s}"
18
+ assert !expr.include?(@date_20040125), "Expression #{expr.to_s} should not include #{@date_20040125.to_s}"
19
+ end
20
+
21
+ def test_friday_thru_tuesday
22
+ expr = REWeek.new(Fri,Tue)
23
+ assert expr.include?(@date_20040125), "Expression #{expr.to_s} should include #{@date_20040125.to_s}"
24
+ assert !expr.include?(@pdate_20071024), "Expression #{expr.to_s} should not include #{@pdate_20071024.to_s}"
25
+ end
26
+
27
+ def test_range_each_week_te
28
+ #Friday through Tuesday
29
+ expr = REWeek.new(Friday,Tuesday)
30
+ assert expr.include?(@time_20070928000000), "#{expr.inspect} should include Fri 12am"
31
+ assert expr.include?(@time_20070925115959), "#{expr.inspect} should include Tue 11:59pm"
32
+ assert !expr.include?(@time_20070926000000),"#{expr.inspect} should not include Wed 12am"
33
+ assert !expr.include?(@time_20070927065959),"#{expr.inspect} should not include Thurs 6:59am"
34
+ assert !expr.include?(@time_20070927115900),"#{expr.inspect} should not include Thurs 1159am"
35
+ assert expr.include?(@time_20070929110000), "#{expr.inspect} should include Sat 11am"
36
+ assert expr.include?(@time_20070929000000), "#{expr.inspect} should include Sat midnight"
37
+ assert expr.include?(@time_20070929235959), "#{expr.inspect} should include Saturday one minute before midnight"
38
+ assert expr.include?(@time_20070930235959), "#{expr.inspect} should include Sunday one minute before midnight"
39
+ end
40
+
41
+ def test_to_s
42
+ assert_equal 'all week', REWeek.new(Tuesday,Tuesday).to_s
43
+ assert_equal 'Thursday through Saturday', REWeek.new(Thursday,Saturday).to_s
44
+ end
45
+
46
+ def test_dates_mixin
47
+ dates = REWeek.new(Tue,Wed).dates(@pdate_20071008..@pdate_20071030)
48
+ assert dates.size == 7
49
+ end
50
+
51
+ end
@@ -0,0 +1,99 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'baseexpressiontest'
4
+
5
+ # Unit tests for REYear class
6
+ # Author:: Matthew Lipper
7
+
8
+ class REYearTest < BaseExpressionTest
9
+
10
+ def test_ctor_one_arg
11
+ expr = REYear.new(11)
12
+ assert expr.start_month == 11, "Start month should equal 11"
13
+ assert expr.end_month == 11, "End month should equal 11"
14
+ assert expr.start_day == REYear::NO_DAY, "Start day should equal constant NO_DAY"
15
+ assert expr.end_day == REYear::NO_DAY, "End day should equal constant NO_DAY"
16
+ end
17
+
18
+ def test_ctor_two_args
19
+ expr = REYear.new(11,12)
20
+ assert expr.start_month == 11, "Start month should equal 11"
21
+ assert expr.end_month == 12, "End month should equal 12"
22
+ assert expr.start_day == REYear::NO_DAY, "Start day should equal constant NO_DAY"
23
+ assert expr.end_day == REYear::NO_DAY, "End day should equal constant NO_DAY"
24
+ end
25
+
26
+ def test_ctor_three_args
27
+ expr = REYear.new(10,21,12)
28
+ assert expr.start_month == 10, "Start month should equal 10"
29
+ assert expr.end_month == 12, "End month should equal 12"
30
+ assert expr.start_day == 21, "Start day should equal 21"
31
+ assert expr.end_day == REYear::NO_DAY, "End day should equal constant NO_DAY"
32
+ end
33
+
34
+ def test_ctor_three_args
35
+ expr = REYear.new(10,21,12,3)
36
+ assert expr.start_month == 10, "Start month should equal 10"
37
+ assert expr.end_month == 12, "End month should equal 12"
38
+ assert expr.start_day == 21, "Start day should equal 21"
39
+ assert expr.end_day == 3, "End day should equal 3"
40
+ end
41
+
42
+ def test_specific_days_same_month
43
+ expr = REYear.new(10,20,10,29)
44
+ assert expr.include?(@pdate_20071028), "#{expr.to_s} should include #{@pdate_20071028}"
45
+ assert !expr.include?(@pdate_20071114), "#{expr.to_s} should not include #{@pdate_20071114}"
46
+ assert !expr.include?(@pdate_20071030), "#{expr.to_s} should not include #{@pdate_20071030}"
47
+ assert !expr.include?(@pdate_20071008), "#{expr.to_s} should not include #{@pdate_20071008}"
48
+ assert !expr.include?(@pdate_20060921), "#{expr.to_s} should not include #{@pdate_20060921}"
49
+ end
50
+
51
+ def test_specific_days_different_months
52
+ expr = REYear.new(5,31,9,6)
53
+ assert expr.include?(@pdate_198606), "#{expr.to_s} should include #{@pdate_198606}"
54
+ assert expr.include?(@date_20040806), "#{expr.to_s} should include #{@date_20040806}"
55
+ assert !expr.include?(@pdate_20071008), "#{expr.to_s} should not include #{@pdate_20071008}"
56
+ end
57
+
58
+ def test_default_days_different_months
59
+ expr = REYear.new(11,12)
60
+ assert expr.include?(@date_19611101), "#{expr.to_s} should include #{@date_19611101}"
61
+ assert !expr.include?(@pdate_198606), "#{expr.to_s} should not include #{@pdate_198606}"
62
+ end
63
+
64
+ def test_all_defaults
65
+ expr = REYear.new(8)
66
+ assert expr.include?(@date_20040806), "#{expr.to_s} should include #{@date_20040806}"
67
+ assert !expr.include?(@pdate_198606), "#{expr.to_s} should not include #{@pdate_198606}"
68
+ assert !expr.include?(@date_19611101), "#{expr.to_s} should not include #{@date_19611101}"
69
+ end
70
+
71
+ def test_same_days_same_month
72
+ # Bug #5741
73
+ expr = REYear.new(9,21,9,21)
74
+ assert expr.include?(@pdate_20060921), "#{expr.to_s} should include #{@pdate_20060921.to_s}"
75
+ assert !expr.include?(@pdate_20060914), "#{expr.to_s} should not include #{@pdate_20060914.to_s}"
76
+ end
77
+
78
+ def test_to_s
79
+ assert_equal 'June 1st through July 2nd', REYear.new(6, 1, 7, 2).to_s
80
+ end
81
+
82
+ def test_dates_mixin
83
+ expr = REYear.new(4, 28, 5, 6)
84
+ assert((expr.dates(@date_20040501..@date_20060504)).size == 22, "Should be 22 occurences in dates Array")
85
+ end
86
+
87
+ # From bug #5749
88
+ def test_mixed_precision_combo
89
+ # 10:00 am to 10:01 am
90
+ ten_ish = REDay.new(10,0,10,1)
91
+ # September 21st every year
92
+ every_21_sept = REYear.new(9,21,9,21)
93
+ # Between 10:00 am and 10:01 am every September 21st
94
+ combo = ten_ish & every_21_sept
95
+ assert combo.include?(@pdate_20060921), "Should include lower precision argument"
96
+ assert combo.include?(@pdate_200609211001), "Should include matching precision argument which is in range"
97
+ assert !combo.include?(@pdate_200609211002), "Should not include matching precision argument which is out of range"
98
+ end
99
+ end
@@ -0,0 +1,25 @@
1
+
2
+ #!/usr/bin/env ruby
3
+
4
+ require 'baseexpressiontest'
5
+
6
+ # Unit tests for RSpec class
7
+ # Author:: Matthew Lipper
8
+
9
+ class RSpecTest < BaseExpressionTest
10
+
11
+ def test_include
12
+ rspec = RSpec.new(@stub1)
13
+ assert !rspec.include?("Any Object"), "Expression should not include any given argument"
14
+ @stub1.match = true
15
+ assert rspec.include?("Any Object"), "Expression should include any given argument"
16
+ end
17
+
18
+ def test_overlap
19
+ range = DateRange.new(@date_20050101, @date_20050109)
20
+ rspec = RSpec.new(range)
21
+ assert !rspec.include?(@date_20050116), "Expression #{rspec.to_s} should not include #{@date_20050116.to_s}"
22
+ assert rspec.include?(@date_20050102), "Expression #{rspec.to_s} should include #{@date_20050102.to_s}"
23
+ end
24
+
25
+ end
@@ -0,0 +1,98 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'runt'
5
+ require 'date'
6
+ require 'pp'
7
+
8
+ class RuntModuleTest < Test::Unit::TestCase
9
+
10
+ def test_last
11
+ assert Runt::Last == -1
12
+ end
13
+
14
+ def test_last_of
15
+ assert Runt::Last_of == -1
16
+ end
17
+
18
+ def test_second_to_last
19
+ assert Runt::Second_to_last == -2
20
+ end
21
+
22
+ def test_ordinals
23
+ #1.upto(31){ |n| puts Runt.ordinalize(n); }
24
+ assert_equal '1st', Runt.ordinalize(1)
25
+ assert_equal '33rd', Runt.ordinalize(33)
26
+ assert_equal '50th', Runt.ordinalize(50)
27
+ assert_equal '2nd', Runt.ordinalize(2)
28
+ assert_equal 'second to last', Runt.ordinalize(-2)
29
+ assert_equal 'last', Runt.ordinalize(-1)
30
+ end
31
+
32
+ def test_day_name
33
+ i=0
34
+ Date::DAYNAMES.each do |n|
35
+ assert_equal Date::DAYNAMES[i], Runt.day_name(i)
36
+ i=i+1
37
+ end
38
+ end
39
+
40
+ def test_month_name
41
+ i=0
42
+ Date::MONTHNAMES.each do |n|
43
+ assert_equal Date::MONTHNAMES[i], Runt.month_name(i)
44
+ i=i+1
45
+ end
46
+ end
47
+
48
+ def test_strftime
49
+ d=DateTime.new(2006,2,26,14,45)
50
+ assert_equal '02:45PM', Runt.format_time(d)
51
+ end
52
+
53
+ def test_numeric_class_additions
54
+ assert_equal 0.000001, 1.microsecond
55
+ assert_equal 0.000001, 1.microseconds
56
+ assert_equal 0.001, 1.millisecond
57
+ assert_equal 0.001, 1.milliseconds
58
+ assert_equal 7, 7.second
59
+ assert_equal 7, 7.seconds
60
+ assert_equal 60, 1.minute
61
+ assert_equal 60, 1.minutes
62
+ assert_equal 3600, 1.hour
63
+ assert_equal 3600, 1.hours
64
+ assert_equal 86400, 1.day
65
+ assert_equal 86400, 1.days
66
+ assert_equal 604800, 1.week
67
+ assert_equal 604800, 1.weeks
68
+ assert_equal 2592000, 1.month
69
+ assert_equal 2592000, 1.months
70
+ assert_equal 31536000, 1.year
71
+ assert_equal 31536000, 1.years
72
+ assert_equal 315360000, 1.decade
73
+ assert_equal 315360000, 1.decades
74
+ end
75
+
76
+ def test_time_class_dprecision
77
+ time=Time.parse('Monday 06 November 2006 07:38')
78
+ assert_equal(Runt::DPrecision::DEFAULT,time.date_precision)
79
+ end
80
+
81
+ def test_date_class_dprecision
82
+ date=Date.today
83
+ assert_equal(Runt::DPrecision::DEFAULT,date.date_precision)
84
+ end
85
+
86
+ def test_datetime_class_dprecision
87
+ date=DateTime.civil
88
+ assert_equal(Runt::DPrecision::DEFAULT,date.date_precision)
89
+ end
90
+
91
+ def test_time_plus
92
+ time=Time.local(2006, 12, 9, 5, 56, 12)
93
+ # Default precision is minute
94
+ assert_equal(Runt::PDate.min(2006,12,9,5,56),Runt::DPrecision.to_p(time))
95
+ assert_not_equal(Time.parse("Sat Dec 09 05:56:00 -0500 2006"),time)
96
+ end
97
+
98
+ end