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