Merge branch 'gem'
[fuzed.git] / helloworld / vendor / gems / chronic-0.2.2 / test / test_parsing.rb
blobab3edfe6c432dac814c3d0ca5cee76a32c9401f2
1 require 'chronic'
2 require 'test/unit'
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)
7   
8   def setup
9     @time_2006_08_16_14_00_00 = TIME_2006_08_16_14_00_00
10   end
11   
12   def test_parse_guess_dates
13     # rm_sd
15     time = parse_now("may 27")
16     assert_equal Time.local(2007, 5, 27, 12), time
17     
18     time = parse_now("may 28", :context => :past)
19     assert_equal Time.local(2006, 5, 28, 12), time
20     
21     time = parse_now("may 28 5pm", :context => :past)
22     assert_equal Time.local(2006, 5, 28, 17), time
23     
24     time = parse_now("may 28 at 5pm", :context => :past)
25     assert_equal Time.local(2006, 5, 28, 17), time
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     
30     # rm_od
31     
32     time = parse_now("may 27th")
33     assert_equal Time.local(2007, 5, 27, 12), time
34     
35     time = parse_now("may 27th", :context => :past)
36     assert_equal Time.local(2006, 5, 27, 12), time
37     
38     time = parse_now("may 27th 5:00 pm", :context => :past)
39     assert_equal Time.local(2006, 5, 27, 17), time
40     
41     time = parse_now("may 27th at 5pm", :context => :past)
42     assert_equal Time.local(2006, 5, 27, 17), time
43     
44     time = parse_now("may 27th at 5", :ambiguous_time_range => :none)
45     assert_equal Time.local(2007, 5, 27, 5), time
46     
47     # rm_sy
48     
49     time = parse_now("June 1979")
50     assert_equal Time.local(1979, 6, 16, 0), time
51     
52     time = parse_now("dec 79")
53     assert_equal Time.local(1979, 12, 16, 12), time
54     
55     # rm_sd_sy
56     
57     time = parse_now("jan 3 2010")
58     assert_equal Time.local(2010, 1, 3, 12), time
59     
60     time = parse_now("jan 3 2010 midnight")
61     assert_equal Time.local(2010, 1, 4, 0), time
62     
63     time = parse_now("jan 3 2010 at midnight")
64     assert_equal Time.local(2010, 1, 4, 0), time
65     
66     time = parse_now("jan 3 2010 at 4", :ambiguous_time_range => :none)
67     assert_equal Time.local(2010, 1, 3, 4), time
68     
69     #time = parse_now("January 12, '00")
70     #assert_equal Time.local(2000, 1, 12, 12), time
71     
72     time = parse_now("may 27 79")
73     assert_equal Time.local(1979, 5, 27, 12), time
74     
75     time = parse_now("may 27 79 4:30")
76     assert_equal Time.local(1979, 5, 27, 16, 30), time
77     
78     time = parse_now("may 27 79 at 4:30", :ambiguous_time_range => :none)
79     assert_equal Time.local(1979, 5, 27, 4, 30), time
80     
81     # sd_rm_sy
83     time = parse_now("3 jan 2010")
84     assert_equal Time.local(2010, 1, 3, 12), time
85     
86     time = parse_now("3 jan 2010 4pm")
87     assert_equal Time.local(2010, 1, 3, 16), time
88     
89     # sm_sd_sy
90     
91     time = parse_now("5/27/1979")
92     assert_equal Time.local(1979, 5, 27, 12), time
93     
94     time = parse_now("5/27/1979 4am")
95     assert_equal Time.local(1979, 5, 27, 4), time
96     
97     # sd_sm_sy
98     
99     time = parse_now("27/5/1979")
100     assert_equal Time.local(1979, 5, 27, 12), time
101     
102     time = parse_now("27/5/1979 @ 0700")
103     assert_equal Time.local(1979, 5, 27, 7), time
104     
105     # sm_sy
106     
107     time = parse_now("05/06")
108     assert_equal Time.local(2006, 5, 16, 12), time
109     
110     time = parse_now("12/06")
111     assert_equal Time.local(2006, 12, 16, 12), time
112     
113     time = parse_now("13/06")
114     assert_equal nil, time
115     
116     # sy_sm_sd
117     
118     time = parse_now("2000-1-1")
119     assert_equal Time.local(2000, 1, 1, 12), time
120     
121     time = parse_now("2006-08-20")
122     assert_equal Time.local(2006, 8, 20, 12), time
123     
124     time = parse_now("2006-08-20 7pm")
125     assert_equal Time.local(2006, 8, 20, 19), time
126     
127     time = parse_now("2006-08-20 03:00")
128     assert_equal Time.local(2006, 8, 20, 3), time
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     
148     # rm_sd_rt
149     
150     #time = parse_now("jan 5 13:00")
151     #assert_equal Time.local(2007, 1, 5, 13), time
152     
153     # due to limitations of the Time class, these don't work
154     
155     time = parse_now("may 40")
156     assert_equal nil, time
157     
158     time = parse_now("may 27 40")
159     assert_equal nil, time
160     
161     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')
167   end
169   def test_parse_guess_r
170     time = parse_now("friday")
171     assert_equal Time.local(2006, 8, 18, 12), time
172     
173     time = parse_now("tue")
174     assert_equal Time.local(2006, 8, 22, 12), time
175     
176     time = parse_now("5")
177     assert_equal Time.local(2006, 8, 16, 17), time
178     
179     time = Chronic.parse("5", :now => Time.local(2006, 8, 16, 3, 0, 0, 0), :ambiguous_time_range => :none)
180     assert_equal Time.local(2006, 8, 16, 5), time
181     
182     time = parse_now("13:00")
183     assert_equal Time.local(2006, 8, 17, 13), time
184     
185     time = parse_now("13:45")
186     assert_equal Time.local(2006, 8, 17, 13, 45), time
187     
188     time = parse_now("november")
189     assert_equal Time.local(2006, 11, 16), time
190   end
191   
192   def test_parse_guess_rr
193     time = parse_now("friday 13:00")
194     assert_equal Time.local(2006, 8, 18, 13), time
195     
196     time = parse_now("monday 4:00")
197     assert_equal Time.local(2006, 8, 21, 16), time
198     
199     time = parse_now("sat 4:00", :ambiguous_time_range => :none)
200     assert_equal Time.local(2006, 8, 19, 4), time
201     
202     time = parse_now("sunday 4:20", :ambiguous_time_range => :none)
203     assert_equal Time.local(2006, 8, 20, 4, 20), time
204     
205     time = parse_now("4 pm")
206     assert_equal Time.local(2006, 8, 16, 16), time
207     
208     time = parse_now("4 am", :ambiguous_time_range => :none)
209     assert_equal Time.local(2006, 8, 16, 4), time
210     
211     time = parse_now("4:00 in the morning")
212     assert_equal Time.local(2006, 8, 16, 4), time
213     
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
219   end
220   
221   def test_parse_guess_rrr
222     time = parse_now("friday 1 pm")
223     assert_equal Time.local(2006, 8, 18, 13), time
224     
225     time = parse_now("friday 11 at night")
226     assert_equal Time.local(2006, 8, 18, 23), time
227     
228     time = parse_now("friday 11 in the evening")
229     assert_equal Time.local(2006, 8, 18, 23), time
230     
231     time = parse_now("sunday 6am")
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
236   end
237   
238   def test_parse_guess_gr
239     # year
240     
241     time = parse_now("this year")
242     assert_equal Time.local(2006, 10, 24, 12, 30), time
243     
244     time = parse_now("this year", :context => :past)
245     assert_equal Time.local(2006, 4, 24, 12, 30), time
246     
247     # month
248     
249     time = parse_now("this month")
250     assert_equal Time.local(2006, 8, 24, 12), time
251     
252     time = parse_now("this month", :context => :past)
253     assert_equal Time.local(2006, 8, 8, 12), time
254     
255     time = Chronic.parse("next month", :now => Time.local(2006, 11, 15))
256     assert_equal Time.local(2006, 12, 16, 12), time
257     
258     # month name
259     
260     time = parse_now("last november")
261     assert_equal Time.local(2005, 11, 16), time
262     
263     # fortnight
264     
265     time = parse_now("this fortnight")
266     assert_equal Time.local(2006, 8, 21, 19, 30), time
267     
268     time = parse_now("this fortnight", :context => :past)
269     assert_equal Time.local(2006, 8, 14, 19), time
270     
271     # week
272     
273     time = parse_now("this week")
274     assert_equal Time.local(2006, 8, 18, 7, 30), time
275     
276     time = parse_now("this week", :context => :past)
277     assert_equal Time.local(2006, 8, 14, 19), time
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     
290     # day
291     
292     time = parse_now("this day")
293     assert_equal Time.local(2006, 8, 16, 19, 30), time
294     
295     time = parse_now("this day", :context => :past)
296     assert_equal Time.local(2006, 8, 16, 7), time
297     
298     time = parse_now("today")
299     assert_equal Time.local(2006, 8, 16, 19, 30), time
300     
301     time = parse_now("yesterday")
302     assert_equal Time.local(2006, 8, 15, 12), time
303     
304     time = parse_now("tomorrow")
305     assert_equal Time.local(2006, 8, 17, 12), time
306     
307     # day name
308     
309     time = parse_now("this tuesday")
310     assert_equal Time.local(2006, 8, 22, 12), time
311     
312     time = parse_now("next tuesday")
313     assert_equal Time.local(2006, 8, 22, 12), time
314     
315     time = parse_now("last tuesday")
316     assert_equal Time.local(2006, 8, 15, 12), time
317     
318     time = parse_now("this wed")
319     assert_equal Time.local(2006, 8, 23, 12), time
320     
321     time = parse_now("next wed")
322     assert_equal Time.local(2006, 8, 23, 12), time
323     
324     time = parse_now("last wed")
325     assert_equal Time.local(2006, 8, 9, 12), time
326     
327     # day portion
328     
329     time = parse_now("this morning")
330     assert_equal Time.local(2006, 8, 16, 9), time
331     
332     time = parse_now("tonight")
333     assert_equal Time.local(2006, 8, 16, 22), time
334     
335     # minute
336     
337     time = parse_now("next minute")
338     assert_equal Time.local(2006, 8, 16, 14, 1, 30), time
339     
340     # second
341     
342     time = parse_now("this second")
343     assert_equal Time.local(2006, 8, 16, 14), time
344     
345     time = parse_now("this second", :context => :past)
346     assert_equal Time.local(2006, 8, 16, 14), time
347     
348     time = parse_now("next second")
349     assert_equal Time.local(2006, 8, 16, 14, 0, 1), time
350     
351     time = parse_now("last second")
352     assert_equal Time.local(2006, 8, 16, 13, 59, 59), time
353   end
354   
355   def test_parse_guess_grr    
356     time = parse_now("yesterday at 4:00")
357     assert_equal Time.local(2006, 8, 15, 16), time
358     
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)
372     assert_equal Time.local(2006, 8, 15, 4), time
373     
374     time = parse_now("last friday at 4:00")
375     assert_equal Time.local(2006, 8, 11, 16), time
376     
377     time = parse_now("next wed 4:00")
378     assert_equal Time.local(2006, 8, 23, 16), time
379     
380     time = parse_now("yesterday afternoon")
381     assert_equal Time.local(2006, 8, 15, 15), time
382     
383     time = parse_now("last week tuesday")
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
394   end
395     
396   def test_parse_guess_grrr
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")
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
414   end
415   
416   def test_parse_guess_rgr
417     time = parse_now("afternoon yesterday")
418     assert_equal Time.local(2006, 8, 15, 15), time
419     
420     time = parse_now("tuesday last week")
421     assert_equal Time.local(2006, 8, 8, 12), time
422   end
423   
424   def test_parse_guess_s_r_p
425     # past
426     
427     time = parse_now("3 years ago")
428     assert_equal Time.local(2003, 8, 16, 14), time
429     
430     time = parse_now("1 month ago")
431     assert_equal Time.local(2006, 7, 16, 14), time
432     
433     time = parse_now("1 fortnight ago")
434     assert_equal Time.local(2006, 8, 2, 14), time
435     
436     time = parse_now("2 fortnights ago")
437     assert_equal Time.local(2006, 7, 19, 14), time
438     
439     time = parse_now("3 weeks ago")
440     assert_equal Time.local(2006, 7, 26, 14), time
441     
442     time = parse_now("2 weekends ago")
443     assert_equal Time.local(2006, 8, 5), time
444     
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")
449     #assert_equal Time.local(2006, 8, 14, 12), time
450     
451     time = parse_now("5 mornings ago")
452     assert_equal Time.local(2006, 8, 12, 9), time
453     
454     time = parse_now("7 hours ago")
455     assert_equal Time.local(2006, 8, 16, 7), time
456     
457     time = parse_now("3 minutes ago")
458     assert_equal Time.local(2006, 8, 16, 13, 57), time
459     
460     time = parse_now("20 seconds before now")
461     assert_equal Time.local(2006, 8, 16, 13, 59, 40), time
463     # future
464     
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
470     
471     time = parse_now("3 fortnights hence")
472     assert_equal Time.local(2006, 9, 27, 14), time
473     
474     time = parse_now("1 week from now")
475     assert_equal Time.local(2006, 8, 23, 14, 0, 0), time
476     
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")
484     assert_equal Time.local(2006, 8, 17, 14), time
485     
486     time = parse_now("5 mornings hence")
487     assert_equal Time.local(2006, 8, 21, 9), time
488     
489     time = parse_now("1 hour from now")
490     assert_equal Time.local(2006, 8, 16, 15), time
491     
492     time = parse_now("20 minutes hence")
493     assert_equal Time.local(2006, 8, 16, 14, 20), time
494     
495     time = parse_now("20 seconds from now")
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
500   end
501   
502   def test_parse_guess_p_s_r
503     time = parse_now("in 3 hours")
504     assert_equal Time.local(2006, 8, 16, 17), time
505   end
506   
507   def test_parse_guess_s_r_p_a
508     # past
509     
510     time = parse_now("3 years ago tomorrow")
511     assert_equal Time.local(2003, 8, 17, 12), time
512     
513     time = parse_now("3 years ago this friday")
514     assert_equal Time.local(2003, 8, 18, 12), time
515     
516     time = parse_now("3 months ago saturday at 5:00 pm")
517     assert_equal Time.local(2006, 5, 19, 17), time
518     
519     time = parse_now("2 days from this second")
520     assert_equal Time.local(2006, 8, 18, 14), time
521     
522     time = parse_now("7 hours before tomorrow at midnight")
523     assert_equal Time.local(2006, 8, 17, 17), time
524     
525     # future
526   end
527   
528   def test_parse_guess_o_r_s_r
529     time = parse_now("3rd wednesday in november")
530     assert_equal Time.local(2006, 11, 15, 12), time
531     
532     time = parse_now("10th wednesday in november")
533     assert_equal nil, time
534     
535     # time = parse_now("3rd wednesday in 2007")
536     # assert_equal Time.local(2007, 1, 20, 12), time
537   end
538   
539   def test_parse_guess_o_r_g_r
540     time = parse_now("3rd month next year")
541     assert_equal Time.local(2007, 3, 16, 12, 30), time
542     
543     time = parse_now("3rd thursday this september")
544     assert_equal Time.local(2006, 9, 21, 12), time
545     
546     time = parse_now("4th day last week")
547     assert_equal Time.local(2006, 8, 9, 12), time
548   end
549   
550   def test_parse_guess_nonsense
551     time = parse_now("some stupid nonsense")
552     assert_equal nil, time
553   end
554   
555   def test_parse_span
556     span = parse_now("friday", :guess => false)
557     assert_equal Time.local(2006, 8, 18), span.begin
558     assert_equal Time.local(2006, 8, 19), span.end
559     
560     span = parse_now("november", :guess => false)
561     assert_equal Time.local(2006, 11), span.begin
562     assert_equal Time.local(2006, 12), span.end
563     
564     span = Chronic.parse("weekend" , :now => @time_2006_08_16_14_00_00, :guess => false)
565     assert_equal Time.local(2006, 8, 19), span.begin
566     assert_equal Time.local(2006, 8, 21), span.end
567   end
568   
569   def test_parse_words
570     assert_equal parse_now("33 days from now"), parse_now("thirty-three days from now")
571     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")
572     assert_equal parse_now("may 10th"), parse_now("may tenth")
573   end
574   
575   def test_parse_only_complete_pointers
576     assert_equal parse_now("eat pasty buns today at 2pm"), @time_2006_08_16_14_00_00
577     assert_equal parse_now("futuristically speaking today at 2pm"), @time_2006_08_16_14_00_00
578     assert_equal parse_now("meeting today at 2pm"), @time_2006_08_16_14_00_00
579   end
580   
581   def test_argument_validation
582     assert_raise(Chronic::InvalidArgumentException) do
583       time = Chronic.parse("may 27", :foo => :bar)
584     end
585     
586     assert_raise(Chronic::InvalidArgumentException) do
587       time = Chronic.parse("may 27", :context => :bar)
588     end
589   end
590   
591   private
592   def parse_now(string, options={})
593     Chronic.parse(string, {:now => TIME_2006_08_16_14_00_00 }.merge(options))
594   end