chronic 0.1.5 → 0.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gemtest +0 -0
- data/.gitignore +5 -0
- data/.yardopts +3 -0
- data/HISTORY.md +180 -0
- data/LICENSE +21 -0
- data/README.md +176 -0
- data/Rakefile +39 -32
- data/chronic.gemspec +17 -0
- data/lib/chronic/chronic.rb +294 -208
- data/lib/chronic/grabber.rb +22 -17
- data/lib/chronic/handler.rb +90 -0
- data/lib/chronic/handlers.rb +365 -278
- data/lib/chronic/mini_date.rb +38 -0
- data/lib/chronic/numerizer.rb +121 -0
- data/lib/chronic/ordinal.rb +23 -19
- data/lib/chronic/pointer.rb +20 -17
- data/lib/chronic/repeater.rb +126 -105
- data/lib/chronic/repeaters/repeater_day.rb +49 -43
- data/lib/chronic/repeaters/repeater_day_name.rb +48 -42
- data/lib/chronic/repeaters/repeater_day_portion.rb +81 -80
- data/lib/chronic/repeaters/repeater_fortnight.rb +59 -53
- data/lib/chronic/repeaters/repeater_hour.rb +49 -43
- data/lib/chronic/repeaters/repeater_minute.rb +55 -39
- data/lib/chronic/repeaters/repeater_month.rb +77 -55
- data/lib/chronic/repeaters/repeater_month_name.rb +83 -82
- data/lib/chronic/repeaters/repeater_season.rb +107 -21
- data/lib/chronic/repeaters/repeater_season_name.rb +41 -22
- data/lib/chronic/repeaters/repeater_second.rb +39 -33
- data/lib/chronic/repeaters/repeater_time.rb +117 -103
- data/lib/chronic/repeaters/repeater_week.rb +63 -57
- data/lib/chronic/repeaters/repeater_weekday.rb +85 -0
- data/lib/chronic/repeaters/repeater_weekend.rb +64 -9
- data/lib/chronic/repeaters/repeater_year.rb +70 -51
- data/lib/chronic/scalar.rb +64 -29
- data/lib/chronic/season.rb +37 -0
- data/lib/chronic/separator.rb +50 -38
- data/lib/chronic/span.rb +31 -0
- data/lib/chronic/tag.rb +42 -0
- data/lib/chronic/time_zone.rb +30 -0
- data/lib/chronic/token.rb +45 -0
- data/lib/chronic.rb +86 -22
- data/test/helper.rb +6 -0
- data/test/test_Chronic.rb +118 -20
- data/test/test_DaylightSavings.rb +118 -0
- data/test/test_Handler.rb +36 -42
- data/test/test_MiniDate.rb +32 -0
- data/test/test_Numerizer.rb +72 -0
- data/test/test_RepeaterDayName.rb +15 -16
- data/test/test_RepeaterFortnight.rb +16 -17
- data/test/test_RepeaterHour.rb +22 -19
- data/test/test_RepeaterMinute.rb +34 -0
- data/test/test_RepeaterMonth.rb +20 -17
- data/test/test_RepeaterMonthName.rb +17 -18
- data/test/test_RepeaterSeason.rb +40 -0
- data/test/test_RepeaterTime.rb +20 -22
- data/test/test_RepeaterWeek.rb +16 -17
- data/test/test_RepeaterWeekday.rb +55 -0
- data/test/test_RepeaterWeekend.rb +74 -0
- data/test/test_RepeaterYear.rb +24 -18
- data/test/test_Span.rb +5 -6
- data/test/test_Token.rb +5 -6
- data/test/test_parsing.rb +743 -338
- metadata +81 -54
- data/History.txt +0 -29
- data/Manifest.txt +0 -43
- data/README.txt +0 -149
- data/test/parse_numbers.rb +0 -50
- data/test/suite.rb +0 -9
data/test/test_parsing.rb
CHANGED
|
@@ -1,507 +1,912 @@
|
|
|
1
|
-
require '
|
|
2
|
-
require 'test/unit'
|
|
1
|
+
require 'helper'
|
|
3
2
|
|
|
4
3
|
class TestParsing < Test::Unit::TestCase
|
|
5
|
-
|
|
4
|
+
# Wed Aug 16 14:00:00 UTC 2006
|
|
5
|
+
TIME_2006_08_16_14_00_00 = Time.local(2006, 8, 16, 14, 0, 0, 0)
|
|
6
|
+
|
|
6
7
|
def setup
|
|
7
|
-
|
|
8
|
-
@time_2006_08_16_14_00_00 = Time.local(2006, 8, 16, 14, 0, 0, 0)
|
|
9
|
-
@time_2006_08_16_03_00_00 = Time.local(2006, 8, 16, 3, 0, 0, 0)
|
|
8
|
+
@time_2006_08_16_14_00_00 = TIME_2006_08_16_14_00_00
|
|
10
9
|
end
|
|
11
|
-
|
|
12
|
-
def test__parse_guess_dates
|
|
13
|
-
# rm_sd
|
|
14
10
|
|
|
15
|
-
|
|
11
|
+
def test_handle_rmn_sd
|
|
12
|
+
time = parse_now("aug 3")
|
|
13
|
+
assert_equal Time.local(2006, 8, 3, 12), time
|
|
14
|
+
|
|
15
|
+
time = parse_now("aug 3", :context => :past)
|
|
16
|
+
assert_equal Time.local(2006, 8, 3, 12), time
|
|
17
|
+
|
|
18
|
+
time = parse_now("aug 20")
|
|
19
|
+
assert_equal Time.local(2006, 8, 20, 12), time
|
|
20
|
+
|
|
21
|
+
time = parse_now("aug 20", :context => :future)
|
|
22
|
+
assert_equal Time.local(2006, 8, 20, 12), time
|
|
23
|
+
|
|
24
|
+
time = parse_now("may 27")
|
|
16
25
|
assert_equal Time.local(2007, 5, 27, 12), time
|
|
17
|
-
|
|
18
|
-
time =
|
|
26
|
+
|
|
27
|
+
time = parse_now("may 28", :context => :past)
|
|
19
28
|
assert_equal Time.local(2006, 5, 28, 12), time
|
|
20
|
-
|
|
21
|
-
time =
|
|
29
|
+
|
|
30
|
+
time = parse_now("may 28 5pm", :context => :past)
|
|
22
31
|
assert_equal Time.local(2006, 5, 28, 17), time
|
|
23
|
-
|
|
24
|
-
time =
|
|
32
|
+
|
|
33
|
+
time = parse_now("may 28 at 5pm", :context => :past)
|
|
25
34
|
assert_equal Time.local(2006, 5, 28, 17), time
|
|
26
|
-
|
|
27
|
-
time =
|
|
35
|
+
|
|
36
|
+
time = parse_now("may 28 at 5:32.19pm", :context => :past)
|
|
28
37
|
assert_equal Time.local(2006, 5, 28, 17, 32, 19), time
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
time =
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_handle_rmn_sd_on
|
|
41
|
+
time = parse_now("5pm on may 28")
|
|
42
|
+
assert_equal Time.local(2007, 5, 28, 17), time
|
|
43
|
+
|
|
44
|
+
time = parse_now("5pm may 28")
|
|
45
|
+
assert_equal Time.local(2007, 5, 28, 17), time
|
|
46
|
+
|
|
47
|
+
time = parse_now("5 on may 28", :ambiguous_time_range => :none)
|
|
48
|
+
assert_equal Time.local(2007, 5, 28, 05), time
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_handle_rmn_od
|
|
52
|
+
time = parse_now("may 27th")
|
|
33
53
|
assert_equal Time.local(2007, 5, 27, 12), time
|
|
34
|
-
|
|
35
|
-
time =
|
|
54
|
+
|
|
55
|
+
time = parse_now("may 27th", :context => :past)
|
|
36
56
|
assert_equal Time.local(2006, 5, 27, 12), time
|
|
37
|
-
|
|
38
|
-
time =
|
|
57
|
+
|
|
58
|
+
time = parse_now("may 27th 5:00 pm", :context => :past)
|
|
39
59
|
assert_equal Time.local(2006, 5, 27, 17), time
|
|
40
|
-
|
|
41
|
-
time =
|
|
60
|
+
|
|
61
|
+
time = parse_now("may 27th at 5pm", :context => :past)
|
|
42
62
|
assert_equal Time.local(2006, 5, 27, 17), time
|
|
43
|
-
|
|
44
|
-
time =
|
|
63
|
+
|
|
64
|
+
time = parse_now("may 27th at 5", :ambiguous_time_range => :none)
|
|
45
65
|
assert_equal Time.local(2007, 5, 27, 5), time
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
time =
|
|
50
|
-
assert_equal Time.local(
|
|
51
|
-
|
|
52
|
-
time =
|
|
53
|
-
assert_equal Time.local(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_handle_od_rmn
|
|
69
|
+
time = parse_now("22nd February")
|
|
70
|
+
assert_equal Time.local(2007, 2, 22, 12), time
|
|
71
|
+
|
|
72
|
+
time = parse_now("31st of may at 6:30pm")
|
|
73
|
+
assert_equal Time.local(2007, 5, 31, 18, 30), time
|
|
74
|
+
|
|
75
|
+
time = parse_now("11th december 8am")
|
|
76
|
+
assert_equal Time.local(2006, 12, 11, 8), time
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def test_handle_sy_rmn_od
|
|
80
|
+
time = parse_now("2009 May 22nd")
|
|
81
|
+
assert_equal Time.local(2009, 05, 22, 12), time
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def test_handle_sd_rmn
|
|
85
|
+
time = parse_now("22 February")
|
|
86
|
+
assert_equal Time.local(2007, 2, 22, 12), time
|
|
87
|
+
|
|
88
|
+
time = parse_now("31 of may at 6:30pm")
|
|
89
|
+
assert_equal Time.local(2007, 5, 31, 18, 30), time
|
|
90
|
+
|
|
91
|
+
time = parse_now("11 december 8am")
|
|
92
|
+
assert_equal Time.local(2006, 12, 11, 8), time
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def test_handle_rmn_od_on
|
|
96
|
+
time = parse_now("5:00 pm may 27th", :context => :past)
|
|
97
|
+
assert_equal Time.local(2006, 5, 27, 17), time
|
|
98
|
+
|
|
99
|
+
time = parse_now("05:00 pm may 27th", :context => :past)
|
|
100
|
+
assert_equal Time.local(2006, 5, 27, 17), time
|
|
101
|
+
|
|
102
|
+
time = parse_now("5pm on may 27th", :context => :past)
|
|
103
|
+
assert_equal Time.local(2006, 5, 27, 17), time
|
|
104
|
+
|
|
105
|
+
time = parse_now("5 on may 27th", :ambiguous_time_range => :none)
|
|
106
|
+
assert_equal Time.local(2007, 5, 27, 5), time
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def test_handle_rmn_sy
|
|
110
|
+
time = parse_now("may 97")
|
|
111
|
+
assert_equal Time.local(1997, 5, 16, 12), time
|
|
112
|
+
|
|
113
|
+
time = parse_now("may 33", :ambiguous_year_future_bias => 10)
|
|
114
|
+
assert_equal Time.local(2033, 5, 16, 12), time
|
|
115
|
+
|
|
116
|
+
time = parse_now("may 32")
|
|
117
|
+
assert_equal Time.local(2032, 5, 16, 12, 0, 0), time
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def test_handle_rdn_rmn_sd_t_tz_sy
|
|
121
|
+
time = parse_now("Mon Apr 02 17:00:00 PDT 2007")
|
|
122
|
+
assert_equal 1175558400, time.to_i
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def test_handle_sy_sm_sd_t_tz
|
|
126
|
+
time = parse_now("2011-07-03 22:11:35 +0100")
|
|
127
|
+
assert_equal 1309727495, time.to_i
|
|
128
|
+
|
|
129
|
+
time = parse_now("2011-07-03 22:11:35 +01:00")
|
|
130
|
+
assert_equal 1309727495, time.to_i
|
|
131
|
+
|
|
132
|
+
time = parse_now("2011-07-03 21:11:35 UTC")
|
|
133
|
+
assert_equal 1309727495, time.to_i
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def test_handle_rmn_sd_sy
|
|
137
|
+
time = parse_now("November 18, 2010")
|
|
138
|
+
assert_equal Time.local(2010, 11, 18, 12), time
|
|
139
|
+
|
|
140
|
+
time = parse_now("Jan 1,2010")
|
|
141
|
+
assert_equal Time.local(2010, 1, 1, 12), time
|
|
142
|
+
|
|
143
|
+
time = parse_now("February 14, 2004")
|
|
144
|
+
assert_equal Time.local(2004, 2, 14, 12), time
|
|
145
|
+
|
|
146
|
+
time = parse_now("jan 3 2010")
|
|
58
147
|
assert_equal Time.local(2010, 1, 3, 12), time
|
|
59
|
-
|
|
60
|
-
time =
|
|
148
|
+
|
|
149
|
+
time = parse_now("jan 3 2010 midnight")
|
|
61
150
|
assert_equal Time.local(2010, 1, 4, 0), time
|
|
62
|
-
|
|
63
|
-
time =
|
|
151
|
+
|
|
152
|
+
time = parse_now("jan 3 2010 at midnight")
|
|
64
153
|
assert_equal Time.local(2010, 1, 4, 0), time
|
|
65
|
-
|
|
66
|
-
time =
|
|
154
|
+
|
|
155
|
+
time = parse_now("jan 3 2010 at 4", :ambiguous_time_range => :none)
|
|
67
156
|
assert_equal Time.local(2010, 1, 3, 4), time
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
#assert_equal Time.local(2000, 1, 12, 12), time
|
|
71
|
-
|
|
72
|
-
time = Chronic.parse("may 27 79", :now => @time_2006_08_16_14_00_00)
|
|
157
|
+
|
|
158
|
+
time = parse_now("may 27, 1979")
|
|
73
159
|
assert_equal Time.local(1979, 5, 27, 12), time
|
|
74
|
-
|
|
75
|
-
time =
|
|
160
|
+
|
|
161
|
+
time = parse_now("may 27 79")
|
|
162
|
+
assert_equal Time.local(1979, 5, 27, 12), time
|
|
163
|
+
|
|
164
|
+
time = parse_now("may 27 79 4:30")
|
|
76
165
|
assert_equal Time.local(1979, 5, 27, 16, 30), time
|
|
77
|
-
|
|
78
|
-
time =
|
|
166
|
+
|
|
167
|
+
time = parse_now("may 27 79 at 4:30", :ambiguous_time_range => :none)
|
|
79
168
|
assert_equal Time.local(1979, 5, 27, 4, 30), time
|
|
80
|
-
|
|
81
|
-
# sd_rm_sy
|
|
82
169
|
|
|
83
|
-
time =
|
|
170
|
+
time = parse_now("may 27 32")
|
|
171
|
+
assert_equal Time.local(2032, 5, 27, 12, 0, 0), time
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def test_handle_rmn_od_sy
|
|
175
|
+
time = parse_now("may 1st 01")
|
|
176
|
+
assert_equal Time.local(2001, 5, 1, 12), time
|
|
177
|
+
|
|
178
|
+
time = parse_now("November 18th 2010")
|
|
179
|
+
assert_equal Time.local(2010, 11, 18, 12), time
|
|
180
|
+
|
|
181
|
+
time = parse_now("November 18th, 2010")
|
|
182
|
+
assert_equal Time.local(2010, 11, 18, 12), time
|
|
183
|
+
|
|
184
|
+
time = parse_now("November 18th 2010 midnight")
|
|
185
|
+
assert_equal Time.local(2010, 11, 19, 0), time
|
|
186
|
+
|
|
187
|
+
time = parse_now("November 18th 2010 at midnight")
|
|
188
|
+
assert_equal Time.local(2010, 11, 19, 0), time
|
|
189
|
+
|
|
190
|
+
time = parse_now("November 18th 2010 at 4")
|
|
191
|
+
assert_equal Time.local(2010, 11, 18, 16), time
|
|
192
|
+
|
|
193
|
+
time = parse_now("November 18th 2010 at 4", :ambiguous_time_range => :none)
|
|
194
|
+
assert_equal Time.local(2010, 11, 18, 4), time
|
|
195
|
+
|
|
196
|
+
time = parse_now("March 30th, 1979")
|
|
197
|
+
assert_equal Time.local(1979, 3, 30, 12), time
|
|
198
|
+
|
|
199
|
+
time = parse_now("March 30th 79")
|
|
200
|
+
assert_equal Time.local(1979, 3, 30, 12), time
|
|
201
|
+
|
|
202
|
+
time = parse_now("March 30th 79 4:30")
|
|
203
|
+
assert_equal Time.local(1979, 3, 30, 16, 30), time
|
|
204
|
+
|
|
205
|
+
time = parse_now("March 30th 79 at 4:30", :ambiguous_time_range => :none)
|
|
206
|
+
assert_equal Time.local(1979, 3, 30, 4, 30), time
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
def test_handle_od_rmn_sy
|
|
210
|
+
time = parse_now("22nd February 2012")
|
|
211
|
+
assert_equal Time.local(2012, 2, 22, 12), time
|
|
212
|
+
|
|
213
|
+
time = parse_now("11th december 79")
|
|
214
|
+
assert_equal Time.local(1979, 12, 11, 12), time
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
def test_handle_sd_rmn_sy
|
|
218
|
+
time = parse_now("3 jan 2010")
|
|
84
219
|
assert_equal Time.local(2010, 1, 3, 12), time
|
|
85
|
-
|
|
86
|
-
time =
|
|
220
|
+
|
|
221
|
+
time = parse_now("3 jan 2010 4pm")
|
|
87
222
|
assert_equal Time.local(2010, 1, 3, 16), time
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
223
|
+
|
|
224
|
+
time = parse_now("27 Oct 2006 7:30pm")
|
|
225
|
+
assert_equal Time.local(2006, 10, 27, 19, 30), time
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
def test_handle_sm_sd_sy
|
|
229
|
+
time = parse_now("5/27/1979")
|
|
92
230
|
assert_equal Time.local(1979, 5, 27, 12), time
|
|
93
|
-
|
|
94
|
-
time =
|
|
231
|
+
|
|
232
|
+
time = parse_now("5/27/1979 4am")
|
|
95
233
|
assert_equal Time.local(1979, 5, 27, 4), time
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
234
|
+
|
|
235
|
+
time = parse_now("7/12/11")
|
|
236
|
+
assert_equal Time.local(2011, 7, 12, 12), time
|
|
237
|
+
|
|
238
|
+
time = parse_now("7/12/11", :endian_precedence => :little)
|
|
239
|
+
assert_equal Time.local(2011, 12, 7, 12), time
|
|
240
|
+
|
|
241
|
+
time = parse_now("9/19/2011 6:05:57 PM")
|
|
242
|
+
assert_equal Time.local(2011, 9, 19, 18, 05, 57), time
|
|
243
|
+
|
|
244
|
+
# month day overflows
|
|
245
|
+
time = parse_now("30/2/2000")
|
|
246
|
+
assert_nil time
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
def test_handle_sd_sm_sy
|
|
250
|
+
time = parse_now("27/5/1979")
|
|
100
251
|
assert_equal Time.local(1979, 5, 27, 12), time
|
|
101
|
-
|
|
102
|
-
time =
|
|
252
|
+
|
|
253
|
+
time = parse_now("27/5/1979 @ 0700")
|
|
103
254
|
assert_equal Time.local(1979, 5, 27, 7), time
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
time =
|
|
108
|
-
assert_equal Time.local(2006, 5, 16, 12), time
|
|
109
|
-
|
|
110
|
-
time = Chronic.parse("12/06", :now => @time_2006_08_16_14_00_00)
|
|
111
|
-
assert_equal Time.local(2006, 12, 16, 12), time
|
|
112
|
-
|
|
113
|
-
time = Chronic.parse("13/06", :now => @time_2006_08_16_14_00_00)
|
|
114
|
-
assert_equal nil, time
|
|
115
|
-
|
|
116
|
-
# sy_sm_sd
|
|
117
|
-
|
|
118
|
-
time = Chronic.parse("2000-1-1", :now => @time_2006_08_16_14_00_00)
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
def test_handle_sy_sm_sd
|
|
258
|
+
time = parse_now("2000-1-1")
|
|
119
259
|
assert_equal Time.local(2000, 1, 1, 12), time
|
|
120
|
-
|
|
121
|
-
time =
|
|
260
|
+
|
|
261
|
+
time = parse_now("2006-08-20")
|
|
122
262
|
assert_equal Time.local(2006, 8, 20, 12), time
|
|
123
|
-
|
|
124
|
-
time =
|
|
263
|
+
|
|
264
|
+
time = parse_now("2006-08-20 7pm")
|
|
125
265
|
assert_equal Time.local(2006, 8, 20, 19), time
|
|
126
|
-
|
|
127
|
-
time =
|
|
266
|
+
|
|
267
|
+
time = parse_now("2006-08-20 03:00")
|
|
128
268
|
assert_equal Time.local(2006, 8, 20, 3), time
|
|
129
|
-
|
|
130
|
-
time =
|
|
269
|
+
|
|
270
|
+
time = parse_now("2006-08-20 03:30:30")
|
|
131
271
|
assert_equal Time.local(2006, 8, 20, 3, 30, 30), time
|
|
132
|
-
|
|
133
|
-
time =
|
|
272
|
+
|
|
273
|
+
time = parse_now("2006-08-20 15:30:30")
|
|
134
274
|
assert_equal Time.local(2006, 8, 20, 15, 30, 30), time
|
|
135
|
-
|
|
136
|
-
time =
|
|
275
|
+
|
|
276
|
+
time = parse_now("2006-08-20 15:30.30")
|
|
137
277
|
assert_equal Time.local(2006, 8, 20, 15, 30, 30), time
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
278
|
+
|
|
279
|
+
time = parse_now("1902-08-20")
|
|
280
|
+
assert_equal Time.local(1902, 8, 20, 12, 0, 0), time
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
def test_handle_sm_sy
|
|
284
|
+
time = parse_now("05/06")
|
|
285
|
+
assert_equal Time.local(2006, 5, 16, 12), time
|
|
286
|
+
|
|
287
|
+
time = parse_now("12/06")
|
|
288
|
+
assert_equal Time.local(2006, 12, 16, 12), time
|
|
289
|
+
|
|
290
|
+
time = parse_now("13/06")
|
|
147
291
|
assert_equal nil, time
|
|
148
|
-
|
|
149
|
-
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
def test_handle_r
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
def test_handle_r_g_r
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
def test_handle_srp
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
def test_handle_s_r_p
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
def test_handle_p_s_r
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
def test_handle_s_r_p_a
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
def test_handle_orr
|
|
313
|
+
time = parse_now("5th tuesday in january")
|
|
314
|
+
assert_equal Time.local(2007, 01, 30, 12), time
|
|
315
|
+
|
|
316
|
+
time = parse_now("5th tuesday in february")
|
|
150
317
|
assert_equal nil, time
|
|
151
|
-
|
|
152
|
-
|
|
318
|
+
|
|
319
|
+
%W(jan feb march april may june july aug sep oct nov dec).each_with_index do |month, index|
|
|
320
|
+
time = parse_now("5th tuesday in #{month}")
|
|
321
|
+
|
|
322
|
+
if time then
|
|
323
|
+
assert_equal time.month, index+1
|
|
324
|
+
end
|
|
325
|
+
end
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
def test_handle_o_r_s_r
|
|
329
|
+
time = parse_now("3rd wednesday in november")
|
|
330
|
+
assert_equal Time.local(2006, 11, 15, 12), time
|
|
331
|
+
|
|
332
|
+
time = parse_now("10th wednesday in november")
|
|
153
333
|
assert_equal nil, time
|
|
334
|
+
|
|
335
|
+
# time = parse_now("3rd wednesday in 2007")
|
|
336
|
+
# assert_equal Time.local(2007, 1, 20, 12), time
|
|
154
337
|
end
|
|
155
338
|
|
|
339
|
+
def test_handle_o_r_g_r
|
|
340
|
+
time = parse_now("3rd month next year", :guess => false)
|
|
341
|
+
assert_equal Time.local(2007, 3), time.begin
|
|
342
|
+
|
|
343
|
+
time = parse_now("3rd month next year", :guess => false)
|
|
344
|
+
assert_equal Time.local(2007, 3, 1), time.begin
|
|
345
|
+
|
|
346
|
+
time = parse_now("3rd thursday this september")
|
|
347
|
+
assert_equal Time.local(2006, 9, 21, 12), time
|
|
348
|
+
|
|
349
|
+
now = Time.parse("1/10/2010")
|
|
350
|
+
time = parse_now("3rd thursday this november", :now => now)
|
|
351
|
+
assert_equal Time.local(2010, 11, 18, 12), time
|
|
352
|
+
|
|
353
|
+
time = parse_now("4th day last week")
|
|
354
|
+
assert_equal Time.local(2006, 8, 9, 12), time
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
# end of testing handlers
|
|
358
|
+
|
|
156
359
|
def test_parse_guess_r
|
|
157
|
-
time =
|
|
360
|
+
time = parse_now("friday")
|
|
158
361
|
assert_equal Time.local(2006, 8, 18, 12), time
|
|
159
|
-
|
|
160
|
-
time =
|
|
362
|
+
|
|
363
|
+
time = parse_now("tue")
|
|
364
|
+
assert_equal Time.local(2006, 8, 22, 12), time
|
|
365
|
+
|
|
366
|
+
time = parse_now("5")
|
|
161
367
|
assert_equal Time.local(2006, 8, 16, 17), time
|
|
162
|
-
|
|
163
|
-
time = Chronic.parse("5", :now =>
|
|
368
|
+
|
|
369
|
+
time = Chronic.parse("5", :now => Time.local(2006, 8, 16, 3, 0, 0, 0), :ambiguous_time_range => :none)
|
|
164
370
|
assert_equal Time.local(2006, 8, 16, 5), time
|
|
165
|
-
|
|
166
|
-
time =
|
|
371
|
+
|
|
372
|
+
time = parse_now("13:00")
|
|
167
373
|
assert_equal Time.local(2006, 8, 17, 13), time
|
|
168
|
-
|
|
169
|
-
time =
|
|
374
|
+
|
|
375
|
+
time = parse_now("13:45")
|
|
170
376
|
assert_equal Time.local(2006, 8, 17, 13, 45), time
|
|
171
|
-
|
|
172
|
-
time =
|
|
377
|
+
|
|
378
|
+
time = parse_now("1:01pm")
|
|
379
|
+
assert_equal Time.local(2006, 8, 16, 13, 01), time
|
|
380
|
+
|
|
381
|
+
time = parse_now("2:01pm")
|
|
382
|
+
assert_equal Time.local(2006, 8, 16, 14, 01), time
|
|
383
|
+
|
|
384
|
+
time = parse_now("november")
|
|
173
385
|
assert_equal Time.local(2006, 11, 16), time
|
|
174
386
|
end
|
|
175
|
-
|
|
387
|
+
|
|
176
388
|
def test_parse_guess_rr
|
|
177
|
-
time =
|
|
389
|
+
time = parse_now("friday 13:00")
|
|
178
390
|
assert_equal Time.local(2006, 8, 18, 13), time
|
|
179
|
-
|
|
180
|
-
time =
|
|
391
|
+
|
|
392
|
+
time = parse_now("monday 4:00")
|
|
181
393
|
assert_equal Time.local(2006, 8, 21, 16), time
|
|
182
|
-
|
|
183
|
-
time =
|
|
394
|
+
|
|
395
|
+
time = parse_now("sat 4:00", :ambiguous_time_range => :none)
|
|
184
396
|
assert_equal Time.local(2006, 8, 19, 4), time
|
|
185
|
-
|
|
186
|
-
time =
|
|
397
|
+
|
|
398
|
+
time = parse_now("sunday 4:20", :ambiguous_time_range => :none)
|
|
187
399
|
assert_equal Time.local(2006, 8, 20, 4, 20), time
|
|
188
|
-
|
|
189
|
-
time =
|
|
400
|
+
|
|
401
|
+
time = parse_now("4 pm")
|
|
190
402
|
assert_equal Time.local(2006, 8, 16, 16), time
|
|
191
|
-
|
|
192
|
-
time =
|
|
403
|
+
|
|
404
|
+
time = parse_now("4 am", :ambiguous_time_range => :none)
|
|
193
405
|
assert_equal Time.local(2006, 8, 16, 4), time
|
|
194
|
-
|
|
195
|
-
time =
|
|
406
|
+
|
|
407
|
+
time = parse_now("12 pm")
|
|
408
|
+
assert_equal Time.local(2006, 8, 16, 12), time
|
|
409
|
+
|
|
410
|
+
time = parse_now("12:01 pm")
|
|
411
|
+
assert_equal Time.local(2006, 8, 16, 12, 1), time
|
|
412
|
+
|
|
413
|
+
time = parse_now("12:01 am")
|
|
414
|
+
assert_equal Time.local(2006, 8, 16, 0, 1), time
|
|
415
|
+
|
|
416
|
+
time = parse_now("12 am")
|
|
417
|
+
assert_equal Time.local(2006, 8, 16), time
|
|
418
|
+
|
|
419
|
+
time = parse_now("4:00 in the morning")
|
|
196
420
|
assert_equal Time.local(2006, 8, 16, 4), time
|
|
197
|
-
|
|
198
|
-
time =
|
|
421
|
+
|
|
422
|
+
time = parse_now("0:10")
|
|
423
|
+
assert_equal Time.local(2006, 8, 17, 0, 10), time
|
|
424
|
+
|
|
425
|
+
time = parse_now("november 4")
|
|
199
426
|
assert_equal Time.local(2006, 11, 4, 12), time
|
|
200
|
-
|
|
201
|
-
time =
|
|
427
|
+
|
|
428
|
+
time = parse_now("aug 24")
|
|
202
429
|
assert_equal Time.local(2006, 8, 24, 12), time
|
|
203
430
|
end
|
|
204
|
-
|
|
431
|
+
|
|
205
432
|
def test_parse_guess_rrr
|
|
206
|
-
time =
|
|
433
|
+
time = parse_now("friday 1 pm")
|
|
207
434
|
assert_equal Time.local(2006, 8, 18, 13), time
|
|
208
|
-
|
|
209
|
-
time =
|
|
435
|
+
|
|
436
|
+
time = parse_now("friday 11 at night")
|
|
210
437
|
assert_equal Time.local(2006, 8, 18, 23), time
|
|
211
|
-
|
|
212
|
-
time =
|
|
438
|
+
|
|
439
|
+
time = parse_now("friday 11 in the evening")
|
|
213
440
|
assert_equal Time.local(2006, 8, 18, 23), time
|
|
214
|
-
|
|
215
|
-
time =
|
|
441
|
+
|
|
442
|
+
time = parse_now("sunday 6am")
|
|
216
443
|
assert_equal Time.local(2006, 8, 20, 6), time
|
|
444
|
+
|
|
445
|
+
time = parse_now("friday evening at 7")
|
|
446
|
+
assert_equal Time.local(2006, 8, 18, 19), time
|
|
217
447
|
end
|
|
218
|
-
|
|
448
|
+
|
|
219
449
|
def test_parse_guess_gr
|
|
220
450
|
# year
|
|
221
|
-
|
|
222
|
-
time =
|
|
223
|
-
assert_equal Time.local(2006,
|
|
224
|
-
|
|
225
|
-
time =
|
|
226
|
-
assert_equal Time.local(2006,
|
|
227
|
-
|
|
451
|
+
|
|
452
|
+
time = parse_now("this year", :guess => false)
|
|
453
|
+
assert_equal Time.local(2006, 8, 17), time.begin
|
|
454
|
+
|
|
455
|
+
time = parse_now("this year", :context => :past, :guess => false)
|
|
456
|
+
assert_equal Time.local(2006, 1, 1), time.begin
|
|
457
|
+
|
|
228
458
|
# month
|
|
229
|
-
|
|
230
|
-
time =
|
|
459
|
+
|
|
460
|
+
time = parse_now("this month")
|
|
231
461
|
assert_equal Time.local(2006, 8, 24, 12), time
|
|
232
|
-
|
|
233
|
-
time =
|
|
462
|
+
|
|
463
|
+
time = parse_now("this month", :context => :past)
|
|
234
464
|
assert_equal Time.local(2006, 8, 8, 12), time
|
|
235
|
-
|
|
465
|
+
|
|
466
|
+
time = Chronic.parse("next month", :now => Time.local(2006, 11, 15))
|
|
467
|
+
assert_equal Time.local(2006, 12, 16, 12), time
|
|
468
|
+
|
|
236
469
|
# month name
|
|
237
|
-
|
|
238
|
-
time =
|
|
470
|
+
|
|
471
|
+
time = parse_now("last november")
|
|
239
472
|
assert_equal Time.local(2005, 11, 16), time
|
|
240
|
-
|
|
473
|
+
|
|
241
474
|
# fortnight
|
|
242
|
-
|
|
243
|
-
time =
|
|
475
|
+
|
|
476
|
+
time = parse_now("this fortnight")
|
|
244
477
|
assert_equal Time.local(2006, 8, 21, 19, 30), time
|
|
245
|
-
|
|
246
|
-
time =
|
|
478
|
+
|
|
479
|
+
time = parse_now("this fortnight", :context => :past)
|
|
247
480
|
assert_equal Time.local(2006, 8, 14, 19), time
|
|
248
|
-
|
|
481
|
+
|
|
249
482
|
# week
|
|
250
|
-
|
|
251
|
-
time =
|
|
483
|
+
|
|
484
|
+
time = parse_now("this week")
|
|
252
485
|
assert_equal Time.local(2006, 8, 18, 7, 30), time
|
|
253
|
-
|
|
254
|
-
time =
|
|
486
|
+
|
|
487
|
+
time = parse_now("this week", :context => :past)
|
|
255
488
|
assert_equal Time.local(2006, 8, 14, 19), time
|
|
256
|
-
|
|
489
|
+
|
|
490
|
+
# weekend
|
|
491
|
+
|
|
492
|
+
time = parse_now("this weekend")
|
|
493
|
+
assert_equal Time.local(2006, 8, 20), time
|
|
494
|
+
|
|
495
|
+
time = parse_now("this weekend", :context => :past)
|
|
496
|
+
assert_equal Time.local(2006, 8, 13), time
|
|
497
|
+
|
|
498
|
+
time = parse_now("last weekend")
|
|
499
|
+
assert_equal Time.local(2006, 8, 13), time
|
|
500
|
+
|
|
257
501
|
# day
|
|
258
|
-
|
|
259
|
-
time =
|
|
260
|
-
assert_equal Time.local(2006, 8, 16, 19
|
|
261
|
-
|
|
262
|
-
time =
|
|
502
|
+
|
|
503
|
+
time = parse_now("this day")
|
|
504
|
+
assert_equal Time.local(2006, 8, 16, 19), time
|
|
505
|
+
|
|
506
|
+
time = parse_now("this day", :context => :past)
|
|
263
507
|
assert_equal Time.local(2006, 8, 16, 7), time
|
|
264
|
-
|
|
265
|
-
time =
|
|
266
|
-
assert_equal Time.local(2006, 8, 16, 19
|
|
267
|
-
|
|
268
|
-
time =
|
|
508
|
+
|
|
509
|
+
time = parse_now("today")
|
|
510
|
+
assert_equal Time.local(2006, 8, 16, 19), time
|
|
511
|
+
|
|
512
|
+
time = parse_now("yesterday")
|
|
269
513
|
assert_equal Time.local(2006, 8, 15, 12), time
|
|
270
|
-
|
|
271
|
-
|
|
514
|
+
|
|
515
|
+
now = Time.parse("2011-05-27 23:10") # after 11pm
|
|
516
|
+
time = parse_now("yesterday", :now => now)
|
|
517
|
+
assert_equal Time.local(2011, 05, 26, 12), time
|
|
518
|
+
|
|
519
|
+
time = parse_now("tomorrow")
|
|
272
520
|
assert_equal Time.local(2006, 8, 17, 12), time
|
|
273
|
-
|
|
521
|
+
|
|
274
522
|
# day name
|
|
275
|
-
|
|
276
|
-
time =
|
|
523
|
+
|
|
524
|
+
time = parse_now("this tuesday")
|
|
277
525
|
assert_equal Time.local(2006, 8, 22, 12), time
|
|
278
|
-
|
|
279
|
-
time =
|
|
526
|
+
|
|
527
|
+
time = parse_now("next tuesday")
|
|
280
528
|
assert_equal Time.local(2006, 8, 22, 12), time
|
|
281
|
-
|
|
282
|
-
time =
|
|
529
|
+
|
|
530
|
+
time = parse_now("last tuesday")
|
|
283
531
|
assert_equal Time.local(2006, 8, 15, 12), time
|
|
284
|
-
|
|
285
|
-
time =
|
|
532
|
+
|
|
533
|
+
time = parse_now("this wed")
|
|
286
534
|
assert_equal Time.local(2006, 8, 23, 12), time
|
|
287
|
-
|
|
288
|
-
time =
|
|
535
|
+
|
|
536
|
+
time = parse_now("next wed")
|
|
289
537
|
assert_equal Time.local(2006, 8, 23, 12), time
|
|
290
|
-
|
|
291
|
-
time =
|
|
538
|
+
|
|
539
|
+
time = parse_now("last wed")
|
|
292
540
|
assert_equal Time.local(2006, 8, 9, 12), time
|
|
293
|
-
|
|
541
|
+
|
|
294
542
|
# day portion
|
|
295
|
-
|
|
296
|
-
time =
|
|
543
|
+
|
|
544
|
+
time = parse_now("this morning")
|
|
297
545
|
assert_equal Time.local(2006, 8, 16, 9), time
|
|
298
|
-
|
|
299
|
-
time =
|
|
546
|
+
|
|
547
|
+
time = parse_now("tonight")
|
|
300
548
|
assert_equal Time.local(2006, 8, 16, 22), time
|
|
301
|
-
|
|
549
|
+
|
|
550
|
+
# minute
|
|
551
|
+
|
|
552
|
+
time = parse_now("next minute")
|
|
553
|
+
assert_equal Time.local(2006, 8, 16, 14, 1, 30), time
|
|
554
|
+
|
|
302
555
|
# second
|
|
303
|
-
|
|
304
|
-
time =
|
|
556
|
+
|
|
557
|
+
time = parse_now("this second")
|
|
305
558
|
assert_equal Time.local(2006, 8, 16, 14), time
|
|
306
|
-
|
|
307
|
-
time =
|
|
559
|
+
|
|
560
|
+
time = parse_now("this second", :context => :past)
|
|
308
561
|
assert_equal Time.local(2006, 8, 16, 14), time
|
|
309
|
-
|
|
310
|
-
time =
|
|
562
|
+
|
|
563
|
+
time = parse_now("next second")
|
|
311
564
|
assert_equal Time.local(2006, 8, 16, 14, 0, 1), time
|
|
312
|
-
|
|
313
|
-
time =
|
|
565
|
+
|
|
566
|
+
time = parse_now("last second")
|
|
314
567
|
assert_equal Time.local(2006, 8, 16, 13, 59, 59), time
|
|
315
568
|
end
|
|
316
|
-
|
|
317
|
-
def test_parse_guess_grr
|
|
318
|
-
time =
|
|
569
|
+
|
|
570
|
+
def test_parse_guess_grr
|
|
571
|
+
time = parse_now("yesterday at 4:00")
|
|
319
572
|
assert_equal Time.local(2006, 8, 15, 16), time
|
|
320
|
-
|
|
321
|
-
time =
|
|
573
|
+
|
|
574
|
+
time = parse_now("today at 9:00")
|
|
322
575
|
assert_equal Time.local(2006, 8, 16, 9), time
|
|
323
|
-
|
|
324
|
-
time =
|
|
576
|
+
|
|
577
|
+
time = parse_now("today at 2100")
|
|
325
578
|
assert_equal Time.local(2006, 8, 16, 21), time
|
|
326
|
-
|
|
327
|
-
time =
|
|
579
|
+
|
|
580
|
+
time = parse_now("this day at 0900")
|
|
328
581
|
assert_equal Time.local(2006, 8, 16, 9), time
|
|
329
|
-
|
|
330
|
-
time =
|
|
582
|
+
|
|
583
|
+
time = parse_now("tomorrow at 0900")
|
|
331
584
|
assert_equal Time.local(2006, 8, 17, 9), time
|
|
332
|
-
|
|
333
|
-
time =
|
|
585
|
+
|
|
586
|
+
time = parse_now("yesterday at 4:00", :ambiguous_time_range => :none)
|
|
334
587
|
assert_equal Time.local(2006, 8, 15, 4), time
|
|
335
|
-
|
|
336
|
-
time =
|
|
588
|
+
|
|
589
|
+
time = parse_now("last friday at 4:00")
|
|
337
590
|
assert_equal Time.local(2006, 8, 11, 16), time
|
|
338
|
-
|
|
339
|
-
time =
|
|
591
|
+
|
|
592
|
+
time = parse_now("next wed 4:00")
|
|
340
593
|
assert_equal Time.local(2006, 8, 23, 16), time
|
|
341
|
-
|
|
342
|
-
time =
|
|
594
|
+
|
|
595
|
+
time = parse_now("yesterday afternoon")
|
|
343
596
|
assert_equal Time.local(2006, 8, 15, 15), time
|
|
344
|
-
|
|
345
|
-
time =
|
|
597
|
+
|
|
598
|
+
time = parse_now("last week tuesday")
|
|
346
599
|
assert_equal Time.local(2006, 8, 8, 12), time
|
|
600
|
+
|
|
601
|
+
time = parse_now("tonight at 7")
|
|
602
|
+
assert_equal Time.local(2006, 8, 16, 19), time
|
|
603
|
+
|
|
604
|
+
time = parse_now("tonight 7")
|
|
605
|
+
assert_equal Time.local(2006, 8, 16, 19), time
|
|
606
|
+
|
|
607
|
+
time = parse_now("7 tonight")
|
|
608
|
+
assert_equal Time.local(2006, 8, 16, 19), time
|
|
347
609
|
end
|
|
348
|
-
|
|
610
|
+
|
|
349
611
|
def test_parse_guess_grrr
|
|
350
|
-
time =
|
|
612
|
+
time = parse_now("today at 6:00pm")
|
|
351
613
|
assert_equal Time.local(2006, 8, 16, 18), time
|
|
352
|
-
|
|
353
|
-
time =
|
|
614
|
+
|
|
615
|
+
time = parse_now("today at 6:00am")
|
|
354
616
|
assert_equal Time.local(2006, 8, 16, 6), time
|
|
355
|
-
|
|
356
|
-
time =
|
|
617
|
+
|
|
618
|
+
time = parse_now("this day 1800")
|
|
357
619
|
assert_equal Time.local(2006, 8, 16, 18), time
|
|
358
|
-
|
|
359
|
-
time =
|
|
620
|
+
|
|
621
|
+
time = parse_now("yesterday at 4:00pm")
|
|
360
622
|
assert_equal Time.local(2006, 8, 15, 16), time
|
|
623
|
+
|
|
624
|
+
time = parse_now("tomorrow evening at 7")
|
|
625
|
+
assert_equal Time.local(2006, 8, 17, 19), time
|
|
626
|
+
|
|
627
|
+
time = parse_now("tomorrow morning at 5:30")
|
|
628
|
+
assert_equal Time.local(2006, 8, 17, 5, 30), time
|
|
629
|
+
|
|
630
|
+
time = parse_now("next monday at 12:01 am")
|
|
631
|
+
assert_equal Time.local(2006, 8, 21, 00, 1), time
|
|
632
|
+
|
|
633
|
+
time = parse_now("next monday at 12:01 pm")
|
|
634
|
+
assert_equal Time.local(2006, 8, 21, 12, 1), time
|
|
635
|
+
|
|
636
|
+
# with context
|
|
637
|
+
time = parse_now("sunday at 8:15pm", :context => :past)
|
|
638
|
+
assert_equal Time.local(2006, 8, 13, 20, 15), time
|
|
361
639
|
end
|
|
362
|
-
|
|
640
|
+
|
|
363
641
|
def test_parse_guess_rgr
|
|
364
|
-
time =
|
|
642
|
+
time = parse_now("afternoon yesterday")
|
|
365
643
|
assert_equal Time.local(2006, 8, 15, 15), time
|
|
366
|
-
|
|
367
|
-
time =
|
|
644
|
+
|
|
645
|
+
time = parse_now("tuesday last week")
|
|
368
646
|
assert_equal Time.local(2006, 8, 8, 12), time
|
|
369
647
|
end
|
|
370
|
-
|
|
648
|
+
|
|
371
649
|
def test_parse_guess_s_r_p
|
|
372
650
|
# past
|
|
373
|
-
|
|
374
|
-
time =
|
|
375
|
-
assert_equal Time.local(2003, 8, 16, 14
|
|
376
|
-
|
|
377
|
-
time =
|
|
378
|
-
assert_equal Time.local(2006, 7, 16, 14
|
|
379
|
-
|
|
380
|
-
time =
|
|
381
|
-
assert_equal Time.local(2006, 8, 2, 14
|
|
382
|
-
|
|
383
|
-
time =
|
|
384
|
-
assert_equal Time.local(2006, 7, 19, 14
|
|
385
|
-
|
|
386
|
-
time =
|
|
387
|
-
assert_equal Time.local(2006, 7, 26, 14
|
|
388
|
-
|
|
389
|
-
time =
|
|
651
|
+
|
|
652
|
+
time = parse_now("3 years ago")
|
|
653
|
+
assert_equal Time.local(2003, 8, 16, 14), time
|
|
654
|
+
|
|
655
|
+
time = parse_now("1 month ago")
|
|
656
|
+
assert_equal Time.local(2006, 7, 16, 14), time
|
|
657
|
+
|
|
658
|
+
time = parse_now("1 fortnight ago")
|
|
659
|
+
assert_equal Time.local(2006, 8, 2, 14), time
|
|
660
|
+
|
|
661
|
+
time = parse_now("2 fortnights ago")
|
|
662
|
+
assert_equal Time.local(2006, 7, 19, 14), time
|
|
663
|
+
|
|
664
|
+
time = parse_now("3 weeks ago")
|
|
665
|
+
assert_equal Time.local(2006, 7, 26, 14), time
|
|
666
|
+
|
|
667
|
+
time = parse_now("2 weekends ago")
|
|
668
|
+
assert_equal Time.local(2006, 8, 5), time
|
|
669
|
+
|
|
670
|
+
time = parse_now("3 days ago")
|
|
390
671
|
assert_equal Time.local(2006, 8, 13, 14), time
|
|
391
|
-
|
|
392
|
-
#time =
|
|
672
|
+
|
|
673
|
+
#time = parse_now("1 monday ago")
|
|
393
674
|
#assert_equal Time.local(2006, 8, 14, 12), time
|
|
394
|
-
|
|
395
|
-
time =
|
|
675
|
+
|
|
676
|
+
time = parse_now("5 mornings ago")
|
|
396
677
|
assert_equal Time.local(2006, 8, 12, 9), time
|
|
397
|
-
|
|
398
|
-
time =
|
|
678
|
+
|
|
679
|
+
time = parse_now("7 hours ago")
|
|
399
680
|
assert_equal Time.local(2006, 8, 16, 7), time
|
|
400
|
-
|
|
401
|
-
time =
|
|
681
|
+
|
|
682
|
+
time = parse_now("3 minutes ago")
|
|
402
683
|
assert_equal Time.local(2006, 8, 16, 13, 57), time
|
|
403
|
-
|
|
404
|
-
time =
|
|
684
|
+
|
|
685
|
+
time = parse_now("20 seconds before now")
|
|
405
686
|
assert_equal Time.local(2006, 8, 16, 13, 59, 40), time
|
|
406
687
|
|
|
407
688
|
# future
|
|
408
|
-
|
|
409
|
-
time =
|
|
689
|
+
|
|
690
|
+
time = parse_now("3 years from now")
|
|
410
691
|
assert_equal Time.local(2009, 8, 16, 14, 0, 0), time
|
|
411
|
-
|
|
412
|
-
time =
|
|
413
|
-
assert_equal Time.local(2007, 2, 16, 14
|
|
414
|
-
|
|
415
|
-
time =
|
|
416
|
-
assert_equal Time.local(2006, 9, 27, 14
|
|
417
|
-
|
|
418
|
-
time =
|
|
692
|
+
|
|
693
|
+
time = parse_now("6 months hence")
|
|
694
|
+
assert_equal Time.local(2007, 2, 16, 14), time
|
|
695
|
+
|
|
696
|
+
time = parse_now("3 fortnights hence")
|
|
697
|
+
assert_equal Time.local(2006, 9, 27, 14), time
|
|
698
|
+
|
|
699
|
+
time = parse_now("1 week from now")
|
|
419
700
|
assert_equal Time.local(2006, 8, 23, 14, 0, 0), time
|
|
420
|
-
|
|
421
|
-
time =
|
|
701
|
+
|
|
702
|
+
time = parse_now("1 weekend from now")
|
|
703
|
+
assert_equal Time.local(2006, 8, 19), time
|
|
704
|
+
|
|
705
|
+
time = parse_now("2 weekends from now")
|
|
706
|
+
assert_equal Time.local(2006, 8, 26), time
|
|
707
|
+
|
|
708
|
+
time = parse_now("1 day hence")
|
|
422
709
|
assert_equal Time.local(2006, 8, 17, 14), time
|
|
423
|
-
|
|
424
|
-
time =
|
|
710
|
+
|
|
711
|
+
time = parse_now("5 mornings hence")
|
|
425
712
|
assert_equal Time.local(2006, 8, 21, 9), time
|
|
426
|
-
|
|
427
|
-
time =
|
|
713
|
+
|
|
714
|
+
time = parse_now("1 hour from now")
|
|
428
715
|
assert_equal Time.local(2006, 8, 16, 15), time
|
|
429
|
-
|
|
430
|
-
time =
|
|
716
|
+
|
|
717
|
+
time = parse_now("20 minutes hence")
|
|
431
718
|
assert_equal Time.local(2006, 8, 16, 14, 20), time
|
|
432
|
-
|
|
433
|
-
time =
|
|
719
|
+
|
|
720
|
+
time = parse_now("20 seconds from now")
|
|
434
721
|
assert_equal Time.local(2006, 8, 16, 14, 0, 20), time
|
|
722
|
+
|
|
723
|
+
time = Chronic.parse("2 months ago", :now => Time.parse("2007-03-07 23:30"))
|
|
724
|
+
assert_equal Time.local(2007, 1, 7, 23, 30), time
|
|
435
725
|
end
|
|
436
|
-
|
|
726
|
+
|
|
437
727
|
def test_parse_guess_p_s_r
|
|
438
|
-
time =
|
|
728
|
+
time = parse_now("in 3 hours")
|
|
439
729
|
assert_equal Time.local(2006, 8, 16, 17), time
|
|
440
730
|
end
|
|
441
|
-
|
|
731
|
+
|
|
442
732
|
def test_parse_guess_s_r_p_a
|
|
443
733
|
# past
|
|
444
|
-
|
|
445
|
-
time =
|
|
734
|
+
|
|
735
|
+
time = parse_now("3 years ago tomorrow")
|
|
446
736
|
assert_equal Time.local(2003, 8, 17, 12), time
|
|
447
|
-
|
|
448
|
-
time =
|
|
737
|
+
|
|
738
|
+
time = parse_now("3 years ago this friday")
|
|
449
739
|
assert_equal Time.local(2003, 8, 18, 12), time
|
|
450
|
-
|
|
451
|
-
time =
|
|
740
|
+
|
|
741
|
+
time = parse_now("3 months ago saturday at 5:00 pm")
|
|
452
742
|
assert_equal Time.local(2006, 5, 19, 17), time
|
|
453
|
-
|
|
454
|
-
time =
|
|
743
|
+
|
|
744
|
+
time = parse_now("2 days from this second")
|
|
455
745
|
assert_equal Time.local(2006, 8, 18, 14), time
|
|
456
|
-
|
|
457
|
-
time =
|
|
746
|
+
|
|
747
|
+
time = parse_now("7 hours before tomorrow at midnight")
|
|
458
748
|
assert_equal Time.local(2006, 8, 17, 17), time
|
|
459
|
-
|
|
749
|
+
|
|
460
750
|
# future
|
|
461
751
|
end
|
|
462
|
-
|
|
463
|
-
def test_parse_guess_o_r_s_r
|
|
464
|
-
time = Chronic.parse("3rd wednesday in november", :now => @time_2006_08_16_14_00_00)
|
|
465
|
-
assert_equal Time.local(2006, 11, 15, 12), time
|
|
466
|
-
|
|
467
|
-
time = Chronic.parse("10th wednesday in november", :now => @time_2006_08_16_14_00_00)
|
|
468
|
-
assert_equal nil, time
|
|
469
|
-
end
|
|
470
|
-
|
|
752
|
+
|
|
471
753
|
def test_parse_guess_o_r_g_r
|
|
472
|
-
time =
|
|
473
|
-
assert_equal Time.local(2007, 3
|
|
474
|
-
|
|
475
|
-
time =
|
|
754
|
+
time = parse_now("3rd month next year", :guess => false)
|
|
755
|
+
assert_equal Time.local(2007, 3), time.begin
|
|
756
|
+
|
|
757
|
+
time = parse_now("3rd month next year", :guess => false)
|
|
758
|
+
assert_equal Time.local(2007, 3, 1), time.begin
|
|
759
|
+
|
|
760
|
+
time = parse_now("3rd thursday this september")
|
|
476
761
|
assert_equal Time.local(2006, 9, 21, 12), time
|
|
477
|
-
|
|
478
|
-
|
|
762
|
+
|
|
763
|
+
now = Time.parse("1/10/2010")
|
|
764
|
+
time = parse_now("3rd thursday this november", :now => now)
|
|
765
|
+
assert_equal Time.local(2010, 11, 18, 12), time
|
|
766
|
+
|
|
767
|
+
time = parse_now("4th day last week")
|
|
479
768
|
assert_equal Time.local(2006, 8, 9, 12), time
|
|
480
769
|
end
|
|
481
|
-
|
|
770
|
+
|
|
482
771
|
def test_parse_guess_nonsense
|
|
483
|
-
time =
|
|
772
|
+
time = parse_now("some stupid nonsense")
|
|
773
|
+
assert_equal nil, time
|
|
774
|
+
|
|
775
|
+
time = parse_now("Ham Sandwich")
|
|
484
776
|
assert_equal nil, time
|
|
485
777
|
end
|
|
486
|
-
|
|
778
|
+
|
|
487
779
|
def test_parse_span
|
|
488
|
-
span =
|
|
780
|
+
span = parse_now("friday", :guess => false)
|
|
489
781
|
assert_equal Time.local(2006, 8, 18), span.begin
|
|
490
782
|
assert_equal Time.local(2006, 8, 19), span.end
|
|
491
|
-
|
|
492
|
-
span =
|
|
783
|
+
|
|
784
|
+
span = parse_now("november", :guess => false)
|
|
493
785
|
assert_equal Time.local(2006, 11), span.begin
|
|
494
786
|
assert_equal Time.local(2006, 12), span.end
|
|
787
|
+
|
|
788
|
+
span = Chronic.parse("weekend" , :now => @time_2006_08_16_14_00_00, :guess => false)
|
|
789
|
+
assert_equal Time.local(2006, 8, 19), span.begin
|
|
790
|
+
assert_equal Time.local(2006, 8, 21), span.end
|
|
495
791
|
end
|
|
496
|
-
|
|
792
|
+
|
|
793
|
+
def test_parse_with_endian_precedence
|
|
794
|
+
date = '11/02/2007'
|
|
795
|
+
|
|
796
|
+
expect_for_middle_endian = Time.local(2007, 11, 2, 12)
|
|
797
|
+
expect_for_little_endian = Time.local(2007, 2, 11, 12)
|
|
798
|
+
|
|
799
|
+
# default precedence should be toward middle endianness
|
|
800
|
+
assert_equal expect_for_middle_endian, Chronic.parse(date)
|
|
801
|
+
|
|
802
|
+
assert_equal expect_for_middle_endian, Chronic.parse(date, :endian_precedence => [:middle, :little])
|
|
803
|
+
|
|
804
|
+
assert_equal expect_for_little_endian, Chronic.parse(date, :endian_precedence => [:little, :middle])
|
|
805
|
+
end
|
|
806
|
+
|
|
807
|
+
def test_parse_words
|
|
808
|
+
assert_equal parse_now("33 days from now"), parse_now("thirty-three days from now")
|
|
809
|
+
assert_equal parse_now("2867532 seconds from now"), parse_now("two million eight hundred and sixty seven thousand five hundred and thirty two seconds from now")
|
|
810
|
+
assert_equal parse_now("may 10th"), parse_now("may tenth")
|
|
811
|
+
end
|
|
812
|
+
|
|
813
|
+
def test_parse_only_complete_pointers
|
|
814
|
+
assert_equal parse_now("eat pasty buns today at 2pm"), @time_2006_08_16_14_00_00
|
|
815
|
+
assert_equal parse_now("futuristically speaking today at 2pm"), @time_2006_08_16_14_00_00
|
|
816
|
+
assert_equal parse_now("meeting today at 2pm"), @time_2006_08_16_14_00_00
|
|
817
|
+
end
|
|
818
|
+
|
|
819
|
+
def test_am_pm
|
|
820
|
+
assert_equal Time.local(2006, 8, 16), parse_now("8/16/2006 at 12am")
|
|
821
|
+
assert_equal Time.local(2006, 8, 16, 12), parse_now("8/16/2006 at 12pm")
|
|
822
|
+
end
|
|
823
|
+
|
|
824
|
+
def test_a_p
|
|
825
|
+
assert_equal Time.local(2006, 8, 16, 0, 15), parse_now("8/16/2006 at 12:15a")
|
|
826
|
+
assert_equal Time.local(2006, 8, 16, 18, 30), parse_now("8/16/2006 at 6:30p")
|
|
827
|
+
end
|
|
828
|
+
|
|
497
829
|
def test_argument_validation
|
|
498
|
-
assert_raise(
|
|
830
|
+
assert_raise(ArgumentError) do
|
|
499
831
|
time = Chronic.parse("may 27", :foo => :bar)
|
|
500
832
|
end
|
|
501
|
-
|
|
502
|
-
assert_raise(
|
|
833
|
+
|
|
834
|
+
assert_raise(ArgumentError) do
|
|
503
835
|
time = Chronic.parse("may 27", :context => :bar)
|
|
504
836
|
end
|
|
505
837
|
end
|
|
506
|
-
|
|
507
|
-
|
|
838
|
+
|
|
839
|
+
def test_seasons
|
|
840
|
+
t = parse_now("this spring", :guess => false)
|
|
841
|
+
assert_equal Time.local(2007, 3, 20), t.begin
|
|
842
|
+
assert_equal Time.local(2007, 6, 20), t.end
|
|
843
|
+
|
|
844
|
+
t = parse_now("this winter", :guess => false)
|
|
845
|
+
assert_equal Time.local(2006, 12, 22), t.begin
|
|
846
|
+
assert_equal Time.local(2007, 3, 19), t.end
|
|
847
|
+
|
|
848
|
+
t = parse_now("last spring", :guess => false)
|
|
849
|
+
assert_equal Time.local(2006, 3, 20), t.begin
|
|
850
|
+
assert_equal Time.local(2006, 6, 20), t.end
|
|
851
|
+
|
|
852
|
+
t = parse_now("last winter", :guess => false)
|
|
853
|
+
assert_equal Time.local(2005, 12, 22), t.begin
|
|
854
|
+
assert_equal Time.local(2006, 3, 19), t.end
|
|
855
|
+
|
|
856
|
+
t = parse_now("next spring", :guess => false)
|
|
857
|
+
assert_equal Time.local(2007, 3, 20), t.begin
|
|
858
|
+
assert_equal Time.local(2007, 6, 20), t.end
|
|
859
|
+
end
|
|
860
|
+
|
|
861
|
+
# regression
|
|
862
|
+
|
|
863
|
+
# def test_partial
|
|
864
|
+
# assert_equal '', parse_now("2 hours")
|
|
865
|
+
# end
|
|
866
|
+
|
|
867
|
+
def test_days_in_november
|
|
868
|
+
t1 = Chronic.parse('1st thursday in november', :now => Time.local(2007))
|
|
869
|
+
assert_equal Time.local(2007, 11, 1, 12), t1
|
|
870
|
+
|
|
871
|
+
t1 = Chronic.parse('1st friday in november', :now => Time.local(2007))
|
|
872
|
+
assert_equal Time.local(2007, 11, 2, 12), t1
|
|
873
|
+
|
|
874
|
+
t1 = Chronic.parse('1st saturday in november', :now => Time.local(2007))
|
|
875
|
+
assert_equal Time.local(2007, 11, 3, 12), t1
|
|
876
|
+
|
|
877
|
+
# t1 = Chronic.parse('1st sunday in november', :now => Time.local(2007))
|
|
878
|
+
# assert_equal Time.local(2007, 11, 4, 12), t1
|
|
879
|
+
|
|
880
|
+
# Chronic.debug = true
|
|
881
|
+
#
|
|
882
|
+
# t1 = Chronic.parse('1st monday in november', :now => Time.local(2007))
|
|
883
|
+
# assert_equal Time.local(2007, 11, 5, 11), t1
|
|
884
|
+
end
|
|
885
|
+
|
|
886
|
+
def test_now_changes
|
|
887
|
+
t1 = Chronic.parse("now")
|
|
888
|
+
sleep 0.1
|
|
889
|
+
t2 = Chronic.parse("now")
|
|
890
|
+
assert_not_equal t1, t2
|
|
891
|
+
end
|
|
892
|
+
|
|
893
|
+
def test_noon
|
|
894
|
+
t1 = Chronic.parse('2011-01-01 at noon', :ambiguous_time_range => :none)
|
|
895
|
+
assert_equal Time.local(2011, 1, 1, 12, 0), t1
|
|
896
|
+
end
|
|
897
|
+
|
|
898
|
+
def test_handle_rdn_rmn_sd
|
|
899
|
+
time = parse_now("Thu Aug 10")
|
|
900
|
+
assert_equal Time.local(2006, 8, 10, 12), time
|
|
901
|
+
end
|
|
902
|
+
|
|
903
|
+
def test_handle_rdn_rmn_od
|
|
904
|
+
time = parse_now("Thu Aug 10th")
|
|
905
|
+
assert_equal Time.local(2006, 8, 10, 12), time
|
|
906
|
+
end
|
|
907
|
+
|
|
908
|
+
private
|
|
909
|
+
def parse_now(string, options={})
|
|
910
|
+
Chronic.parse(string, {:now => TIME_2006_08_16_14_00_00 }.merge(options))
|
|
911
|
+
end
|
|
912
|
+
end
|