chronic 0.2.2 → 0.3.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.
Files changed (57) hide show
  1. data/HISTORY.md +76 -0
  2. data/LICENSE +21 -0
  3. data/README.md +165 -0
  4. data/Rakefile +145 -18
  5. data/benchmark/benchmark.rb +13 -0
  6. data/chronic.gemspec +85 -0
  7. data/lib/chronic/chronic.rb +59 -49
  8. data/lib/chronic/grabber.rb +2 -2
  9. data/lib/chronic/handlers.rb +167 -112
  10. data/lib/{numerizer → chronic/numerizer}/numerizer.rb +17 -23
  11. data/lib/chronic/ordinal.rb +6 -6
  12. data/lib/chronic/pointer.rb +3 -3
  13. data/lib/chronic/repeater.rb +26 -12
  14. data/lib/chronic/repeaters/repeater_day.rb +17 -12
  15. data/lib/chronic/repeaters/repeater_day_name.rb +17 -12
  16. data/lib/chronic/repeaters/repeater_day_portion.rb +15 -14
  17. data/lib/chronic/repeaters/repeater_fortnight.rb +14 -9
  18. data/lib/chronic/repeaters/repeater_hour.rb +15 -10
  19. data/lib/chronic/repeaters/repeater_minute.rb +15 -10
  20. data/lib/chronic/repeaters/repeater_month.rb +20 -15
  21. data/lib/chronic/repeaters/repeater_month_name.rb +21 -16
  22. data/lib/chronic/repeaters/repeater_season.rb +136 -9
  23. data/lib/chronic/repeaters/repeater_season_name.rb +38 -17
  24. data/lib/chronic/repeaters/repeater_second.rb +15 -10
  25. data/lib/chronic/repeaters/repeater_time.rb +53 -43
  26. data/lib/chronic/repeaters/repeater_week.rb +16 -11
  27. data/lib/chronic/repeaters/repeater_weekday.rb +77 -0
  28. data/lib/chronic/repeaters/repeater_weekend.rb +14 -9
  29. data/lib/chronic/repeaters/repeater_year.rb +19 -13
  30. data/lib/chronic/scalar.rb +16 -14
  31. data/lib/chronic/separator.rb +25 -10
  32. data/lib/chronic/time_zone.rb +4 -3
  33. data/lib/chronic.rb +21 -19
  34. data/test/helper.rb +7 -0
  35. data/test/test_Chronic.rb +17 -18
  36. data/test/test_DaylightSavings.rb +118 -0
  37. data/test/test_Handler.rb +37 -38
  38. data/test/test_Numerizer.rb +8 -5
  39. data/test/test_RepeaterDayName.rb +15 -16
  40. data/test/test_RepeaterFortnight.rb +16 -17
  41. data/test/test_RepeaterHour.rb +18 -19
  42. data/test/test_RepeaterMinute.rb +34 -0
  43. data/test/test_RepeaterMonth.rb +16 -17
  44. data/test/test_RepeaterMonthName.rb +17 -18
  45. data/test/test_RepeaterTime.rb +20 -22
  46. data/test/test_RepeaterWeek.rb +16 -17
  47. data/test/test_RepeaterWeekday.rb +55 -0
  48. data/test/test_RepeaterWeekend.rb +21 -22
  49. data/test/test_RepeaterYear.rb +17 -18
  50. data/test/test_Span.rb +5 -6
  51. data/test/test_Time.rb +11 -12
  52. data/test/test_Token.rb +5 -6
  53. data/test/test_parsing.rb +314 -196
  54. metadata +74 -49
  55. data/History.txt +0 -49
  56. data/README.txt +0 -149
  57. data/test/suite.rb +0 -9
data/test/test_parsing.rb CHANGED
@@ -1,592 +1,710 @@
1
- require 'chronic'
2
- require 'test/unit'
1
+ require File.join(File.dirname(__FILE__), *%w[helper])
3
2
 
4
3
  class TestParsing < Test::Unit::TestCase
5
4
  # Wed Aug 16 14:00:00 UTC 2006
6
5
  TIME_2006_08_16_14_00_00 = Time.local(2006, 8, 16, 14, 0, 0, 0)
7
-
6
+
8
7
  def setup
9
8
  @time_2006_08_16_14_00_00 = TIME_2006_08_16_14_00_00
10
9
  end
11
-
10
+
12
11
  def test_parse_guess_dates
13
12
  # rm_sd
14
13
 
15
14
  time = parse_now("may 27")
16
15
  assert_equal Time.local(2007, 5, 27, 12), time
17
-
16
+
18
17
  time = parse_now("may 28", :context => :past)
19
18
  assert_equal Time.local(2006, 5, 28, 12), time
20
-
19
+
21
20
  time = parse_now("may 28 5pm", :context => :past)
22
21
  assert_equal Time.local(2006, 5, 28, 17), time
23
-
22
+
24
23
  time = parse_now("may 28 at 5pm", :context => :past)
25
24
  assert_equal Time.local(2006, 5, 28, 17), time
26
-
25
+
27
26
  time = parse_now("may 28 at 5:32.19pm", :context => :past)
28
27
  assert_equal Time.local(2006, 5, 28, 17, 32, 19), time
29
-
28
+
29
+ # rm_sd_on
30
+
31
+ time = parse_now("5pm on may 28")
32
+ assert_equal Time.local(2007, 5, 28, 17), time
33
+
34
+ time = parse_now("5pm may 28")
35
+ assert_equal Time.local(2007, 5, 28, 17), time
36
+
37
+ time = parse_now("5 on may 28", :ambiguous_time_range => :none)
38
+ assert_equal Time.local(2007, 5, 28, 05), time
39
+
30
40
  # rm_od
31
-
41
+
32
42
  time = parse_now("may 27th")
33
43
  assert_equal Time.local(2007, 5, 27, 12), time
34
-
44
+
35
45
  time = parse_now("may 27th", :context => :past)
36
46
  assert_equal Time.local(2006, 5, 27, 12), time
37
-
47
+
38
48
  time = parse_now("may 27th 5:00 pm", :context => :past)
39
49
  assert_equal Time.local(2006, 5, 27, 17), time
40
-
50
+
41
51
  time = parse_now("may 27th at 5pm", :context => :past)
42
52
  assert_equal Time.local(2006, 5, 27, 17), time
43
-
53
+
44
54
  time = parse_now("may 27th at 5", :ambiguous_time_range => :none)
45
55
  assert_equal Time.local(2007, 5, 27, 5), time
46
-
56
+
57
+ # rm_od_on
58
+
59
+ time = parse_now("5:00 pm may 27th", :context => :past)
60
+ assert_equal Time.local(2006, 5, 27, 17), time
61
+
62
+ time = parse_now("5pm on may 27th", :context => :past)
63
+ assert_equal Time.local(2006, 5, 27, 17), time
64
+
65
+ time = parse_now("5 on may 27th", :ambiguous_time_range => :none)
66
+ assert_equal Time.local(2007, 5, 27, 5), time
67
+
47
68
  # rm_sy
48
-
69
+
49
70
  time = parse_now("June 1979")
50
71
  assert_equal Time.local(1979, 6, 16, 0), time
51
-
72
+
52
73
  time = parse_now("dec 79")
53
74
  assert_equal Time.local(1979, 12, 16, 12), time
54
-
75
+
55
76
  # rm_sd_sy
56
-
77
+
57
78
  time = parse_now("jan 3 2010")
58
79
  assert_equal Time.local(2010, 1, 3, 12), time
59
-
80
+
60
81
  time = parse_now("jan 3 2010 midnight")
61
82
  assert_equal Time.local(2010, 1, 4, 0), time
62
-
83
+
63
84
  time = parse_now("jan 3 2010 at midnight")
64
85
  assert_equal Time.local(2010, 1, 4, 0), time
65
-
86
+
66
87
  time = parse_now("jan 3 2010 at 4", :ambiguous_time_range => :none)
67
88
  assert_equal Time.local(2010, 1, 3, 4), time
68
-
89
+
69
90
  #time = parse_now("January 12, '00")
70
91
  #assert_equal Time.local(2000, 1, 12, 12), time
71
-
92
+
93
+ time = parse_now("may 27, 1979")
94
+ assert_equal Time.local(1979, 5, 27, 12), time
95
+
72
96
  time = parse_now("may 27 79")
73
97
  assert_equal Time.local(1979, 5, 27, 12), time
74
-
98
+
75
99
  time = parse_now("may 27 79 4:30")
76
100
  assert_equal Time.local(1979, 5, 27, 16, 30), time
77
-
101
+
78
102
  time = parse_now("may 27 79 at 4:30", :ambiguous_time_range => :none)
79
103
  assert_equal Time.local(1979, 5, 27, 4, 30), time
80
-
104
+
81
105
  # sd_rm_sy
82
106
 
83
107
  time = parse_now("3 jan 2010")
84
108
  assert_equal Time.local(2010, 1, 3, 12), time
85
-
109
+
86
110
  time = parse_now("3 jan 2010 4pm")
87
111
  assert_equal Time.local(2010, 1, 3, 16), time
88
-
112
+
113
+ time = parse_now("27 Oct 2006 7:30pm")
114
+ assert_equal Time.local(2006, 10, 27, 19, 30), time
115
+
89
116
  # sm_sd_sy
90
-
117
+
91
118
  time = parse_now("5/27/1979")
92
119
  assert_equal Time.local(1979, 5, 27, 12), time
93
-
120
+
94
121
  time = parse_now("5/27/1979 4am")
95
122
  assert_equal Time.local(1979, 5, 27, 4), time
96
-
123
+
97
124
  # sd_sm_sy
98
-
125
+
99
126
  time = parse_now("27/5/1979")
100
127
  assert_equal Time.local(1979, 5, 27, 12), time
101
-
128
+
102
129
  time = parse_now("27/5/1979 @ 0700")
103
130
  assert_equal Time.local(1979, 5, 27, 7), time
104
-
131
+
105
132
  # sm_sy
106
-
133
+
107
134
  time = parse_now("05/06")
108
135
  assert_equal Time.local(2006, 5, 16, 12), time
109
-
136
+
110
137
  time = parse_now("12/06")
111
138
  assert_equal Time.local(2006, 12, 16, 12), time
112
-
139
+
113
140
  time = parse_now("13/06")
114
141
  assert_equal nil, time
115
-
142
+
116
143
  # sy_sm_sd
117
-
144
+
118
145
  time = parse_now("2000-1-1")
119
146
  assert_equal Time.local(2000, 1, 1, 12), time
120
-
147
+
121
148
  time = parse_now("2006-08-20")
122
149
  assert_equal Time.local(2006, 8, 20, 12), time
123
-
150
+
124
151
  time = parse_now("2006-08-20 7pm")
125
152
  assert_equal Time.local(2006, 8, 20, 19), time
126
-
153
+
127
154
  time = parse_now("2006-08-20 03:00")
128
155
  assert_equal Time.local(2006, 8, 20, 3), time
129
-
156
+
130
157
  time = parse_now("2006-08-20 03:30:30")
131
158
  assert_equal Time.local(2006, 8, 20, 3, 30, 30), time
132
-
159
+
133
160
  time = parse_now("2006-08-20 15:30:30")
134
161
  assert_equal Time.local(2006, 8, 20, 15, 30, 30), time
135
-
162
+
136
163
  time = parse_now("2006-08-20 15:30.30")
137
164
  assert_equal Time.local(2006, 8, 20, 15, 30, 30), time
138
-
165
+
139
166
  # rdn_rm_rd_rt_rtz_ry
140
-
167
+
141
168
  time = parse_now("Mon Apr 02 17:00:00 PDT 2007")
142
- assert_equal Time.local(2007, 4, 2, 17), time
143
-
169
+ assert_equal 1175558400, time.to_i
170
+
144
171
  now = Time.now
145
172
  time = parse_now(now.to_s)
146
173
  assert_equal now.to_s, time.to_s
147
-
174
+
148
175
  # rm_sd_rt
149
-
176
+
150
177
  #time = parse_now("jan 5 13:00")
151
178
  #assert_equal Time.local(2007, 1, 5, 13), time
152
-
153
- # due to limitations of the Time class, these don't work
154
-
179
+
180
+ # old dates
181
+
155
182
  time = parse_now("may 40")
156
- assert_equal nil, time
157
-
183
+ assert_equal Time.local(40, 5, 16, 12, 0, 0), time
184
+
158
185
  time = parse_now("may 27 40")
159
- assert_equal nil, time
160
-
186
+ assert_equal Time.local(40, 5, 27, 12, 0, 0), time
187
+
161
188
  time = parse_now("1800-08-20")
162
- assert_equal nil, time
163
- end
164
-
165
- def test_foo
166
- Chronic.parse('two months ago this friday')
189
+ assert_equal Time.local(1800, 8, 20, 12, 0, 0), time
167
190
  end
168
191
 
169
192
  def test_parse_guess_r
170
193
  time = parse_now("friday")
171
194
  assert_equal Time.local(2006, 8, 18, 12), time
172
-
195
+
173
196
  time = parse_now("tue")
174
197
  assert_equal Time.local(2006, 8, 22, 12), time
175
-
198
+
176
199
  time = parse_now("5")
177
200
  assert_equal Time.local(2006, 8, 16, 17), time
178
-
201
+
179
202
  time = Chronic.parse("5", :now => Time.local(2006, 8, 16, 3, 0, 0, 0), :ambiguous_time_range => :none)
180
203
  assert_equal Time.local(2006, 8, 16, 5), time
181
-
204
+
182
205
  time = parse_now("13:00")
183
206
  assert_equal Time.local(2006, 8, 17, 13), time
184
-
207
+
185
208
  time = parse_now("13:45")
186
209
  assert_equal Time.local(2006, 8, 17, 13, 45), time
187
-
210
+
188
211
  time = parse_now("november")
189
212
  assert_equal Time.local(2006, 11, 16), time
190
213
  end
191
-
214
+
192
215
  def test_parse_guess_rr
193
216
  time = parse_now("friday 13:00")
194
217
  assert_equal Time.local(2006, 8, 18, 13), time
195
-
218
+
196
219
  time = parse_now("monday 4:00")
197
220
  assert_equal Time.local(2006, 8, 21, 16), time
198
-
221
+
199
222
  time = parse_now("sat 4:00", :ambiguous_time_range => :none)
200
223
  assert_equal Time.local(2006, 8, 19, 4), time
201
-
224
+
202
225
  time = parse_now("sunday 4:20", :ambiguous_time_range => :none)
203
226
  assert_equal Time.local(2006, 8, 20, 4, 20), time
204
-
227
+
205
228
  time = parse_now("4 pm")
206
229
  assert_equal Time.local(2006, 8, 16, 16), time
207
-
230
+
208
231
  time = parse_now("4 am", :ambiguous_time_range => :none)
209
232
  assert_equal Time.local(2006, 8, 16, 4), time
210
-
233
+
234
+ time = parse_now("12 pm")
235
+ assert_equal Time.local(2006, 8, 16, 12), time
236
+
237
+ time = parse_now("12:01 pm")
238
+ assert_equal Time.local(2006, 8, 16, 12, 1), time
239
+
240
+ time = parse_now("12:01 am")
241
+ assert_equal Time.local(2006, 8, 16, 0, 1), time
242
+
243
+ time = parse_now("12 am")
244
+ assert_equal Time.local(2006, 8, 16), time
245
+
211
246
  time = parse_now("4:00 in the morning")
212
247
  assert_equal Time.local(2006, 8, 16, 4), time
213
-
248
+
214
249
  time = parse_now("november 4")
215
250
  assert_equal Time.local(2006, 11, 4, 12), time
216
-
251
+
217
252
  time = parse_now("aug 24")
218
253
  assert_equal Time.local(2006, 8, 24, 12), time
219
254
  end
220
-
255
+
221
256
  def test_parse_guess_rrr
222
257
  time = parse_now("friday 1 pm")
223
258
  assert_equal Time.local(2006, 8, 18, 13), time
224
-
259
+
225
260
  time = parse_now("friday 11 at night")
226
261
  assert_equal Time.local(2006, 8, 18, 23), time
227
-
262
+
228
263
  time = parse_now("friday 11 in the evening")
229
264
  assert_equal Time.local(2006, 8, 18, 23), time
230
-
265
+
231
266
  time = parse_now("sunday 6am")
232
267
  assert_equal Time.local(2006, 8, 20, 6), time
233
-
268
+
234
269
  time = parse_now("friday evening at 7")
235
270
  assert_equal Time.local(2006, 8, 18, 19), time
236
271
  end
237
-
272
+
238
273
  def test_parse_guess_gr
239
274
  # year
240
-
275
+
241
276
  time = parse_now("this year")
242
277
  assert_equal Time.local(2006, 10, 24, 12, 30), time
243
-
278
+
244
279
  time = parse_now("this year", :context => :past)
245
280
  assert_equal Time.local(2006, 4, 24, 12, 30), time
246
-
281
+
247
282
  # month
248
-
283
+
249
284
  time = parse_now("this month")
250
285
  assert_equal Time.local(2006, 8, 24, 12), time
251
-
286
+
252
287
  time = parse_now("this month", :context => :past)
253
288
  assert_equal Time.local(2006, 8, 8, 12), time
254
-
289
+
255
290
  time = Chronic.parse("next month", :now => Time.local(2006, 11, 15))
256
291
  assert_equal Time.local(2006, 12, 16, 12), time
257
-
292
+
258
293
  # month name
259
-
294
+
260
295
  time = parse_now("last november")
261
296
  assert_equal Time.local(2005, 11, 16), time
262
-
297
+
263
298
  # fortnight
264
-
299
+
265
300
  time = parse_now("this fortnight")
266
301
  assert_equal Time.local(2006, 8, 21, 19, 30), time
267
-
302
+
268
303
  time = parse_now("this fortnight", :context => :past)
269
304
  assert_equal Time.local(2006, 8, 14, 19), time
270
-
305
+
271
306
  # week
272
-
307
+
273
308
  time = parse_now("this week")
274
309
  assert_equal Time.local(2006, 8, 18, 7, 30), time
275
-
310
+
276
311
  time = parse_now("this week", :context => :past)
277
312
  assert_equal Time.local(2006, 8, 14, 19), time
278
-
313
+
279
314
  # weekend
280
-
315
+
281
316
  time = parse_now("this weekend")
282
317
  assert_equal Time.local(2006, 8, 20), time
283
-
318
+
284
319
  time = parse_now("this weekend", :context => :past)
285
320
  assert_equal Time.local(2006, 8, 13), time
286
-
321
+
287
322
  time = parse_now("last weekend")
288
323
  assert_equal Time.local(2006, 8, 13), time
289
-
324
+
290
325
  # day
291
-
326
+
292
327
  time = parse_now("this day")
293
328
  assert_equal Time.local(2006, 8, 16, 19, 30), time
294
-
329
+
295
330
  time = parse_now("this day", :context => :past)
296
331
  assert_equal Time.local(2006, 8, 16, 7), time
297
-
332
+
298
333
  time = parse_now("today")
299
334
  assert_equal Time.local(2006, 8, 16, 19, 30), time
300
-
335
+
301
336
  time = parse_now("yesterday")
302
337
  assert_equal Time.local(2006, 8, 15, 12), time
303
-
338
+
304
339
  time = parse_now("tomorrow")
305
340
  assert_equal Time.local(2006, 8, 17, 12), time
306
-
341
+
307
342
  # day name
308
-
343
+
309
344
  time = parse_now("this tuesday")
310
345
  assert_equal Time.local(2006, 8, 22, 12), time
311
-
346
+
312
347
  time = parse_now("next tuesday")
313
348
  assert_equal Time.local(2006, 8, 22, 12), time
314
-
349
+
315
350
  time = parse_now("last tuesday")
316
351
  assert_equal Time.local(2006, 8, 15, 12), time
317
-
352
+
318
353
  time = parse_now("this wed")
319
354
  assert_equal Time.local(2006, 8, 23, 12), time
320
-
355
+
321
356
  time = parse_now("next wed")
322
357
  assert_equal Time.local(2006, 8, 23, 12), time
323
-
358
+
324
359
  time = parse_now("last wed")
325
360
  assert_equal Time.local(2006, 8, 9, 12), time
326
-
361
+
327
362
  # day portion
328
-
363
+
329
364
  time = parse_now("this morning")
330
365
  assert_equal Time.local(2006, 8, 16, 9), time
331
-
366
+
332
367
  time = parse_now("tonight")
333
368
  assert_equal Time.local(2006, 8, 16, 22), time
334
-
369
+
335
370
  # minute
336
-
371
+
337
372
  time = parse_now("next minute")
338
373
  assert_equal Time.local(2006, 8, 16, 14, 1, 30), time
339
-
374
+
340
375
  # second
341
-
376
+
342
377
  time = parse_now("this second")
343
378
  assert_equal Time.local(2006, 8, 16, 14), time
344
-
379
+
345
380
  time = parse_now("this second", :context => :past)
346
381
  assert_equal Time.local(2006, 8, 16, 14), time
347
-
382
+
348
383
  time = parse_now("next second")
349
384
  assert_equal Time.local(2006, 8, 16, 14, 0, 1), time
350
-
385
+
351
386
  time = parse_now("last second")
352
387
  assert_equal Time.local(2006, 8, 16, 13, 59, 59), time
353
388
  end
354
-
355
- def test_parse_guess_grr
389
+
390
+ def test_parse_guess_grr
356
391
  time = parse_now("yesterday at 4:00")
357
392
  assert_equal Time.local(2006, 8, 15, 16), time
358
-
393
+
359
394
  time = parse_now("today at 9:00")
360
395
  assert_equal Time.local(2006, 8, 16, 9), time
361
-
396
+
362
397
  time = parse_now("today at 2100")
363
398
  assert_equal Time.local(2006, 8, 16, 21), time
364
-
399
+
365
400
  time = parse_now("this day at 0900")
366
401
  assert_equal Time.local(2006, 8, 16, 9), time
367
-
402
+
368
403
  time = parse_now("tomorrow at 0900")
369
404
  assert_equal Time.local(2006, 8, 17, 9), time
370
-
405
+
371
406
  time = parse_now("yesterday at 4:00", :ambiguous_time_range => :none)
372
407
  assert_equal Time.local(2006, 8, 15, 4), time
373
-
408
+
374
409
  time = parse_now("last friday at 4:00")
375
410
  assert_equal Time.local(2006, 8, 11, 16), time
376
-
411
+
377
412
  time = parse_now("next wed 4:00")
378
413
  assert_equal Time.local(2006, 8, 23, 16), time
379
-
414
+
380
415
  time = parse_now("yesterday afternoon")
381
416
  assert_equal Time.local(2006, 8, 15, 15), time
382
-
417
+
383
418
  time = parse_now("last week tuesday")
384
419
  assert_equal Time.local(2006, 8, 8, 12), time
385
-
420
+
386
421
  time = parse_now("tonight at 7")
387
422
  assert_equal Time.local(2006, 8, 16, 19), time
388
-
423
+
389
424
  time = parse_now("tonight 7")
390
425
  assert_equal Time.local(2006, 8, 16, 19), time
391
-
426
+
392
427
  time = parse_now("7 tonight")
393
428
  assert_equal Time.local(2006, 8, 16, 19), time
394
429
  end
395
-
430
+
396
431
  def test_parse_guess_grrr
397
432
  time = parse_now("today at 6:00pm")
398
433
  assert_equal Time.local(2006, 8, 16, 18), time
399
-
434
+
400
435
  time = parse_now("today at 6:00am")
401
436
  assert_equal Time.local(2006, 8, 16, 6), time
402
-
437
+
403
438
  time = parse_now("this day 1800")
404
439
  assert_equal Time.local(2006, 8, 16, 18), time
405
-
440
+
406
441
  time = parse_now("yesterday at 4:00pm")
407
442
  assert_equal Time.local(2006, 8, 15, 16), time
408
-
443
+
409
444
  time = parse_now("tomorrow evening at 7")
410
445
  assert_equal Time.local(2006, 8, 17, 19), time
411
-
446
+
412
447
  time = parse_now("tomorrow morning at 5:30")
413
448
  assert_equal Time.local(2006, 8, 17, 5, 30), time
449
+
450
+ time = parse_now("next monday at 12:01 am")
451
+ assert_equal Time.local(2006, 8, 21, 00, 1), time
452
+
453
+ time = parse_now("next monday at 12:01 pm")
454
+ assert_equal Time.local(2006, 8, 21, 12, 1), time
414
455
  end
415
-
456
+
416
457
  def test_parse_guess_rgr
417
458
  time = parse_now("afternoon yesterday")
418
459
  assert_equal Time.local(2006, 8, 15, 15), time
419
-
460
+
420
461
  time = parse_now("tuesday last week")
421
462
  assert_equal Time.local(2006, 8, 8, 12), time
422
463
  end
423
-
464
+
424
465
  def test_parse_guess_s_r_p
425
466
  # past
426
-
467
+
427
468
  time = parse_now("3 years ago")
428
469
  assert_equal Time.local(2003, 8, 16, 14), time
429
-
470
+
430
471
  time = parse_now("1 month ago")
431
472
  assert_equal Time.local(2006, 7, 16, 14), time
432
-
473
+
433
474
  time = parse_now("1 fortnight ago")
434
475
  assert_equal Time.local(2006, 8, 2, 14), time
435
-
476
+
436
477
  time = parse_now("2 fortnights ago")
437
478
  assert_equal Time.local(2006, 7, 19, 14), time
438
-
479
+
439
480
  time = parse_now("3 weeks ago")
440
481
  assert_equal Time.local(2006, 7, 26, 14), time
441
-
482
+
442
483
  time = parse_now("2 weekends ago")
443
484
  assert_equal Time.local(2006, 8, 5), time
444
-
485
+
445
486
  time = parse_now("3 days ago")
446
487
  assert_equal Time.local(2006, 8, 13, 14), time
447
-
488
+
448
489
  #time = parse_now("1 monday ago")
449
490
  #assert_equal Time.local(2006, 8, 14, 12), time
450
-
491
+
451
492
  time = parse_now("5 mornings ago")
452
493
  assert_equal Time.local(2006, 8, 12, 9), time
453
-
494
+
454
495
  time = parse_now("7 hours ago")
455
496
  assert_equal Time.local(2006, 8, 16, 7), time
456
-
497
+
457
498
  time = parse_now("3 minutes ago")
458
499
  assert_equal Time.local(2006, 8, 16, 13, 57), time
459
-
500
+
460
501
  time = parse_now("20 seconds before now")
461
502
  assert_equal Time.local(2006, 8, 16, 13, 59, 40), time
462
503
 
463
504
  # future
464
-
505
+
465
506
  time = parse_now("3 years from now")
466
507
  assert_equal Time.local(2009, 8, 16, 14, 0, 0), time
467
-
508
+
468
509
  time = parse_now("6 months hence")
469
510
  assert_equal Time.local(2007, 2, 16, 14), time
470
-
511
+
471
512
  time = parse_now("3 fortnights hence")
472
513
  assert_equal Time.local(2006, 9, 27, 14), time
473
-
514
+
474
515
  time = parse_now("1 week from now")
475
516
  assert_equal Time.local(2006, 8, 23, 14, 0, 0), time
476
-
517
+
477
518
  time = parse_now("1 weekend from now")
478
519
  assert_equal Time.local(2006, 8, 19), time
479
-
520
+
480
521
  time = parse_now("2 weekends from now")
481
522
  assert_equal Time.local(2006, 8, 26), time
482
-
523
+
483
524
  time = parse_now("1 day hence")
484
525
  assert_equal Time.local(2006, 8, 17, 14), time
485
-
526
+
486
527
  time = parse_now("5 mornings hence")
487
528
  assert_equal Time.local(2006, 8, 21, 9), time
488
-
529
+
489
530
  time = parse_now("1 hour from now")
490
531
  assert_equal Time.local(2006, 8, 16, 15), time
491
-
532
+
492
533
  time = parse_now("20 minutes hence")
493
534
  assert_equal Time.local(2006, 8, 16, 14, 20), time
494
-
535
+
495
536
  time = parse_now("20 seconds from now")
496
537
  assert_equal Time.local(2006, 8, 16, 14, 0, 20), time
497
-
538
+
498
539
  time = Chronic.parse("2 months ago", :now => Time.parse("2007-03-07 23:30"))
499
540
  assert_equal Time.local(2007, 1, 7, 23, 30), time
500
541
  end
501
-
542
+
502
543
  def test_parse_guess_p_s_r
503
544
  time = parse_now("in 3 hours")
504
545
  assert_equal Time.local(2006, 8, 16, 17), time
505
546
  end
506
-
547
+
507
548
  def test_parse_guess_s_r_p_a
508
549
  # past
509
-
550
+
510
551
  time = parse_now("3 years ago tomorrow")
511
552
  assert_equal Time.local(2003, 8, 17, 12), time
512
-
553
+
513
554
  time = parse_now("3 years ago this friday")
514
555
  assert_equal Time.local(2003, 8, 18, 12), time
515
-
556
+
516
557
  time = parse_now("3 months ago saturday at 5:00 pm")
517
558
  assert_equal Time.local(2006, 5, 19, 17), time
518
-
559
+
519
560
  time = parse_now("2 days from this second")
520
561
  assert_equal Time.local(2006, 8, 18, 14), time
521
-
562
+
522
563
  time = parse_now("7 hours before tomorrow at midnight")
523
564
  assert_equal Time.local(2006, 8, 17, 17), time
524
-
565
+
525
566
  # future
526
567
  end
527
-
568
+
528
569
  def test_parse_guess_o_r_s_r
529
570
  time = parse_now("3rd wednesday in november")
530
571
  assert_equal Time.local(2006, 11, 15, 12), time
531
-
572
+
532
573
  time = parse_now("10th wednesday in november")
533
574
  assert_equal nil, time
575
+
576
+ # time = parse_now("3rd wednesday in 2007")
577
+ # assert_equal Time.local(2007, 1, 20, 12), time
534
578
  end
535
-
579
+
536
580
  def test_parse_guess_o_r_g_r
537
581
  time = parse_now("3rd month next year")
538
582
  assert_equal Time.local(2007, 3, 16, 12, 30), time
539
-
583
+
540
584
  time = parse_now("3rd thursday this september")
541
585
  assert_equal Time.local(2006, 9, 21, 12), time
542
-
586
+
543
587
  time = parse_now("4th day last week")
544
588
  assert_equal Time.local(2006, 8, 9, 12), time
545
589
  end
546
-
590
+
547
591
  def test_parse_guess_nonsense
548
592
  time = parse_now("some stupid nonsense")
549
593
  assert_equal nil, time
594
+
595
+ time = parse_now("Ham Sandwich")
596
+ assert_equal nil, time
550
597
  end
551
-
598
+
552
599
  def test_parse_span
553
600
  span = parse_now("friday", :guess => false)
554
601
  assert_equal Time.local(2006, 8, 18), span.begin
555
602
  assert_equal Time.local(2006, 8, 19), span.end
556
-
603
+
557
604
  span = parse_now("november", :guess => false)
558
605
  assert_equal Time.local(2006, 11), span.begin
559
606
  assert_equal Time.local(2006, 12), span.end
560
-
607
+
561
608
  span = Chronic.parse("weekend" , :now => @time_2006_08_16_14_00_00, :guess => false)
562
609
  assert_equal Time.local(2006, 8, 19), span.begin
563
610
  assert_equal Time.local(2006, 8, 21), span.end
564
611
  end
565
-
612
+
613
+ def test_parse_with_endian_precedence
614
+ date = '11/02/2007'
615
+
616
+ expect_for_middle_endian = Time.local(2007, 11, 2, 12)
617
+ expect_for_little_endian = Time.local(2007, 2, 11, 12)
618
+
619
+ # default precedence should be toward middle endianness
620
+ assert_equal expect_for_middle_endian, Chronic.parse(date)
621
+
622
+ assert_equal expect_for_middle_endian, Chronic.parse(date, :endian_precedence => [:middle, :little])
623
+
624
+ assert_equal expect_for_little_endian, Chronic.parse(date, :endian_precedence => [:little, :middle])
625
+ end
626
+
566
627
  def test_parse_words
567
628
  assert_equal parse_now("33 days from now"), parse_now("thirty-three days from now")
568
629
  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
630
  assert_equal parse_now("may 10th"), parse_now("may tenth")
570
631
  end
571
-
632
+
572
633
  def test_parse_only_complete_pointers
573
634
  assert_equal parse_now("eat pasty buns today at 2pm"), @time_2006_08_16_14_00_00
574
635
  assert_equal parse_now("futuristically speaking today at 2pm"), @time_2006_08_16_14_00_00
575
636
  assert_equal parse_now("meeting today at 2pm"), @time_2006_08_16_14_00_00
576
637
  end
577
-
638
+
639
+ def test_am_pm
640
+ assert_equal Time.local(2006, 8, 16), parse_now("8/16/2006 at 12am")
641
+ assert_equal Time.local(2006, 8, 16, 12), parse_now("8/16/2006 at 12pm")
642
+ end
643
+
644
+ def test_a_p
645
+ assert_equal Time.local(2006, 8, 16, 0, 15), parse_now("8/16/2006 at 12:15a")
646
+ assert_equal Time.local(2006, 8, 16, 18, 30), parse_now("8/16/2006 at 6:30p")
647
+ end
648
+
578
649
  def test_argument_validation
579
650
  assert_raise(Chronic::InvalidArgumentException) do
580
651
  time = Chronic.parse("may 27", :foo => :bar)
581
652
  end
582
-
653
+
583
654
  assert_raise(Chronic::InvalidArgumentException) do
584
655
  time = Chronic.parse("may 27", :context => :bar)
585
656
  end
586
657
  end
587
-
658
+
659
+ def test_seasons
660
+ t = parse_now("this spring", :guess => false)
661
+ assert_equal Time.local(2007, 3, 20), t.begin
662
+ assert_equal Time.local(2007, 6, 20), t.end
663
+
664
+ t = parse_now("this winter", :guess => false)
665
+ assert_equal Time.local(2006, 12, 22, 23), t.begin
666
+ assert_equal Time.local(2007, 3, 19), t.end
667
+
668
+ t = parse_now("last spring", :guess => false)
669
+ assert_equal Time.local(2006, 3, 20, 23), t.begin
670
+ assert_equal Time.local(2006, 6, 20), t.end
671
+
672
+ t = parse_now("last winter", :guess => false)
673
+ assert_equal Time.local(2005, 12, 22, 23), t.begin
674
+ assert_equal Time.local(2006, 3, 19, 23), t.end
675
+
676
+ t = parse_now("next spring", :guess => false)
677
+ assert_equal Time.local(2007, 3, 20), t.begin
678
+ assert_equal Time.local(2007, 6, 20), t.end
679
+ end
680
+
681
+ # regression
682
+
683
+ # def test_partial
684
+ # assert_equal '', parse_now("2 hours")
685
+ # end
686
+
687
+ def test_days_in_november
688
+ t1 = Chronic.parse('1st thursday in november', :now => Time.local(2007))
689
+ assert_equal Time.local(2007, 11, 1, 12), t1
690
+
691
+ t1 = Chronic.parse('1st friday in november', :now => Time.local(2007))
692
+ assert_equal Time.local(2007, 11, 2, 12), t1
693
+
694
+ t1 = Chronic.parse('1st saturday in november', :now => Time.local(2007))
695
+ assert_equal Time.local(2007, 11, 3, 12), t1
696
+
697
+ t1 = Chronic.parse('1st sunday in november', :now => Time.local(2007))
698
+ assert_equal Time.local(2007, 11, 4, 11), t1
699
+
700
+ # Chronic.debug = true
701
+ #
702
+ # t1 = Chronic.parse('1st monday in november', :now => Time.local(2007))
703
+ # assert_equal Time.local(2007, 11, 5, 11), t1
704
+ end
705
+
588
706
  private
589
707
  def parse_now(string, options={})
590
708
  Chronic.parse(string, {:now => TIME_2006_08_16_14_00_00 }.merge(options))
591
709
  end
592
- end
710
+ end