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/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
- # Wed Aug 16 14:00:00 UTC 2006
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 test__parse_guess_dates
12
+ def test_parse_guess_dates
14
13
  # rm_sd
15
14
 
16
- time = Chronic.parse("may 27", :now => @time_2006_08_16_14_00_00)
15
+ time = parse_now("may 27")
17
16
  assert_equal Time.local(2007, 5, 27, 12), time
18
17
 
19
- time = Chronic.parse("may 28", :now => @time_2006_08_16_14_00_00, :context => :past)
18
+ time = parse_now("may 28", :context => :past)
20
19
  assert_equal Time.local(2006, 5, 28, 12), time
21
20
 
22
- time = Chronic.parse("may 28 5pm", :now => @time_2006_08_16_14_00_00, :context => :past)
21
+ time = parse_now("may 28 5pm", :context => :past)
23
22
  assert_equal Time.local(2006, 5, 28, 17), time
24
23
 
25
- time = Chronic.parse("may 28 at 5pm", :now => @time_2006_08_16_14_00_00, :context => :past)
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 = Chronic.parse("may 27th", :now => @time_2006_08_16_14_00_00)
32
+ time = parse_now("may 27th")
31
33
  assert_equal Time.local(2007, 5, 27, 12), time
32
34
 
33
- time = Chronic.parse("may 27th", :now => @time_2006_08_16_14_00_00, :context => :past)
35
+ time = parse_now("may 27th", :context => :past)
34
36
  assert_equal Time.local(2006, 5, 27, 12), time
35
37
 
36
- time = Chronic.parse("may 27th 5:00 pm", :now => @time_2006_08_16_14_00_00, :context => :past)
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 = Chronic.parse("may 27th at 5pm", :now => @time_2006_08_16_14_00_00, :context => :past)
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 = Chronic.parse("may 27th at 5", :now => @time_2006_08_16_14_00_00, :ambiguous_time_range => :none)
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 = Chronic.parse("June 1979", :now => @time_2006_08_16_14_00_00)
49
+ time = parse_now("June 1979")
48
50
  assert_equal Time.local(1979, 6, 16, 0), time
49
51
 
50
- time = Chronic.parse("dec 79", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("jan 3 2010", :now => @time_2006_08_16_14_00_00)
57
+ time = parse_now("jan 3 2010")
56
58
  assert_equal Time.local(2010, 1, 3, 12), time
57
59
 
58
- time = Chronic.parse("jan 3 2010 midnight", :now => @time_2006_08_16_14_00_00)
60
+ time = parse_now("jan 3 2010 midnight")
59
61
  assert_equal Time.local(2010, 1, 4, 0), time
60
62
 
61
- time = Chronic.parse("jan 3 2010 at midnight", :now => @time_2006_08_16_14_00_00)
63
+ time = parse_now("jan 3 2010 at midnight")
62
64
  assert_equal Time.local(2010, 1, 4, 0), time
63
65
 
64
- time = Chronic.parse("jan 3 2010 at 4", :now => @time_2006_08_16_14_00_00, :ambiguous_time_range => :none)
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 = Chronic.parse("January 12, '00", :now => @time_2006_08_16_14_00_00)
69
+ #time = parse_now("January 12, '00")
68
70
  #assert_equal Time.local(2000, 1, 12, 12), time
69
71
 
70
- time = Chronic.parse("may 27 79", :now => @time_2006_08_16_14_00_00)
72
+ time = parse_now("may 27 79")
71
73
  assert_equal Time.local(1979, 5, 27, 12), time
72
74
 
73
- time = Chronic.parse("may 27 79 4:30", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("may 27 79 at 4:30", :now => @time_2006_08_16_14_00_00, :ambiguous_time_range => :none)
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 = Chronic.parse("3 jan 2010", :now => @time_2006_08_16_14_00_00)
83
+ time = parse_now("3 jan 2010")
82
84
  assert_equal Time.local(2010, 1, 3, 12), time
83
85
 
84
- time = Chronic.parse("3 jan 2010 4pm", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("5/27/1979", :now => @time_2006_08_16_14_00_00)
91
+ time = parse_now("5/27/1979")
90
92
  assert_equal Time.local(1979, 5, 27, 12), time
91
93
 
92
- time = Chronic.parse("5/27/1979 4am", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("27/5/1979", :now => @time_2006_08_16_14_00_00)
99
+ time = parse_now("27/5/1979")
98
100
  assert_equal Time.local(1979, 5, 27, 12), time
99
101
 
100
- time = Chronic.parse("27/5/1979 @ 0700", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("05/06", :now => @time_2006_08_16_14_00_00)
107
+ time = parse_now("05/06")
106
108
  assert_equal Time.local(2006, 5, 16, 12), time
107
109
 
108
- time = Chronic.parse("12/06", :now => @time_2006_08_16_14_00_00)
110
+ time = parse_now("12/06")
109
111
  assert_equal Time.local(2006, 12, 16, 12), time
110
112
 
111
- time = Chronic.parse("13/06", :now => @time_2006_08_16_14_00_00)
113
+ time = parse_now("13/06")
112
114
  assert_equal nil, time
113
115
 
114
116
  # sy_sm_sd
115
117
 
116
- time = Chronic.parse("2000-1-1", :now => @time_2006_08_16_14_00_00)
118
+ time = parse_now("2000-1-1")
117
119
  assert_equal Time.local(2000, 1, 1, 12), time
118
120
 
119
- time = Chronic.parse("2006-08-20", :now => @time_2006_08_16_14_00_00)
121
+ time = parse_now("2006-08-20")
120
122
  assert_equal Time.local(2006, 8, 20, 12), time
121
123
 
122
- time = Chronic.parse("2006-08-20 7pm", :now => @time_2006_08_16_14_00_00)
124
+ time = parse_now("2006-08-20 7pm")
123
125
  assert_equal Time.local(2006, 8, 20, 19), time
124
126
 
125
- time = Chronic.parse("2006-08-20 03:00", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("jan 5 13:00", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("may 40", :now => @time_2006_08_16_14_00_00)
155
+ time = parse_now("may 40")
136
156
  assert_equal nil, time
137
157
 
138
- time = Chronic.parse("may 27 40", :now => @time_2006_08_16_14_00_00)
158
+ time = parse_now("may 27 40")
139
159
  assert_equal nil, time
140
160
 
141
- time = Chronic.parse("1800-08-20", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("friday", :now => @time_2006_08_16_14_00_00)
170
+ time = parse_now("friday")
147
171
  assert_equal Time.local(2006, 8, 18, 12), time
148
172
 
149
- time = Chronic.parse("5", :now => @time_2006_08_16_14_00_00)
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 => @time_2006_08_16_03_00_00, :ambiguous_time_range => :none)
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 = Chronic.parse("13:00", :now => @time_2006_08_16_14_00_00)
182
+ time = parse_now("13:00")
156
183
  assert_equal Time.local(2006, 8, 17, 13), time
157
184
 
158
- time = Chronic.parse("13:45", :now => @time_2006_08_16_14_00_00)
185
+ time = parse_now("13:45")
159
186
  assert_equal Time.local(2006, 8, 17, 13, 45), time
160
187
 
161
- time = Chronic.parse("november", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("friday 13:00", :now => @time_2006_08_16_14_00_00)
193
+ time = parse_now("friday 13:00")
167
194
  assert_equal Time.local(2006, 8, 18, 13), time
168
195
 
169
- time = Chronic.parse("monday 4:00", :now => @time_2006_08_16_14_00_00)
196
+ time = parse_now("monday 4:00")
170
197
  assert_equal Time.local(2006, 8, 21, 16), time
171
198
 
172
- time = Chronic.parse("sat 4:00", :now => @time_2006_08_16_14_00_00, :ambiguous_time_range => :none)
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 = Chronic.parse("sunday 4:20", :now => @time_2006_08_16_14_00_00, :ambiguous_time_range => :none)
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 = Chronic.parse("4 pm", :now => @time_2006_08_16_14_00_00)
205
+ time = parse_now("4 pm")
179
206
  assert_equal Time.local(2006, 8, 16, 16), time
180
207
 
181
- time = Chronic.parse("4 am", :now => @time_2006_08_16_14_00_00, :ambiguous_time_range => :none)
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 = Chronic.parse("4:00 in the morning", :now => @time_2006_08_16_14_00_00)
211
+ time = parse_now("4:00 in the morning")
185
212
  assert_equal Time.local(2006, 8, 16, 4), time
186
213
 
187
- #time = Chronic.parse("november 4", :now => @time_2006_08_16_14_00_00)
188
- #assert_equal Time.local(2006, 11, 4, 12), time
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 = Chronic.parse("friday 1 pm", :now => @time_2006_08_16_14_00_00)
222
+ time = parse_now("friday 1 pm")
193
223
  assert_equal Time.local(2006, 8, 18, 13), time
194
224
 
195
- time = Chronic.parse("friday 11 at night", :now => @time_2006_08_16_14_00_00)
225
+ time = parse_now("friday 11 at night")
196
226
  assert_equal Time.local(2006, 8, 18, 23), time
197
227
 
198
- time = Chronic.parse("friday 11 in the evening", :now => @time_2006_08_16_14_00_00)
228
+ time = parse_now("friday 11 in the evening")
199
229
  assert_equal Time.local(2006, 8, 18, 23), time
200
230
 
201
- time = Chronic.parse("sunday 6am", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("this year", :now => @time_2006_08_16_14_00_00)
241
+ time = parse_now("this year")
209
242
  assert_equal Time.local(2006, 10, 24, 12, 30), time
210
243
 
211
- time = Chronic.parse("this year", :now => @time_2006_08_16_14_00_00, :context => :past)
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 = Chronic.parse("this month", :now => @time_2006_08_16_14_00_00)
249
+ time = parse_now("this month")
217
250
  assert_equal Time.local(2006, 8, 24, 12), time
218
251
 
219
- time = Chronic.parse("this month", :now => @time_2006_08_16_14_00_00, :context => :past)
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 = Chronic.parse("last november", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("this fortnight", :now => @time_2006_08_16_14_00_00)
265
+ time = parse_now("this fortnight")
230
266
  assert_equal Time.local(2006, 8, 21, 19, 30), time
231
267
 
232
- time = Chronic.parse("this fortnight", :now => @time_2006_08_16_14_00_00, :context => :past)
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 = Chronic.parse("this week", :now => @time_2006_08_16_14_00_00)
273
+ time = parse_now("this week")
238
274
  assert_equal Time.local(2006, 8, 18, 7, 30), time
239
275
 
240
- time = Chronic.parse("this week", :now => @time_2006_08_16_14_00_00, :context => :past)
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 = Chronic.parse("this day", :now => @time_2006_08_16_14_00_00)
292
+ time = parse_now("this day")
246
293
  assert_equal Time.local(2006, 8, 16, 19, 30), time
247
294
 
248
- time = Chronic.parse("this day", :now => @time_2006_08_16_14_00_00, :context => :past)
295
+ time = parse_now("this day", :context => :past)
249
296
  assert_equal Time.local(2006, 8, 16, 7), time
250
297
 
251
- time = Chronic.parse("today", :now => @time_2006_08_16_14_00_00)
298
+ time = parse_now("today")
252
299
  assert_equal Time.local(2006, 8, 16, 19, 30), time
253
300
 
254
- time = Chronic.parse("yesterday", :now => @time_2006_08_16_14_00_00)
301
+ time = parse_now("yesterday")
255
302
  assert_equal Time.local(2006, 8, 15, 12), time
256
303
 
257
- time = Chronic.parse("tomorrow", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("this tuesday", :now => @time_2006_08_16_14_00_00)
309
+ time = parse_now("this tuesday")
263
310
  assert_equal Time.local(2006, 8, 22, 12), time
264
311
 
265
- time = Chronic.parse("next tuesday", :now => @time_2006_08_16_14_00_00)
312
+ time = parse_now("next tuesday")
266
313
  assert_equal Time.local(2006, 8, 22, 12), time
267
314
 
268
- time = Chronic.parse("last tuesday", :now => @time_2006_08_16_14_00_00)
315
+ time = parse_now("last tuesday")
269
316
  assert_equal Time.local(2006, 8, 15, 12), time
270
317
 
271
- time = Chronic.parse("this wed", :now => @time_2006_08_16_14_00_00)
318
+ time = parse_now("this wed")
272
319
  assert_equal Time.local(2006, 8, 23, 12), time
273
320
 
274
- time = Chronic.parse("next wed", :now => @time_2006_08_16_14_00_00)
321
+ time = parse_now("next wed")
275
322
  assert_equal Time.local(2006, 8, 23, 12), time
276
323
 
277
- time = Chronic.parse("last wed", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("this morning", :now => @time_2006_08_16_14_00_00)
329
+ time = parse_now("this morning")
283
330
  assert_equal Time.local(2006, 8, 16, 9), time
284
331
 
285
- time = Chronic.parse("tonight", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("this second", :now => @time_2006_08_16_14_00_00)
342
+ time = parse_now("this second")
291
343
  assert_equal Time.local(2006, 8, 16, 14), time
292
344
 
293
- time = Chronic.parse("this second", :now => @time_2006_08_16_14_00_00, :context => :past)
345
+ time = parse_now("this second", :context => :past)
294
346
  assert_equal Time.local(2006, 8, 16, 14), time
295
347
 
296
- time = Chronic.parse("next second", :now => @time_2006_08_16_14_00_00)
348
+ time = parse_now("next second")
297
349
  assert_equal Time.local(2006, 8, 16, 14, 0, 1), time
298
350
 
299
- time = Chronic.parse("last second", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("yesterday at 4:00", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("yesterday at 4:00", :now => @time_2006_08_16_14_00_00, :ambiguous_time_range => :none)
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 = Chronic.parse("last friday at 4:00", :now => @time_2006_08_16_14_00_00)
374
+ time = parse_now("last friday at 4:00")
311
375
  assert_equal Time.local(2006, 8, 11, 16), time
312
376
 
313
- time = Chronic.parse("next wed 4:00", :now => @time_2006_08_16_14_00_00)
377
+ time = parse_now("next wed 4:00")
314
378
  assert_equal Time.local(2006, 8, 23, 16), time
315
379
 
316
- time = Chronic.parse("yesterday afternoon", :now => @time_2006_08_16_14_00_00)
380
+ time = parse_now("yesterday afternoon")
317
381
  assert_equal Time.local(2006, 8, 15, 15), time
318
382
 
319
- time = Chronic.parse("last week tuesday", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("yesterday at 4:00pm", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("afternoon yesterday", :now => @time_2006_08_16_14_00_00)
417
+ time = parse_now("afternoon yesterday")
330
418
  assert_equal Time.local(2006, 8, 15, 15), time
331
419
 
332
- time = Chronic.parse("tuesday last week", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("3 years ago", :now => @time_2006_08_16_14_00_00)
340
- assert_equal Time.local(2003, 8, 16, 14, 30, 30), time
427
+ time = parse_now("3 years ago")
428
+ assert_equal Time.local(2003, 8, 16, 14), time
341
429
 
342
- time = Chronic.parse("1 month ago", :now => @time_2006_08_16_14_00_00)
343
- assert_equal Time.local(2006, 7, 16, 14, 30, 30), time
430
+ time = parse_now("1 month ago")
431
+ assert_equal Time.local(2006, 7, 16, 14), time
344
432
 
345
- time = Chronic.parse("1 fortnight ago", :now => @time_2006_08_16_14_00_00)
346
- assert_equal Time.local(2006, 8, 2, 14, 30, 30), time
433
+ time = parse_now("1 fortnight ago")
434
+ assert_equal Time.local(2006, 8, 2, 14), time
347
435
 
348
- time = Chronic.parse("2 fortnights ago", :now => @time_2006_08_16_14_00_00)
349
- assert_equal Time.local(2006, 7, 19, 14, 30, 30), time
436
+ time = parse_now("2 fortnights ago")
437
+ assert_equal Time.local(2006, 7, 19, 14), time
350
438
 
351
- time = Chronic.parse("3 weeks ago", :now => @time_2006_08_16_14_00_00)
352
- assert_equal Time.local(2006, 7, 26, 14, 30, 30), time
439
+ time = parse_now("3 weeks ago")
440
+ assert_equal Time.local(2006, 7, 26, 14), time
353
441
 
354
- time = Chronic.parse("3 days ago", :now => @time_2006_08_16_14_00_00)
355
- assert_equal Time.local(2006, 8, 13, 14, 0, 30), time
442
+ time = parse_now("2 weekends ago")
443
+ assert_equal Time.local(2006, 8, 5), time
356
444
 
357
- #time = Chronic.parse("1 monday ago", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("5 mornings ago", :now => @time_2006_08_16_14_00_00)
451
+ time = parse_now("5 mornings ago")
361
452
  assert_equal Time.local(2006, 8, 12, 9), time
362
453
 
363
- time = Chronic.parse("7 hours ago", :now => @time_2006_08_16_14_00_00)
364
- assert_equal Time.local(2006, 8, 16, 7, 0, 30), time
454
+ time = parse_now("7 hours ago")
455
+ assert_equal Time.local(2006, 8, 16, 7), time
365
456
 
366
- time = Chronic.parse("3 minutes ago", :now => @time_2006_08_16_14_00_00)
457
+ time = parse_now("3 minutes ago")
367
458
  assert_equal Time.local(2006, 8, 16, 13, 57), time
368
459
 
369
- time = Chronic.parse("20 seconds before now", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("3 years from now", :now => @time_2006_08_16_14_00_00)
375
- assert_equal Time.local(2009, 8, 16, 14, 30, 30), time
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 = Chronic.parse("6 months hence", :now => @time_2006_08_16_14_00_00)
378
- assert_equal Time.local(2007, 2, 16, 14, 30, 30), time
471
+ time = parse_now("3 fortnights hence")
472
+ assert_equal Time.local(2006, 9, 27, 14), time
379
473
 
380
- time = Chronic.parse("3 fortnights hence", :now => @time_2006_08_16_14_00_00)
381
- assert_equal Time.local(2006, 9, 27, 14, 30, 30), time
474
+ time = parse_now("1 week from now")
475
+ assert_equal Time.local(2006, 8, 23, 14, 0, 0), time
382
476
 
383
- time = Chronic.parse("1 week from now", :now => @time_2006_08_16_14_00_00)
384
- assert_equal Time.local(2006, 8, 23, 14, 30, 30), time
477
+ time = parse_now("1 weekend from now")
478
+ assert_equal Time.local(2006, 8, 19), time
385
479
 
386
- time = Chronic.parse("1 day hence", :now => @time_2006_08_16_14_00_00)
387
- assert_equal Time.local(2006, 8, 17, 14, 0, 30), time
480
+ time = parse_now("2 weekends from now")
481
+ assert_equal Time.local(2006, 8, 26), time
388
482
 
389
- time = Chronic.parse("5 mornings hence", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("1 hour from now", :now => @time_2006_08_16_14_00_00)
393
- assert_equal Time.local(2006, 8, 16, 15, 0, 30), time
489
+ time = parse_now("1 hour from now")
490
+ assert_equal Time.local(2006, 8, 16, 15), time
394
491
 
395
- time = Chronic.parse("20 minutes hence", :now => @time_2006_08_16_14_00_00)
492
+ time = parse_now("20 minutes hence")
396
493
  assert_equal Time.local(2006, 8, 16, 14, 20), time
397
494
 
398
- time = Chronic.parse("20 seconds from now", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("in 3 hours", :now => @time_2006_08_16_14_00_00)
404
- assert_equal Time.local(2006, 8, 16, 17, 0, 30), time
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 = Chronic.parse("3 years ago tomorrow", :now => @time_2006_08_16_14_00_00)
510
+ time = parse_now("3 years ago tomorrow")
411
511
  assert_equal Time.local(2003, 8, 17, 12), time
412
512
 
413
- time = Chronic.parse("3 years ago this friday", :now => @time_2006_08_16_14_00_00)
513
+ time = parse_now("3 years ago this friday")
414
514
  assert_equal Time.local(2003, 8, 18, 12), time
415
515
 
416
- time = Chronic.parse("3 months ago saturday at 5:00 pm", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("2 days from this second", :now => @time_2006_08_16_14_00_00)
519
+ time = parse_now("2 days from this second")
420
520
  assert_equal Time.local(2006, 8, 18, 14), time
421
521
 
422
- time = Chronic.parse("7 hours before tomorrow at midnight", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("3rd wednesday in november", :now => @time_2006_08_16_14_00_00)
529
+ time = parse_now("3rd wednesday in november")
430
530
  assert_equal Time.local(2006, 11, 15, 12), time
431
531
 
432
- time = Chronic.parse("10th wednesday in november", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("3rd month next year", :now => @time_2006_08_16_14_00_00)
537
+ time = parse_now("3rd month next year")
438
538
  assert_equal Time.local(2007, 3, 16, 12, 30), time
439
539
 
440
- time = Chronic.parse("3rd thursday this september", :now => @time_2006_08_16_14_00_00)
540
+ time = parse_now("3rd thursday this september")
441
541
  assert_equal Time.local(2006, 9, 21, 12), time
442
542
 
443
- time = Chronic.parse("4th day last week", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("some stupid nonsense", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("friday", :now => @time_2006_08_16_14_00_00, :guess => false)
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 = Chronic.parse("november", :now => @time_2006_08_16_14_00_00, :guess => false)
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