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