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