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/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
- # 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)
9
+ @time_2006_08_16_14_00_00 = TIME_2006_08_16_14_00_00
10
10
  end
11
11
 
12
- def test__parse_guess_dates
12
+ def test_parse_guess_dates
13
13
  # rm_sd
14
14
 
15
- time = Chronic.parse("may 27", :now => @time_2006_08_16_14_00_00)
15
+ time = parse_now("may 27")
16
16
  assert_equal Time.local(2007, 5, 27, 12), time
17
17
 
18
- time = Chronic.parse("may 28", :now => @time_2006_08_16_14_00_00, :context => :past)
18
+ time = parse_now("may 28", :context => :past)
19
19
  assert_equal Time.local(2006, 5, 28, 12), time
20
20
 
21
- 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)
22
22
  assert_equal Time.local(2006, 5, 28, 17), time
23
23
 
24
- 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)
25
25
  assert_equal Time.local(2006, 5, 28, 17), time
26
26
 
27
- time = Chronic.parse("may 28 at 5:32.19pm", :now => @time_2006_08_16_14_00_00, :context => :past)
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 = Chronic.parse("may 27th", :now => @time_2006_08_16_14_00_00)
32
+ time = parse_now("may 27th")
33
33
  assert_equal Time.local(2007, 5, 27, 12), time
34
34
 
35
- time = Chronic.parse("may 27th", :now => @time_2006_08_16_14_00_00, :context => :past)
35
+ time = parse_now("may 27th", :context => :past)
36
36
  assert_equal Time.local(2006, 5, 27, 12), time
37
37
 
38
- 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)
39
39
  assert_equal Time.local(2006, 5, 27, 17), time
40
40
 
41
- 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)
42
42
  assert_equal Time.local(2006, 5, 27, 17), time
43
43
 
44
- 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)
45
45
  assert_equal Time.local(2007, 5, 27, 5), time
46
46
 
47
47
  # rm_sy
48
48
 
49
- time = Chronic.parse("June 1979", :now => @time_2006_08_16_14_00_00)
49
+ time = parse_now("June 1979")
50
50
  assert_equal Time.local(1979, 6, 16, 0), time
51
51
 
52
- time = Chronic.parse("dec 79", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("jan 3 2010", :now => @time_2006_08_16_14_00_00)
57
+ time = parse_now("jan 3 2010")
58
58
  assert_equal Time.local(2010, 1, 3, 12), time
59
59
 
60
- time = Chronic.parse("jan 3 2010 midnight", :now => @time_2006_08_16_14_00_00)
60
+ time = parse_now("jan 3 2010 midnight")
61
61
  assert_equal Time.local(2010, 1, 4, 0), time
62
62
 
63
- 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")
64
64
  assert_equal Time.local(2010, 1, 4, 0), time
65
65
 
66
- 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)
67
67
  assert_equal Time.local(2010, 1, 3, 4), time
68
68
 
69
- #time = Chronic.parse("January 12, '00", :now => @time_2006_08_16_14_00_00)
69
+ #time = parse_now("January 12, '00")
70
70
  #assert_equal Time.local(2000, 1, 12, 12), time
71
71
 
72
- time = Chronic.parse("may 27 79", :now => @time_2006_08_16_14_00_00)
72
+ time = parse_now("may 27 79")
73
73
  assert_equal Time.local(1979, 5, 27, 12), time
74
74
 
75
- 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")
76
76
  assert_equal Time.local(1979, 5, 27, 16, 30), time
77
77
 
78
- 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)
79
79
  assert_equal Time.local(1979, 5, 27, 4, 30), time
80
80
 
81
81
  # sd_rm_sy
82
82
 
83
- time = Chronic.parse("3 jan 2010", :now => @time_2006_08_16_14_00_00)
83
+ time = parse_now("3 jan 2010")
84
84
  assert_equal Time.local(2010, 1, 3, 12), time
85
85
 
86
- time = Chronic.parse("3 jan 2010 4pm", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("5/27/1979", :now => @time_2006_08_16_14_00_00)
91
+ time = parse_now("5/27/1979")
92
92
  assert_equal Time.local(1979, 5, 27, 12), time
93
93
 
94
- time = Chronic.parse("5/27/1979 4am", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("27/5/1979", :now => @time_2006_08_16_14_00_00)
99
+ time = parse_now("27/5/1979")
100
100
  assert_equal Time.local(1979, 5, 27, 12), time
101
101
 
102
- time = Chronic.parse("27/5/1979 @ 0700", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("05/06", :now => @time_2006_08_16_14_00_00)
107
+ time = parse_now("05/06")
108
108
  assert_equal Time.local(2006, 5, 16, 12), time
109
109
 
110
- time = Chronic.parse("12/06", :now => @time_2006_08_16_14_00_00)
110
+ time = parse_now("12/06")
111
111
  assert_equal Time.local(2006, 12, 16, 12), time
112
112
 
113
- time = Chronic.parse("13/06", :now => @time_2006_08_16_14_00_00)
113
+ time = parse_now("13/06")
114
114
  assert_equal nil, time
115
115
 
116
116
  # sy_sm_sd
117
117
 
118
- time = Chronic.parse("2000-1-1", :now => @time_2006_08_16_14_00_00)
118
+ time = parse_now("2000-1-1")
119
119
  assert_equal Time.local(2000, 1, 1, 12), time
120
120
 
121
- time = Chronic.parse("2006-08-20", :now => @time_2006_08_16_14_00_00)
121
+ time = parse_now("2006-08-20")
122
122
  assert_equal Time.local(2006, 8, 20, 12), time
123
123
 
124
- time = Chronic.parse("2006-08-20 7pm", :now => @time_2006_08_16_14_00_00)
124
+ time = parse_now("2006-08-20 7pm")
125
125
  assert_equal Time.local(2006, 8, 20, 19), time
126
126
 
127
- 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")
128
128
  assert_equal Time.local(2006, 8, 20, 3), time
129
129
 
130
- time = Chronic.parse("2006-08-20 03:30:30", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("2006-08-20 15:30:30", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("2006-08-20 15:30.30", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("jan 5 13:00", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("may 40", :now => @time_2006_08_16_14_00_00)
155
+ time = parse_now("may 40")
147
156
  assert_equal nil, time
148
157
 
149
- time = Chronic.parse("may 27 40", :now => @time_2006_08_16_14_00_00)
158
+ time = parse_now("may 27 40")
150
159
  assert_equal nil, time
151
160
 
152
- time = Chronic.parse("1800-08-20", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("friday", :now => @time_2006_08_16_14_00_00)
170
+ time = parse_now("friday")
158
171
  assert_equal Time.local(2006, 8, 18, 12), time
159
172
 
160
- 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")
161
177
  assert_equal Time.local(2006, 8, 16, 17), time
162
178
 
163
- 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)
164
180
  assert_equal Time.local(2006, 8, 16, 5), time
165
181
 
166
- time = Chronic.parse("13:00", :now => @time_2006_08_16_14_00_00)
182
+ time = parse_now("13:00")
167
183
  assert_equal Time.local(2006, 8, 17, 13), time
168
184
 
169
- time = Chronic.parse("13:45", :now => @time_2006_08_16_14_00_00)
185
+ time = parse_now("13:45")
170
186
  assert_equal Time.local(2006, 8, 17, 13, 45), time
171
187
 
172
- time = Chronic.parse("november", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("friday 13:00", :now => @time_2006_08_16_14_00_00)
193
+ time = parse_now("friday 13:00")
178
194
  assert_equal Time.local(2006, 8, 18, 13), time
179
195
 
180
- time = Chronic.parse("monday 4:00", :now => @time_2006_08_16_14_00_00)
196
+ time = parse_now("monday 4:00")
181
197
  assert_equal Time.local(2006, 8, 21, 16), time
182
198
 
183
- 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)
184
200
  assert_equal Time.local(2006, 8, 19, 4), time
185
201
 
186
- 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)
187
203
  assert_equal Time.local(2006, 8, 20, 4, 20), time
188
204
 
189
- time = Chronic.parse("4 pm", :now => @time_2006_08_16_14_00_00)
205
+ time = parse_now("4 pm")
190
206
  assert_equal Time.local(2006, 8, 16, 16), time
191
207
 
192
- 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)
193
209
  assert_equal Time.local(2006, 8, 16, 4), time
194
210
 
195
- 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")
196
212
  assert_equal Time.local(2006, 8, 16, 4), time
197
213
 
198
- time = Chronic.parse("november 4", :now => @time_2006_08_16_14_00_00)
214
+ time = parse_now("november 4")
199
215
  assert_equal Time.local(2006, 11, 4, 12), time
200
216
 
201
- time = Chronic.parse("aug 24", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("friday 1 pm", :now => @time_2006_08_16_14_00_00)
222
+ time = parse_now("friday 1 pm")
207
223
  assert_equal Time.local(2006, 8, 18, 13), time
208
224
 
209
- time = Chronic.parse("friday 11 at night", :now => @time_2006_08_16_14_00_00)
225
+ time = parse_now("friday 11 at night")
210
226
  assert_equal Time.local(2006, 8, 18, 23), time
211
227
 
212
- 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")
213
229
  assert_equal Time.local(2006, 8, 18, 23), time
214
230
 
215
- time = Chronic.parse("sunday 6am", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("this year", :now => @time_2006_08_16_14_00_00)
241
+ time = parse_now("this year")
223
242
  assert_equal Time.local(2006, 10, 24, 12, 30), time
224
243
 
225
- time = Chronic.parse("this year", :now => @time_2006_08_16_14_00_00, :context => :past)
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 = Chronic.parse("this month", :now => @time_2006_08_16_14_00_00)
249
+ time = parse_now("this month")
231
250
  assert_equal Time.local(2006, 8, 24, 12), time
232
251
 
233
- time = Chronic.parse("this month", :now => @time_2006_08_16_14_00_00, :context => :past)
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 = Chronic.parse("last november", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("this fortnight", :now => @time_2006_08_16_14_00_00)
265
+ time = parse_now("this fortnight")
244
266
  assert_equal Time.local(2006, 8, 21, 19, 30), time
245
267
 
246
- time = Chronic.parse("this fortnight", :now => @time_2006_08_16_14_00_00, :context => :past)
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 = Chronic.parse("this week", :now => @time_2006_08_16_14_00_00)
273
+ time = parse_now("this week")
252
274
  assert_equal Time.local(2006, 8, 18, 7, 30), time
253
275
 
254
- time = Chronic.parse("this week", :now => @time_2006_08_16_14_00_00, :context => :past)
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 = Chronic.parse("this day", :now => @time_2006_08_16_14_00_00)
292
+ time = parse_now("this day")
260
293
  assert_equal Time.local(2006, 8, 16, 19, 30), time
261
294
 
262
- time = Chronic.parse("this day", :now => @time_2006_08_16_14_00_00, :context => :past)
295
+ time = parse_now("this day", :context => :past)
263
296
  assert_equal Time.local(2006, 8, 16, 7), time
264
297
 
265
- time = Chronic.parse("today", :now => @time_2006_08_16_14_00_00)
298
+ time = parse_now("today")
266
299
  assert_equal Time.local(2006, 8, 16, 19, 30), time
267
300
 
268
- time = Chronic.parse("yesterday", :now => @time_2006_08_16_14_00_00)
301
+ time = parse_now("yesterday")
269
302
  assert_equal Time.local(2006, 8, 15, 12), time
270
303
 
271
- time = Chronic.parse("tomorrow", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("this tuesday", :now => @time_2006_08_16_14_00_00)
309
+ time = parse_now("this tuesday")
277
310
  assert_equal Time.local(2006, 8, 22, 12), time
278
311
 
279
- time = Chronic.parse("next tuesday", :now => @time_2006_08_16_14_00_00)
312
+ time = parse_now("next tuesday")
280
313
  assert_equal Time.local(2006, 8, 22, 12), time
281
314
 
282
- time = Chronic.parse("last tuesday", :now => @time_2006_08_16_14_00_00)
315
+ time = parse_now("last tuesday")
283
316
  assert_equal Time.local(2006, 8, 15, 12), time
284
317
 
285
- time = Chronic.parse("this wed", :now => @time_2006_08_16_14_00_00)
318
+ time = parse_now("this wed")
286
319
  assert_equal Time.local(2006, 8, 23, 12), time
287
320
 
288
- time = Chronic.parse("next wed", :now => @time_2006_08_16_14_00_00)
321
+ time = parse_now("next wed")
289
322
  assert_equal Time.local(2006, 8, 23, 12), time
290
323
 
291
- time = Chronic.parse("last wed", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("this morning", :now => @time_2006_08_16_14_00_00)
329
+ time = parse_now("this morning")
297
330
  assert_equal Time.local(2006, 8, 16, 9), time
298
331
 
299
- time = Chronic.parse("tonight", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("this second", :now => @time_2006_08_16_14_00_00)
342
+ time = parse_now("this second")
305
343
  assert_equal Time.local(2006, 8, 16, 14), time
306
344
 
307
- time = Chronic.parse("this second", :now => @time_2006_08_16_14_00_00, :context => :past)
345
+ time = parse_now("this second", :context => :past)
308
346
  assert_equal Time.local(2006, 8, 16, 14), time
309
347
 
310
- time = Chronic.parse("next second", :now => @time_2006_08_16_14_00_00)
348
+ time = parse_now("next second")
311
349
  assert_equal Time.local(2006, 8, 16, 14, 0, 1), time
312
350
 
313
- time = Chronic.parse("last second", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("yesterday at 4:00", :now => @time_2006_08_16_14_00_00)
356
+ time = parse_now("yesterday at 4:00")
319
357
  assert_equal Time.local(2006, 8, 15, 16), time
320
358
 
321
- time = Chronic.parse("today at 9:00", :now => @time_2006_08_16_14_00_00)
359
+ time = parse_now("today at 9:00")
322
360
  assert_equal Time.local(2006, 8, 16, 9), time
323
361
 
324
- time = Chronic.parse("today at 2100", :now => @time_2006_08_16_14_00_00)
362
+ time = parse_now("today at 2100")
325
363
  assert_equal Time.local(2006, 8, 16, 21), time
326
364
 
327
- time = Chronic.parse("this day at 0900", :now => @time_2006_08_16_14_00_00)
365
+ time = parse_now("this day at 0900")
328
366
  assert_equal Time.local(2006, 8, 16, 9), time
329
367
 
330
- time = Chronic.parse("tomorrow at 0900", :now => @time_2006_08_16_14_00_00)
368
+ time = parse_now("tomorrow at 0900")
331
369
  assert_equal Time.local(2006, 8, 17, 9), time
332
370
 
333
- time = Chronic.parse("yesterday at 4:00", :now => @time_2006_08_16_14_00_00, :ambiguous_time_range => :none)
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 = Chronic.parse("last friday at 4:00", :now => @time_2006_08_16_14_00_00)
374
+ time = parse_now("last friday at 4:00")
337
375
  assert_equal Time.local(2006, 8, 11, 16), time
338
376
 
339
- time = Chronic.parse("next wed 4:00", :now => @time_2006_08_16_14_00_00)
377
+ time = parse_now("next wed 4:00")
340
378
  assert_equal Time.local(2006, 8, 23, 16), time
341
379
 
342
- time = Chronic.parse("yesterday afternoon", :now => @time_2006_08_16_14_00_00)
380
+ time = parse_now("yesterday afternoon")
343
381
  assert_equal Time.local(2006, 8, 15, 15), time
344
382
 
345
- time = Chronic.parse("last week tuesday", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("today at 6:00pm", :now => @time_2006_08_16_14_00_00)
397
+ time = parse_now("today at 6:00pm")
351
398
  assert_equal Time.local(2006, 8, 16, 18), time
352
399
 
353
- time = Chronic.parse("today at 6:00am", :now => @time_2006_08_16_14_00_00)
400
+ time = parse_now("today at 6:00am")
354
401
  assert_equal Time.local(2006, 8, 16, 6), time
355
402
 
356
- time = Chronic.parse("this day 1800", :now => @time_2006_08_16_14_00_00)
403
+ time = parse_now("this day 1800")
357
404
  assert_equal Time.local(2006, 8, 16, 18), time
358
405
 
359
- time = Chronic.parse("yesterday at 4:00pm", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("afternoon yesterday", :now => @time_2006_08_16_14_00_00)
417
+ time = parse_now("afternoon yesterday")
365
418
  assert_equal Time.local(2006, 8, 15, 15), time
366
419
 
367
- time = Chronic.parse("tuesday last week", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("3 years ago", :now => @time_2006_08_16_14_00_00)
375
- 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
376
429
 
377
- time = Chronic.parse("1 month ago", :now => @time_2006_08_16_14_00_00)
378
- 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
379
432
 
380
- time = Chronic.parse("1 fortnight ago", :now => @time_2006_08_16_14_00_00)
381
- 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
382
435
 
383
- time = Chronic.parse("2 fortnights ago", :now => @time_2006_08_16_14_00_00)
384
- 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
385
438
 
386
- time = Chronic.parse("3 weeks ago", :now => @time_2006_08_16_14_00_00)
387
- 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
388
441
 
389
- time = Chronic.parse("3 days ago", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("1 monday ago", :now => @time_2006_08_16_14_00_00)
448
+ #time = parse_now("1 monday ago")
393
449
  #assert_equal Time.local(2006, 8, 14, 12), time
394
450
 
395
- time = Chronic.parse("5 mornings ago", :now => @time_2006_08_16_14_00_00)
451
+ time = parse_now("5 mornings ago")
396
452
  assert_equal Time.local(2006, 8, 12, 9), time
397
453
 
398
- time = Chronic.parse("7 hours ago", :now => @time_2006_08_16_14_00_00)
454
+ time = parse_now("7 hours ago")
399
455
  assert_equal Time.local(2006, 8, 16, 7), time
400
456
 
401
- time = Chronic.parse("3 minutes ago", :now => @time_2006_08_16_14_00_00)
457
+ time = parse_now("3 minutes ago")
402
458
  assert_equal Time.local(2006, 8, 16, 13, 57), time
403
459
 
404
- time = Chronic.parse("20 seconds before now", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("3 years from now", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("6 months hence", :now => @time_2006_08_16_14_00_00)
413
- assert_equal Time.local(2007, 2, 16, 14, 30, 30), time
468
+ time = parse_now("6 months hence")
469
+ assert_equal Time.local(2007, 2, 16, 14), time
414
470
 
415
- time = Chronic.parse("3 fortnights hence", :now => @time_2006_08_16_14_00_00)
416
- assert_equal Time.local(2006, 9, 27, 14, 30, 30), time
471
+ time = parse_now("3 fortnights hence")
472
+ assert_equal Time.local(2006, 9, 27, 14), time
417
473
 
418
- time = Chronic.parse("1 week from now", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("1 day hence", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("5 mornings hence", :now => @time_2006_08_16_14_00_00)
486
+ time = parse_now("5 mornings hence")
425
487
  assert_equal Time.local(2006, 8, 21, 9), time
426
488
 
427
- time = Chronic.parse("1 hour from now", :now => @time_2006_08_16_14_00_00)
489
+ time = parse_now("1 hour from now")
428
490
  assert_equal Time.local(2006, 8, 16, 15), time
429
491
 
430
- time = Chronic.parse("20 minutes hence", :now => @time_2006_08_16_14_00_00)
492
+ time = parse_now("20 minutes hence")
431
493
  assert_equal Time.local(2006, 8, 16, 14, 20), time
432
494
 
433
- time = Chronic.parse("20 seconds from now", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("in 3 hours", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("3 years ago tomorrow", :now => @time_2006_08_16_14_00_00)
510
+ time = parse_now("3 years ago tomorrow")
446
511
  assert_equal Time.local(2003, 8, 17, 12), time
447
512
 
448
- 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")
449
514
  assert_equal Time.local(2003, 8, 18, 12), time
450
515
 
451
- 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")
452
517
  assert_equal Time.local(2006, 5, 19, 17), time
453
518
 
454
- 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")
455
520
  assert_equal Time.local(2006, 8, 18, 14), time
456
521
 
457
- 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")
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 = Chronic.parse("3rd wednesday in november", :now => @time_2006_08_16_14_00_00)
529
+ time = parse_now("3rd wednesday in november")
465
530
  assert_equal Time.local(2006, 11, 15, 12), time
466
531
 
467
- time = Chronic.parse("10th wednesday in november", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("3rd month next year", :now => @time_2006_08_16_14_00_00)
537
+ time = parse_now("3rd month next year")
473
538
  assert_equal Time.local(2007, 3, 16, 12, 30), time
474
539
 
475
- time = Chronic.parse("3rd thursday this september", :now => @time_2006_08_16_14_00_00)
540
+ time = parse_now("3rd thursday this september")
476
541
  assert_equal Time.local(2006, 9, 21, 12), time
477
542
 
478
- time = Chronic.parse("4th day last week", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("some stupid nonsense", :now => @time_2006_08_16_14_00_00)
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 = Chronic.parse("friday", :now => @time_2006_08_16_14_00_00, :guess => false)
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 = Chronic.parse("november", :now => @time_2006_08_16_14_00_00, :guess => false)
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