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