chronic 0.2.0 → 0.3.0
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/HISTORY.md +76 -0
- data/LICENSE +21 -0
- data/Manifest.txt +2 -0
- data/README.md +165 -0
- data/Rakefile +137 -32
- data/benchmark/benchmark.rb +13 -0
- data/chronic.gemspec +85 -0
- data/lib/chronic/chronic.rb +60 -50
- data/lib/chronic/grabber.rb +2 -2
- data/lib/chronic/handlers.rb +221 -111
- data/lib/{numerizer → chronic/numerizer}/numerizer.rb +17 -23
- data/lib/chronic/ordinal.rb +6 -6
- data/lib/chronic/pointer.rb +3 -3
- data/lib/chronic/repeater.rb +27 -12
- data/lib/chronic/repeaters/repeater_day.rb +23 -18
- data/lib/chronic/repeaters/repeater_day_name.rb +19 -14
- data/lib/chronic/repeaters/repeater_day_portion.rb +23 -22
- data/lib/chronic/repeaters/repeater_fortnight.rb +16 -11
- data/lib/chronic/repeaters/repeater_hour.rb +20 -15
- data/lib/chronic/repeaters/repeater_minute.rb +31 -16
- data/lib/chronic/repeaters/repeater_month.rb +33 -24
- data/lib/chronic/repeaters/repeater_month_name.rb +31 -26
- data/lib/chronic/repeaters/repeater_season.rb +136 -9
- data/lib/chronic/repeaters/repeater_season_name.rb +38 -17
- data/lib/chronic/repeaters/repeater_second.rb +15 -10
- data/lib/chronic/repeaters/repeater_time.rb +53 -43
- data/lib/chronic/repeaters/repeater_week.rb +16 -11
- data/lib/chronic/repeaters/repeater_weekday.rb +77 -0
- data/lib/chronic/repeaters/repeater_weekend.rb +14 -9
- data/lib/chronic/repeaters/repeater_year.rb +31 -25
- data/lib/chronic/scalar.rb +16 -14
- data/lib/chronic/separator.rb +25 -10
- data/lib/chronic/time_zone.rb +23 -0
- data/lib/chronic.rb +69 -14
- data/test/helper.rb +7 -0
- data/test/test_Chronic.rb +17 -18
- data/test/test_DaylightSavings.rb +118 -0
- data/test/test_Handler.rb +37 -38
- data/test/test_Numerizer.rb +8 -5
- data/test/test_RepeaterDayName.rb +15 -16
- data/test/test_RepeaterFortnight.rb +16 -17
- data/test/test_RepeaterHour.rb +18 -19
- data/test/test_RepeaterMinute.rb +34 -0
- data/test/test_RepeaterMonth.rb +16 -17
- data/test/test_RepeaterMonthName.rb +17 -18
- 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 +21 -22
- data/test/test_RepeaterYear.rb +17 -18
- data/test/test_Span.rb +5 -6
- data/test/test_Time.rb +49 -0
- data/test/test_Token.rb +5 -6
- data/test/test_parsing.rb +338 -178
- metadata +78 -50
- data/History.txt +0 -38
- data/README.txt +0 -149
- data/test/suite.rb +0 -9
data/test/test_parsing.rb
CHANGED
|
@@ -1,550 +1,710 @@
|
|
|
1
|
-
require
|
|
2
|
-
require 'test/unit'
|
|
1
|
+
require File.join(File.dirname(__FILE__), *%w[helper])
|
|
3
2
|
|
|
4
3
|
class TestParsing < Test::Unit::TestCase
|
|
5
4
|
# Wed Aug 16 14:00:00 UTC 2006
|
|
6
5
|
TIME_2006_08_16_14_00_00 = Time.local(2006, 8, 16, 14, 0, 0, 0)
|
|
7
|
-
|
|
6
|
+
|
|
8
7
|
def setup
|
|
9
8
|
@time_2006_08_16_14_00_00 = TIME_2006_08_16_14_00_00
|
|
10
9
|
end
|
|
11
|
-
|
|
10
|
+
|
|
12
11
|
def test_parse_guess_dates
|
|
13
12
|
# rm_sd
|
|
14
13
|
|
|
15
14
|
time = parse_now("may 27")
|
|
16
15
|
assert_equal Time.local(2007, 5, 27, 12), time
|
|
17
|
-
|
|
16
|
+
|
|
18
17
|
time = parse_now("may 28", :context => :past)
|
|
19
18
|
assert_equal Time.local(2006, 5, 28, 12), time
|
|
20
|
-
|
|
19
|
+
|
|
21
20
|
time = parse_now("may 28 5pm", :context => :past)
|
|
22
21
|
assert_equal Time.local(2006, 5, 28, 17), time
|
|
23
|
-
|
|
22
|
+
|
|
24
23
|
time = parse_now("may 28 at 5pm", :context => :past)
|
|
25
24
|
assert_equal Time.local(2006, 5, 28, 17), time
|
|
26
|
-
|
|
25
|
+
|
|
27
26
|
time = parse_now("may 28 at 5:32.19pm", :context => :past)
|
|
28
27
|
assert_equal Time.local(2006, 5, 28, 17, 32, 19), time
|
|
29
|
-
|
|
28
|
+
|
|
29
|
+
# rm_sd_on
|
|
30
|
+
|
|
31
|
+
time = parse_now("5pm on may 28")
|
|
32
|
+
assert_equal Time.local(2007, 5, 28, 17), time
|
|
33
|
+
|
|
34
|
+
time = parse_now("5pm may 28")
|
|
35
|
+
assert_equal Time.local(2007, 5, 28, 17), time
|
|
36
|
+
|
|
37
|
+
time = parse_now("5 on may 28", :ambiguous_time_range => :none)
|
|
38
|
+
assert_equal Time.local(2007, 5, 28, 05), time
|
|
39
|
+
|
|
30
40
|
# rm_od
|
|
31
|
-
|
|
41
|
+
|
|
32
42
|
time = parse_now("may 27th")
|
|
33
43
|
assert_equal Time.local(2007, 5, 27, 12), time
|
|
34
|
-
|
|
44
|
+
|
|
35
45
|
time = parse_now("may 27th", :context => :past)
|
|
36
46
|
assert_equal Time.local(2006, 5, 27, 12), time
|
|
37
|
-
|
|
47
|
+
|
|
38
48
|
time = parse_now("may 27th 5:00 pm", :context => :past)
|
|
39
49
|
assert_equal Time.local(2006, 5, 27, 17), time
|
|
40
|
-
|
|
50
|
+
|
|
41
51
|
time = parse_now("may 27th at 5pm", :context => :past)
|
|
42
52
|
assert_equal Time.local(2006, 5, 27, 17), time
|
|
43
|
-
|
|
53
|
+
|
|
44
54
|
time = parse_now("may 27th at 5", :ambiguous_time_range => :none)
|
|
45
55
|
assert_equal Time.local(2007, 5, 27, 5), time
|
|
46
|
-
|
|
56
|
+
|
|
57
|
+
# rm_od_on
|
|
58
|
+
|
|
59
|
+
time = parse_now("5:00 pm may 27th", :context => :past)
|
|
60
|
+
assert_equal Time.local(2006, 5, 27, 17), time
|
|
61
|
+
|
|
62
|
+
time = parse_now("5pm on may 27th", :context => :past)
|
|
63
|
+
assert_equal Time.local(2006, 5, 27, 17), time
|
|
64
|
+
|
|
65
|
+
time = parse_now("5 on may 27th", :ambiguous_time_range => :none)
|
|
66
|
+
assert_equal Time.local(2007, 5, 27, 5), time
|
|
67
|
+
|
|
47
68
|
# rm_sy
|
|
48
|
-
|
|
69
|
+
|
|
49
70
|
time = parse_now("June 1979")
|
|
50
71
|
assert_equal Time.local(1979, 6, 16, 0), time
|
|
51
|
-
|
|
72
|
+
|
|
52
73
|
time = parse_now("dec 79")
|
|
53
74
|
assert_equal Time.local(1979, 12, 16, 12), time
|
|
54
|
-
|
|
75
|
+
|
|
55
76
|
# rm_sd_sy
|
|
56
|
-
|
|
77
|
+
|
|
57
78
|
time = parse_now("jan 3 2010")
|
|
58
79
|
assert_equal Time.local(2010, 1, 3, 12), time
|
|
59
|
-
|
|
80
|
+
|
|
60
81
|
time = parse_now("jan 3 2010 midnight")
|
|
61
82
|
assert_equal Time.local(2010, 1, 4, 0), time
|
|
62
|
-
|
|
83
|
+
|
|
63
84
|
time = parse_now("jan 3 2010 at midnight")
|
|
64
85
|
assert_equal Time.local(2010, 1, 4, 0), time
|
|
65
|
-
|
|
86
|
+
|
|
66
87
|
time = parse_now("jan 3 2010 at 4", :ambiguous_time_range => :none)
|
|
67
88
|
assert_equal Time.local(2010, 1, 3, 4), time
|
|
68
|
-
|
|
89
|
+
|
|
69
90
|
#time = parse_now("January 12, '00")
|
|
70
91
|
#assert_equal Time.local(2000, 1, 12, 12), time
|
|
71
|
-
|
|
92
|
+
|
|
93
|
+
time = parse_now("may 27, 1979")
|
|
94
|
+
assert_equal Time.local(1979, 5, 27, 12), time
|
|
95
|
+
|
|
72
96
|
time = parse_now("may 27 79")
|
|
73
97
|
assert_equal Time.local(1979, 5, 27, 12), time
|
|
74
|
-
|
|
98
|
+
|
|
75
99
|
time = parse_now("may 27 79 4:30")
|
|
76
100
|
assert_equal Time.local(1979, 5, 27, 16, 30), time
|
|
77
|
-
|
|
101
|
+
|
|
78
102
|
time = parse_now("may 27 79 at 4:30", :ambiguous_time_range => :none)
|
|
79
103
|
assert_equal Time.local(1979, 5, 27, 4, 30), time
|
|
80
|
-
|
|
104
|
+
|
|
81
105
|
# sd_rm_sy
|
|
82
106
|
|
|
83
107
|
time = parse_now("3 jan 2010")
|
|
84
108
|
assert_equal Time.local(2010, 1, 3, 12), time
|
|
85
|
-
|
|
109
|
+
|
|
86
110
|
time = parse_now("3 jan 2010 4pm")
|
|
87
111
|
assert_equal Time.local(2010, 1, 3, 16), time
|
|
88
|
-
|
|
112
|
+
|
|
113
|
+
time = parse_now("27 Oct 2006 7:30pm")
|
|
114
|
+
assert_equal Time.local(2006, 10, 27, 19, 30), time
|
|
115
|
+
|
|
89
116
|
# sm_sd_sy
|
|
90
|
-
|
|
117
|
+
|
|
91
118
|
time = parse_now("5/27/1979")
|
|
92
119
|
assert_equal Time.local(1979, 5, 27, 12), time
|
|
93
|
-
|
|
120
|
+
|
|
94
121
|
time = parse_now("5/27/1979 4am")
|
|
95
122
|
assert_equal Time.local(1979, 5, 27, 4), time
|
|
96
|
-
|
|
123
|
+
|
|
97
124
|
# sd_sm_sy
|
|
98
|
-
|
|
125
|
+
|
|
99
126
|
time = parse_now("27/5/1979")
|
|
100
127
|
assert_equal Time.local(1979, 5, 27, 12), time
|
|
101
|
-
|
|
128
|
+
|
|
102
129
|
time = parse_now("27/5/1979 @ 0700")
|
|
103
130
|
assert_equal Time.local(1979, 5, 27, 7), time
|
|
104
|
-
|
|
131
|
+
|
|
105
132
|
# sm_sy
|
|
106
|
-
|
|
133
|
+
|
|
107
134
|
time = parse_now("05/06")
|
|
108
135
|
assert_equal Time.local(2006, 5, 16, 12), time
|
|
109
|
-
|
|
136
|
+
|
|
110
137
|
time = parse_now("12/06")
|
|
111
138
|
assert_equal Time.local(2006, 12, 16, 12), time
|
|
112
|
-
|
|
139
|
+
|
|
113
140
|
time = parse_now("13/06")
|
|
114
141
|
assert_equal nil, time
|
|
115
|
-
|
|
142
|
+
|
|
116
143
|
# sy_sm_sd
|
|
117
|
-
|
|
144
|
+
|
|
118
145
|
time = parse_now("2000-1-1")
|
|
119
146
|
assert_equal Time.local(2000, 1, 1, 12), time
|
|
120
|
-
|
|
147
|
+
|
|
121
148
|
time = parse_now("2006-08-20")
|
|
122
149
|
assert_equal Time.local(2006, 8, 20, 12), time
|
|
123
|
-
|
|
150
|
+
|
|
124
151
|
time = parse_now("2006-08-20 7pm")
|
|
125
152
|
assert_equal Time.local(2006, 8, 20, 19), time
|
|
126
|
-
|
|
153
|
+
|
|
127
154
|
time = parse_now("2006-08-20 03:00")
|
|
128
155
|
assert_equal Time.local(2006, 8, 20, 3), time
|
|
129
|
-
|
|
156
|
+
|
|
130
157
|
time = parse_now("2006-08-20 03:30:30")
|
|
131
158
|
assert_equal Time.local(2006, 8, 20, 3, 30, 30), time
|
|
132
|
-
|
|
159
|
+
|
|
133
160
|
time = parse_now("2006-08-20 15:30:30")
|
|
134
161
|
assert_equal Time.local(2006, 8, 20, 15, 30, 30), time
|
|
135
|
-
|
|
162
|
+
|
|
136
163
|
time = parse_now("2006-08-20 15:30.30")
|
|
137
164
|
assert_equal Time.local(2006, 8, 20, 15, 30, 30), time
|
|
138
|
-
|
|
165
|
+
|
|
166
|
+
# rdn_rm_rd_rt_rtz_ry
|
|
167
|
+
|
|
168
|
+
time = parse_now("Mon Apr 02 17:00:00 PDT 2007")
|
|
169
|
+
assert_equal 1175558400, time.to_i
|
|
170
|
+
|
|
171
|
+
now = Time.now
|
|
172
|
+
time = parse_now(now.to_s)
|
|
173
|
+
assert_equal now.to_s, time.to_s
|
|
174
|
+
|
|
139
175
|
# rm_sd_rt
|
|
140
|
-
|
|
176
|
+
|
|
141
177
|
#time = parse_now("jan 5 13:00")
|
|
142
178
|
#assert_equal Time.local(2007, 1, 5, 13), time
|
|
143
|
-
|
|
144
|
-
#
|
|
145
|
-
|
|
179
|
+
|
|
180
|
+
# old dates
|
|
181
|
+
|
|
146
182
|
time = parse_now("may 40")
|
|
147
|
-
assert_equal
|
|
148
|
-
|
|
183
|
+
assert_equal Time.local(40, 5, 16, 12, 0, 0), time
|
|
184
|
+
|
|
149
185
|
time = parse_now("may 27 40")
|
|
150
|
-
assert_equal
|
|
151
|
-
|
|
186
|
+
assert_equal Time.local(40, 5, 27, 12, 0, 0), time
|
|
187
|
+
|
|
152
188
|
time = parse_now("1800-08-20")
|
|
153
|
-
assert_equal
|
|
189
|
+
assert_equal Time.local(1800, 8, 20, 12, 0, 0), time
|
|
154
190
|
end
|
|
155
191
|
|
|
156
192
|
def test_parse_guess_r
|
|
157
193
|
time = parse_now("friday")
|
|
158
194
|
assert_equal Time.local(2006, 8, 18, 12), time
|
|
159
|
-
|
|
195
|
+
|
|
196
|
+
time = parse_now("tue")
|
|
197
|
+
assert_equal Time.local(2006, 8, 22, 12), time
|
|
198
|
+
|
|
160
199
|
time = parse_now("5")
|
|
161
200
|
assert_equal Time.local(2006, 8, 16, 17), time
|
|
162
|
-
|
|
201
|
+
|
|
163
202
|
time = Chronic.parse("5", :now => Time.local(2006, 8, 16, 3, 0, 0, 0), :ambiguous_time_range => :none)
|
|
164
203
|
assert_equal Time.local(2006, 8, 16, 5), time
|
|
165
|
-
|
|
204
|
+
|
|
166
205
|
time = parse_now("13:00")
|
|
167
206
|
assert_equal Time.local(2006, 8, 17, 13), time
|
|
168
|
-
|
|
207
|
+
|
|
169
208
|
time = parse_now("13:45")
|
|
170
209
|
assert_equal Time.local(2006, 8, 17, 13, 45), time
|
|
171
|
-
|
|
210
|
+
|
|
172
211
|
time = parse_now("november")
|
|
173
212
|
assert_equal Time.local(2006, 11, 16), time
|
|
174
213
|
end
|
|
175
|
-
|
|
214
|
+
|
|
176
215
|
def test_parse_guess_rr
|
|
177
216
|
time = parse_now("friday 13:00")
|
|
178
217
|
assert_equal Time.local(2006, 8, 18, 13), time
|
|
179
|
-
|
|
218
|
+
|
|
180
219
|
time = parse_now("monday 4:00")
|
|
181
220
|
assert_equal Time.local(2006, 8, 21, 16), time
|
|
182
|
-
|
|
221
|
+
|
|
183
222
|
time = parse_now("sat 4:00", :ambiguous_time_range => :none)
|
|
184
223
|
assert_equal Time.local(2006, 8, 19, 4), time
|
|
185
|
-
|
|
224
|
+
|
|
186
225
|
time = parse_now("sunday 4:20", :ambiguous_time_range => :none)
|
|
187
226
|
assert_equal Time.local(2006, 8, 20, 4, 20), time
|
|
188
|
-
|
|
227
|
+
|
|
189
228
|
time = parse_now("4 pm")
|
|
190
229
|
assert_equal Time.local(2006, 8, 16, 16), time
|
|
191
|
-
|
|
230
|
+
|
|
192
231
|
time = parse_now("4 am", :ambiguous_time_range => :none)
|
|
193
232
|
assert_equal Time.local(2006, 8, 16, 4), time
|
|
194
|
-
|
|
233
|
+
|
|
234
|
+
time = parse_now("12 pm")
|
|
235
|
+
assert_equal Time.local(2006, 8, 16, 12), time
|
|
236
|
+
|
|
237
|
+
time = parse_now("12:01 pm")
|
|
238
|
+
assert_equal Time.local(2006, 8, 16, 12, 1), time
|
|
239
|
+
|
|
240
|
+
time = parse_now("12:01 am")
|
|
241
|
+
assert_equal Time.local(2006, 8, 16, 0, 1), time
|
|
242
|
+
|
|
243
|
+
time = parse_now("12 am")
|
|
244
|
+
assert_equal Time.local(2006, 8, 16), time
|
|
245
|
+
|
|
195
246
|
time = parse_now("4:00 in the morning")
|
|
196
247
|
assert_equal Time.local(2006, 8, 16, 4), time
|
|
197
|
-
|
|
248
|
+
|
|
198
249
|
time = parse_now("november 4")
|
|
199
250
|
assert_equal Time.local(2006, 11, 4, 12), time
|
|
200
|
-
|
|
251
|
+
|
|
201
252
|
time = parse_now("aug 24")
|
|
202
253
|
assert_equal Time.local(2006, 8, 24, 12), time
|
|
203
254
|
end
|
|
204
|
-
|
|
255
|
+
|
|
205
256
|
def test_parse_guess_rrr
|
|
206
257
|
time = parse_now("friday 1 pm")
|
|
207
258
|
assert_equal Time.local(2006, 8, 18, 13), time
|
|
208
|
-
|
|
259
|
+
|
|
209
260
|
time = parse_now("friday 11 at night")
|
|
210
261
|
assert_equal Time.local(2006, 8, 18, 23), time
|
|
211
|
-
|
|
262
|
+
|
|
212
263
|
time = parse_now("friday 11 in the evening")
|
|
213
264
|
assert_equal Time.local(2006, 8, 18, 23), time
|
|
214
|
-
|
|
265
|
+
|
|
215
266
|
time = parse_now("sunday 6am")
|
|
216
267
|
assert_equal Time.local(2006, 8, 20, 6), time
|
|
268
|
+
|
|
269
|
+
time = parse_now("friday evening at 7")
|
|
270
|
+
assert_equal Time.local(2006, 8, 18, 19), time
|
|
217
271
|
end
|
|
218
|
-
|
|
272
|
+
|
|
219
273
|
def test_parse_guess_gr
|
|
220
274
|
# year
|
|
221
|
-
|
|
275
|
+
|
|
222
276
|
time = parse_now("this year")
|
|
223
277
|
assert_equal Time.local(2006, 10, 24, 12, 30), time
|
|
224
|
-
|
|
278
|
+
|
|
225
279
|
time = parse_now("this year", :context => :past)
|
|
226
280
|
assert_equal Time.local(2006, 4, 24, 12, 30), time
|
|
227
|
-
|
|
281
|
+
|
|
228
282
|
# month
|
|
229
|
-
|
|
283
|
+
|
|
230
284
|
time = parse_now("this month")
|
|
231
285
|
assert_equal Time.local(2006, 8, 24, 12), time
|
|
232
|
-
|
|
286
|
+
|
|
233
287
|
time = parse_now("this month", :context => :past)
|
|
234
288
|
assert_equal Time.local(2006, 8, 8, 12), time
|
|
235
|
-
|
|
289
|
+
|
|
290
|
+
time = Chronic.parse("next month", :now => Time.local(2006, 11, 15))
|
|
291
|
+
assert_equal Time.local(2006, 12, 16, 12), time
|
|
292
|
+
|
|
236
293
|
# month name
|
|
237
|
-
|
|
294
|
+
|
|
238
295
|
time = parse_now("last november")
|
|
239
296
|
assert_equal Time.local(2005, 11, 16), time
|
|
240
|
-
|
|
297
|
+
|
|
241
298
|
# fortnight
|
|
242
|
-
|
|
299
|
+
|
|
243
300
|
time = parse_now("this fortnight")
|
|
244
301
|
assert_equal Time.local(2006, 8, 21, 19, 30), time
|
|
245
|
-
|
|
302
|
+
|
|
246
303
|
time = parse_now("this fortnight", :context => :past)
|
|
247
304
|
assert_equal Time.local(2006, 8, 14, 19), time
|
|
248
|
-
|
|
305
|
+
|
|
249
306
|
# week
|
|
250
|
-
|
|
307
|
+
|
|
251
308
|
time = parse_now("this week")
|
|
252
309
|
assert_equal Time.local(2006, 8, 18, 7, 30), time
|
|
253
|
-
|
|
310
|
+
|
|
254
311
|
time = parse_now("this week", :context => :past)
|
|
255
312
|
assert_equal Time.local(2006, 8, 14, 19), time
|
|
256
|
-
|
|
313
|
+
|
|
257
314
|
# weekend
|
|
258
|
-
|
|
315
|
+
|
|
259
316
|
time = parse_now("this weekend")
|
|
260
317
|
assert_equal Time.local(2006, 8, 20), time
|
|
261
|
-
|
|
318
|
+
|
|
262
319
|
time = parse_now("this weekend", :context => :past)
|
|
263
320
|
assert_equal Time.local(2006, 8, 13), time
|
|
264
|
-
|
|
321
|
+
|
|
265
322
|
time = parse_now("last weekend")
|
|
266
323
|
assert_equal Time.local(2006, 8, 13), time
|
|
267
|
-
|
|
324
|
+
|
|
268
325
|
# day
|
|
269
|
-
|
|
326
|
+
|
|
270
327
|
time = parse_now("this day")
|
|
271
328
|
assert_equal Time.local(2006, 8, 16, 19, 30), time
|
|
272
|
-
|
|
329
|
+
|
|
273
330
|
time = parse_now("this day", :context => :past)
|
|
274
331
|
assert_equal Time.local(2006, 8, 16, 7), time
|
|
275
|
-
|
|
332
|
+
|
|
276
333
|
time = parse_now("today")
|
|
277
334
|
assert_equal Time.local(2006, 8, 16, 19, 30), time
|
|
278
|
-
|
|
335
|
+
|
|
279
336
|
time = parse_now("yesterday")
|
|
280
337
|
assert_equal Time.local(2006, 8, 15, 12), time
|
|
281
|
-
|
|
338
|
+
|
|
282
339
|
time = parse_now("tomorrow")
|
|
283
340
|
assert_equal Time.local(2006, 8, 17, 12), time
|
|
284
|
-
|
|
341
|
+
|
|
285
342
|
# day name
|
|
286
|
-
|
|
343
|
+
|
|
287
344
|
time = parse_now("this tuesday")
|
|
288
345
|
assert_equal Time.local(2006, 8, 22, 12), time
|
|
289
|
-
|
|
346
|
+
|
|
290
347
|
time = parse_now("next tuesday")
|
|
291
348
|
assert_equal Time.local(2006, 8, 22, 12), time
|
|
292
|
-
|
|
349
|
+
|
|
293
350
|
time = parse_now("last tuesday")
|
|
294
351
|
assert_equal Time.local(2006, 8, 15, 12), time
|
|
295
|
-
|
|
352
|
+
|
|
296
353
|
time = parse_now("this wed")
|
|
297
354
|
assert_equal Time.local(2006, 8, 23, 12), time
|
|
298
|
-
|
|
355
|
+
|
|
299
356
|
time = parse_now("next wed")
|
|
300
357
|
assert_equal Time.local(2006, 8, 23, 12), time
|
|
301
|
-
|
|
358
|
+
|
|
302
359
|
time = parse_now("last wed")
|
|
303
360
|
assert_equal Time.local(2006, 8, 9, 12), time
|
|
304
|
-
|
|
361
|
+
|
|
305
362
|
# day portion
|
|
306
|
-
|
|
363
|
+
|
|
307
364
|
time = parse_now("this morning")
|
|
308
365
|
assert_equal Time.local(2006, 8, 16, 9), time
|
|
309
|
-
|
|
366
|
+
|
|
310
367
|
time = parse_now("tonight")
|
|
311
368
|
assert_equal Time.local(2006, 8, 16, 22), time
|
|
312
|
-
|
|
369
|
+
|
|
370
|
+
# minute
|
|
371
|
+
|
|
372
|
+
time = parse_now("next minute")
|
|
373
|
+
assert_equal Time.local(2006, 8, 16, 14, 1, 30), time
|
|
374
|
+
|
|
313
375
|
# second
|
|
314
|
-
|
|
376
|
+
|
|
315
377
|
time = parse_now("this second")
|
|
316
378
|
assert_equal Time.local(2006, 8, 16, 14), time
|
|
317
|
-
|
|
379
|
+
|
|
318
380
|
time = parse_now("this second", :context => :past)
|
|
319
381
|
assert_equal Time.local(2006, 8, 16, 14), time
|
|
320
|
-
|
|
382
|
+
|
|
321
383
|
time = parse_now("next second")
|
|
322
384
|
assert_equal Time.local(2006, 8, 16, 14, 0, 1), time
|
|
323
|
-
|
|
385
|
+
|
|
324
386
|
time = parse_now("last second")
|
|
325
387
|
assert_equal Time.local(2006, 8, 16, 13, 59, 59), time
|
|
326
388
|
end
|
|
327
|
-
|
|
328
|
-
def test_parse_guess_grr
|
|
389
|
+
|
|
390
|
+
def test_parse_guess_grr
|
|
329
391
|
time = parse_now("yesterday at 4:00")
|
|
330
392
|
assert_equal Time.local(2006, 8, 15, 16), time
|
|
331
|
-
|
|
393
|
+
|
|
332
394
|
time = parse_now("today at 9:00")
|
|
333
395
|
assert_equal Time.local(2006, 8, 16, 9), time
|
|
334
|
-
|
|
396
|
+
|
|
335
397
|
time = parse_now("today at 2100")
|
|
336
398
|
assert_equal Time.local(2006, 8, 16, 21), time
|
|
337
|
-
|
|
399
|
+
|
|
338
400
|
time = parse_now("this day at 0900")
|
|
339
401
|
assert_equal Time.local(2006, 8, 16, 9), time
|
|
340
|
-
|
|
402
|
+
|
|
341
403
|
time = parse_now("tomorrow at 0900")
|
|
342
404
|
assert_equal Time.local(2006, 8, 17, 9), time
|
|
343
|
-
|
|
405
|
+
|
|
344
406
|
time = parse_now("yesterday at 4:00", :ambiguous_time_range => :none)
|
|
345
407
|
assert_equal Time.local(2006, 8, 15, 4), time
|
|
346
|
-
|
|
408
|
+
|
|
347
409
|
time = parse_now("last friday at 4:00")
|
|
348
410
|
assert_equal Time.local(2006, 8, 11, 16), time
|
|
349
|
-
|
|
411
|
+
|
|
350
412
|
time = parse_now("next wed 4:00")
|
|
351
413
|
assert_equal Time.local(2006, 8, 23, 16), time
|
|
352
|
-
|
|
414
|
+
|
|
353
415
|
time = parse_now("yesterday afternoon")
|
|
354
416
|
assert_equal Time.local(2006, 8, 15, 15), time
|
|
355
|
-
|
|
417
|
+
|
|
356
418
|
time = parse_now("last week tuesday")
|
|
357
419
|
assert_equal Time.local(2006, 8, 8, 12), time
|
|
420
|
+
|
|
421
|
+
time = parse_now("tonight at 7")
|
|
422
|
+
assert_equal Time.local(2006, 8, 16, 19), time
|
|
423
|
+
|
|
424
|
+
time = parse_now("tonight 7")
|
|
425
|
+
assert_equal Time.local(2006, 8, 16, 19), time
|
|
426
|
+
|
|
427
|
+
time = parse_now("7 tonight")
|
|
428
|
+
assert_equal Time.local(2006, 8, 16, 19), time
|
|
358
429
|
end
|
|
359
|
-
|
|
430
|
+
|
|
360
431
|
def test_parse_guess_grrr
|
|
361
432
|
time = parse_now("today at 6:00pm")
|
|
362
433
|
assert_equal Time.local(2006, 8, 16, 18), time
|
|
363
|
-
|
|
434
|
+
|
|
364
435
|
time = parse_now("today at 6:00am")
|
|
365
436
|
assert_equal Time.local(2006, 8, 16, 6), time
|
|
366
|
-
|
|
437
|
+
|
|
367
438
|
time = parse_now("this day 1800")
|
|
368
439
|
assert_equal Time.local(2006, 8, 16, 18), time
|
|
369
|
-
|
|
440
|
+
|
|
370
441
|
time = parse_now("yesterday at 4:00pm")
|
|
371
442
|
assert_equal Time.local(2006, 8, 15, 16), time
|
|
443
|
+
|
|
444
|
+
time = parse_now("tomorrow evening at 7")
|
|
445
|
+
assert_equal Time.local(2006, 8, 17, 19), time
|
|
446
|
+
|
|
447
|
+
time = parse_now("tomorrow morning at 5:30")
|
|
448
|
+
assert_equal Time.local(2006, 8, 17, 5, 30), time
|
|
449
|
+
|
|
450
|
+
time = parse_now("next monday at 12:01 am")
|
|
451
|
+
assert_equal Time.local(2006, 8, 21, 00, 1), time
|
|
452
|
+
|
|
453
|
+
time = parse_now("next monday at 12:01 pm")
|
|
454
|
+
assert_equal Time.local(2006, 8, 21, 12, 1), time
|
|
372
455
|
end
|
|
373
|
-
|
|
456
|
+
|
|
374
457
|
def test_parse_guess_rgr
|
|
375
458
|
time = parse_now("afternoon yesterday")
|
|
376
459
|
assert_equal Time.local(2006, 8, 15, 15), time
|
|
377
|
-
|
|
460
|
+
|
|
378
461
|
time = parse_now("tuesday last week")
|
|
379
462
|
assert_equal Time.local(2006, 8, 8, 12), time
|
|
380
463
|
end
|
|
381
|
-
|
|
464
|
+
|
|
382
465
|
def test_parse_guess_s_r_p
|
|
383
466
|
# past
|
|
384
|
-
|
|
467
|
+
|
|
385
468
|
time = parse_now("3 years ago")
|
|
386
469
|
assert_equal Time.local(2003, 8, 16, 14), time
|
|
387
|
-
|
|
470
|
+
|
|
388
471
|
time = parse_now("1 month ago")
|
|
389
472
|
assert_equal Time.local(2006, 7, 16, 14), time
|
|
390
|
-
|
|
473
|
+
|
|
391
474
|
time = parse_now("1 fortnight ago")
|
|
392
475
|
assert_equal Time.local(2006, 8, 2, 14), time
|
|
393
|
-
|
|
476
|
+
|
|
394
477
|
time = parse_now("2 fortnights ago")
|
|
395
478
|
assert_equal Time.local(2006, 7, 19, 14), time
|
|
396
|
-
|
|
479
|
+
|
|
397
480
|
time = parse_now("3 weeks ago")
|
|
398
481
|
assert_equal Time.local(2006, 7, 26, 14), time
|
|
399
|
-
|
|
482
|
+
|
|
400
483
|
time = parse_now("2 weekends ago")
|
|
401
484
|
assert_equal Time.local(2006, 8, 5), time
|
|
402
|
-
|
|
485
|
+
|
|
403
486
|
time = parse_now("3 days ago")
|
|
404
487
|
assert_equal Time.local(2006, 8, 13, 14), time
|
|
405
|
-
|
|
488
|
+
|
|
406
489
|
#time = parse_now("1 monday ago")
|
|
407
490
|
#assert_equal Time.local(2006, 8, 14, 12), time
|
|
408
|
-
|
|
491
|
+
|
|
409
492
|
time = parse_now("5 mornings ago")
|
|
410
493
|
assert_equal Time.local(2006, 8, 12, 9), time
|
|
411
|
-
|
|
494
|
+
|
|
412
495
|
time = parse_now("7 hours ago")
|
|
413
496
|
assert_equal Time.local(2006, 8, 16, 7), time
|
|
414
|
-
|
|
497
|
+
|
|
415
498
|
time = parse_now("3 minutes ago")
|
|
416
499
|
assert_equal Time.local(2006, 8, 16, 13, 57), time
|
|
417
|
-
|
|
500
|
+
|
|
418
501
|
time = parse_now("20 seconds before now")
|
|
419
502
|
assert_equal Time.local(2006, 8, 16, 13, 59, 40), time
|
|
420
503
|
|
|
421
504
|
# future
|
|
422
|
-
|
|
505
|
+
|
|
423
506
|
time = parse_now("3 years from now")
|
|
424
507
|
assert_equal Time.local(2009, 8, 16, 14, 0, 0), time
|
|
425
|
-
|
|
508
|
+
|
|
426
509
|
time = parse_now("6 months hence")
|
|
427
510
|
assert_equal Time.local(2007, 2, 16, 14), time
|
|
428
|
-
|
|
511
|
+
|
|
429
512
|
time = parse_now("3 fortnights hence")
|
|
430
513
|
assert_equal Time.local(2006, 9, 27, 14), time
|
|
431
|
-
|
|
514
|
+
|
|
432
515
|
time = parse_now("1 week from now")
|
|
433
516
|
assert_equal Time.local(2006, 8, 23, 14, 0, 0), time
|
|
434
|
-
|
|
517
|
+
|
|
435
518
|
time = parse_now("1 weekend from now")
|
|
436
519
|
assert_equal Time.local(2006, 8, 19), time
|
|
437
|
-
|
|
520
|
+
|
|
438
521
|
time = parse_now("2 weekends from now")
|
|
439
522
|
assert_equal Time.local(2006, 8, 26), time
|
|
440
|
-
|
|
523
|
+
|
|
441
524
|
time = parse_now("1 day hence")
|
|
442
525
|
assert_equal Time.local(2006, 8, 17, 14), time
|
|
443
|
-
|
|
526
|
+
|
|
444
527
|
time = parse_now("5 mornings hence")
|
|
445
528
|
assert_equal Time.local(2006, 8, 21, 9), time
|
|
446
|
-
|
|
529
|
+
|
|
447
530
|
time = parse_now("1 hour from now")
|
|
448
531
|
assert_equal Time.local(2006, 8, 16, 15), time
|
|
449
|
-
|
|
532
|
+
|
|
450
533
|
time = parse_now("20 minutes hence")
|
|
451
534
|
assert_equal Time.local(2006, 8, 16, 14, 20), time
|
|
452
|
-
|
|
535
|
+
|
|
453
536
|
time = parse_now("20 seconds from now")
|
|
454
537
|
assert_equal Time.local(2006, 8, 16, 14, 0, 20), time
|
|
455
|
-
|
|
538
|
+
|
|
456
539
|
time = Chronic.parse("2 months ago", :now => Time.parse("2007-03-07 23:30"))
|
|
457
540
|
assert_equal Time.local(2007, 1, 7, 23, 30), time
|
|
458
541
|
end
|
|
459
|
-
|
|
542
|
+
|
|
460
543
|
def test_parse_guess_p_s_r
|
|
461
544
|
time = parse_now("in 3 hours")
|
|
462
545
|
assert_equal Time.local(2006, 8, 16, 17), time
|
|
463
546
|
end
|
|
464
|
-
|
|
547
|
+
|
|
465
548
|
def test_parse_guess_s_r_p_a
|
|
466
549
|
# past
|
|
467
|
-
|
|
550
|
+
|
|
468
551
|
time = parse_now("3 years ago tomorrow")
|
|
469
552
|
assert_equal Time.local(2003, 8, 17, 12), time
|
|
470
|
-
|
|
553
|
+
|
|
471
554
|
time = parse_now("3 years ago this friday")
|
|
472
555
|
assert_equal Time.local(2003, 8, 18, 12), time
|
|
473
|
-
|
|
556
|
+
|
|
474
557
|
time = parse_now("3 months ago saturday at 5:00 pm")
|
|
475
558
|
assert_equal Time.local(2006, 5, 19, 17), time
|
|
476
|
-
|
|
559
|
+
|
|
477
560
|
time = parse_now("2 days from this second")
|
|
478
561
|
assert_equal Time.local(2006, 8, 18, 14), time
|
|
479
|
-
|
|
562
|
+
|
|
480
563
|
time = parse_now("7 hours before tomorrow at midnight")
|
|
481
564
|
assert_equal Time.local(2006, 8, 17, 17), time
|
|
482
|
-
|
|
565
|
+
|
|
483
566
|
# future
|
|
484
567
|
end
|
|
485
|
-
|
|
568
|
+
|
|
486
569
|
def test_parse_guess_o_r_s_r
|
|
487
570
|
time = parse_now("3rd wednesday in november")
|
|
488
571
|
assert_equal Time.local(2006, 11, 15, 12), time
|
|
489
|
-
|
|
572
|
+
|
|
490
573
|
time = parse_now("10th wednesday in november")
|
|
491
574
|
assert_equal nil, time
|
|
575
|
+
|
|
576
|
+
# time = parse_now("3rd wednesday in 2007")
|
|
577
|
+
# assert_equal Time.local(2007, 1, 20, 12), time
|
|
492
578
|
end
|
|
493
|
-
|
|
579
|
+
|
|
494
580
|
def test_parse_guess_o_r_g_r
|
|
495
581
|
time = parse_now("3rd month next year")
|
|
496
582
|
assert_equal Time.local(2007, 3, 16, 12, 30), time
|
|
497
|
-
|
|
583
|
+
|
|
498
584
|
time = parse_now("3rd thursday this september")
|
|
499
585
|
assert_equal Time.local(2006, 9, 21, 12), time
|
|
500
|
-
|
|
586
|
+
|
|
501
587
|
time = parse_now("4th day last week")
|
|
502
588
|
assert_equal Time.local(2006, 8, 9, 12), time
|
|
503
589
|
end
|
|
504
|
-
|
|
590
|
+
|
|
505
591
|
def test_parse_guess_nonsense
|
|
506
592
|
time = parse_now("some stupid nonsense")
|
|
507
593
|
assert_equal nil, time
|
|
594
|
+
|
|
595
|
+
time = parse_now("Ham Sandwich")
|
|
596
|
+
assert_equal nil, time
|
|
508
597
|
end
|
|
509
|
-
|
|
598
|
+
|
|
510
599
|
def test_parse_span
|
|
511
600
|
span = parse_now("friday", :guess => false)
|
|
512
601
|
assert_equal Time.local(2006, 8, 18), span.begin
|
|
513
602
|
assert_equal Time.local(2006, 8, 19), span.end
|
|
514
|
-
|
|
603
|
+
|
|
515
604
|
span = parse_now("november", :guess => false)
|
|
516
605
|
assert_equal Time.local(2006, 11), span.begin
|
|
517
606
|
assert_equal Time.local(2006, 12), span.end
|
|
518
|
-
|
|
607
|
+
|
|
519
608
|
span = Chronic.parse("weekend" , :now => @time_2006_08_16_14_00_00, :guess => false)
|
|
520
609
|
assert_equal Time.local(2006, 8, 19), span.begin
|
|
521
610
|
assert_equal Time.local(2006, 8, 21), span.end
|
|
522
611
|
end
|
|
523
|
-
|
|
612
|
+
|
|
613
|
+
def test_parse_with_endian_precedence
|
|
614
|
+
date = '11/02/2007'
|
|
615
|
+
|
|
616
|
+
expect_for_middle_endian = Time.local(2007, 11, 2, 12)
|
|
617
|
+
expect_for_little_endian = Time.local(2007, 2, 11, 12)
|
|
618
|
+
|
|
619
|
+
# default precedence should be toward middle endianness
|
|
620
|
+
assert_equal expect_for_middle_endian, Chronic.parse(date)
|
|
621
|
+
|
|
622
|
+
assert_equal expect_for_middle_endian, Chronic.parse(date, :endian_precedence => [:middle, :little])
|
|
623
|
+
|
|
624
|
+
assert_equal expect_for_little_endian, Chronic.parse(date, :endian_precedence => [:little, :middle])
|
|
625
|
+
end
|
|
626
|
+
|
|
524
627
|
def test_parse_words
|
|
525
628
|
assert_equal parse_now("33 days from now"), parse_now("thirty-three days from now")
|
|
526
629
|
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")
|
|
527
630
|
assert_equal parse_now("may 10th"), parse_now("may tenth")
|
|
528
631
|
end
|
|
529
|
-
|
|
632
|
+
|
|
530
633
|
def test_parse_only_complete_pointers
|
|
531
634
|
assert_equal parse_now("eat pasty buns today at 2pm"), @time_2006_08_16_14_00_00
|
|
532
635
|
assert_equal parse_now("futuristically speaking today at 2pm"), @time_2006_08_16_14_00_00
|
|
533
636
|
assert_equal parse_now("meeting today at 2pm"), @time_2006_08_16_14_00_00
|
|
534
637
|
end
|
|
535
|
-
|
|
638
|
+
|
|
639
|
+
def test_am_pm
|
|
640
|
+
assert_equal Time.local(2006, 8, 16), parse_now("8/16/2006 at 12am")
|
|
641
|
+
assert_equal Time.local(2006, 8, 16, 12), parse_now("8/16/2006 at 12pm")
|
|
642
|
+
end
|
|
643
|
+
|
|
644
|
+
def test_a_p
|
|
645
|
+
assert_equal Time.local(2006, 8, 16, 0, 15), parse_now("8/16/2006 at 12:15a")
|
|
646
|
+
assert_equal Time.local(2006, 8, 16, 18, 30), parse_now("8/16/2006 at 6:30p")
|
|
647
|
+
end
|
|
648
|
+
|
|
536
649
|
def test_argument_validation
|
|
537
650
|
assert_raise(Chronic::InvalidArgumentException) do
|
|
538
651
|
time = Chronic.parse("may 27", :foo => :bar)
|
|
539
652
|
end
|
|
540
|
-
|
|
653
|
+
|
|
541
654
|
assert_raise(Chronic::InvalidArgumentException) do
|
|
542
655
|
time = Chronic.parse("may 27", :context => :bar)
|
|
543
656
|
end
|
|
544
657
|
end
|
|
545
|
-
|
|
658
|
+
|
|
659
|
+
def test_seasons
|
|
660
|
+
t = parse_now("this spring", :guess => false)
|
|
661
|
+
assert_equal Time.local(2007, 3, 20), t.begin
|
|
662
|
+
assert_equal Time.local(2007, 6, 20), t.end
|
|
663
|
+
|
|
664
|
+
t = parse_now("this winter", :guess => false)
|
|
665
|
+
assert_equal Time.local(2006, 12, 22, 23), t.begin
|
|
666
|
+
assert_equal Time.local(2007, 3, 19), t.end
|
|
667
|
+
|
|
668
|
+
t = parse_now("last spring", :guess => false)
|
|
669
|
+
assert_equal Time.local(2006, 3, 20, 23), t.begin
|
|
670
|
+
assert_equal Time.local(2006, 6, 20), t.end
|
|
671
|
+
|
|
672
|
+
t = parse_now("last winter", :guess => false)
|
|
673
|
+
assert_equal Time.local(2005, 12, 22, 23), t.begin
|
|
674
|
+
assert_equal Time.local(2006, 3, 19, 23), t.end
|
|
675
|
+
|
|
676
|
+
t = parse_now("next spring", :guess => false)
|
|
677
|
+
assert_equal Time.local(2007, 3, 20), t.begin
|
|
678
|
+
assert_equal Time.local(2007, 6, 20), t.end
|
|
679
|
+
end
|
|
680
|
+
|
|
681
|
+
# regression
|
|
682
|
+
|
|
683
|
+
# def test_partial
|
|
684
|
+
# assert_equal '', parse_now("2 hours")
|
|
685
|
+
# end
|
|
686
|
+
|
|
687
|
+
def test_days_in_november
|
|
688
|
+
t1 = Chronic.parse('1st thursday in november', :now => Time.local(2007))
|
|
689
|
+
assert_equal Time.local(2007, 11, 1, 12), t1
|
|
690
|
+
|
|
691
|
+
t1 = Chronic.parse('1st friday in november', :now => Time.local(2007))
|
|
692
|
+
assert_equal Time.local(2007, 11, 2, 12), t1
|
|
693
|
+
|
|
694
|
+
t1 = Chronic.parse('1st saturday in november', :now => Time.local(2007))
|
|
695
|
+
assert_equal Time.local(2007, 11, 3, 12), t1
|
|
696
|
+
|
|
697
|
+
t1 = Chronic.parse('1st sunday in november', :now => Time.local(2007))
|
|
698
|
+
assert_equal Time.local(2007, 11, 4, 11), t1
|
|
699
|
+
|
|
700
|
+
# Chronic.debug = true
|
|
701
|
+
#
|
|
702
|
+
# t1 = Chronic.parse('1st monday in november', :now => Time.local(2007))
|
|
703
|
+
# assert_equal Time.local(2007, 11, 5, 11), t1
|
|
704
|
+
end
|
|
705
|
+
|
|
546
706
|
private
|
|
547
707
|
def parse_now(string, options={})
|
|
548
708
|
Chronic.parse(string, {:now => TIME_2006_08_16_14_00_00 }.merge(options))
|
|
549
709
|
end
|
|
550
|
-
end
|
|
710
|
+
end
|