require 'chronic'
require 'test/unit'
class TestParsing < Test::Unit::TestCase
# Wed Aug 16 14:00:00 UTC 2006
TIME_2006_08_16_14_00_00 = Time.local(2006, 8, 16, 14, 0, 0, 0)
def setup
@time_2006_08_16_14_00_00 = TIME_2006_08_16_14_00_00
end
def test_parse_guess_dates
# rm_sd
time = parse_now("may 27")
assert_equal Time.local(2007, 5, 27, 12), time
time = parse_now("may 28", :context => :past)
assert_equal Time.local(2006, 5, 28, 12), time
time = parse_now("may 28 5pm", :context => :past)
assert_equal Time.local(2006, 5, 28, 17), time
time = parse_now("may 28 at 5pm", :context => :past)
assert_equal Time.local(2006, 5, 28, 17), time
time = parse_now("may 28 at 5:32.19pm", :context => :past)
assert_equal Time.local(2006, 5, 28, 17, 32, 19), time
# rm_sd_on
time = parse_now("5pm on may 28")
assert_equal Time.local(2007, 5, 28, 17), time
time = parse_now("5pm may 28")
assert_equal Time.local(2007, 5, 28, 17), time
time = parse_now("5 on may 28", :ambiguous_time_range => :none)
assert_equal Time.local(2007, 5, 28, 05), time
# rm_od
time = parse_now("may 27th")
assert_equal Time.local(2007, 5, 27, 12), time
time = parse_now("may 27th", :context => :past)
assert_equal Time.local(2006, 5, 27, 12), time
time = parse_now("may 27th 5:00 pm", :context => :past)
assert_equal Time.local(2006, 5, 27, 17), time
time = parse_now("may 27th at 5pm", :context => :past)
assert_equal Time.local(2006, 5, 27, 17), time
time = parse_now("may 27th at 5", :ambiguous_time_range => :none)
assert_equal Time.local(2007, 5, 27, 5), time
# rm_od_on
time = parse_now("5:00 pm may 27th", :context => :past)
assert_equal Time.local(2006, 5, 27, 17), time
time = parse_now("5pm on may 27th", :context => :past)
assert_equal Time.local(2006, 5, 27, 17), time
time = parse_now("5 on may 27th", :ambiguous_time_range => :none)
assert_equal Time.local(2007, 5, 27, 5), time
# rm_sy
time = parse_now("June 1979")
assert_equal Time.local(1979, 6, 16, 0), time
time = parse_now("dec 79")
assert_equal Time.local(1979, 12, 16, 12), time
# rm_sd_sy
time = parse_now("jan 3 2010")
assert_equal Time.local(2010, 1, 3, 12), time
time = parse_now("jan 3 2010 midnight")
assert_equal Time.local(2010, 1, 4, 0), time
time = parse_now("jan 3 2010 at midnight")
assert_equal Time.local(2010, 1, 4, 0), time
time = parse_now("jan 3 2010 at 4", :ambiguous_time_range => :none)
assert_equal Time.local(2010, 1, 3, 4), time
#time = parse_now("January 12, '00")
#assert_equal Time.local(2000, 1, 12, 12), time
time = parse_now("may 27, 1979")
assert_equal Time.local(1979, 5, 27, 12), time
time = parse_now("may 27 79")
assert_equal Time.local(1979, 5, 27, 12), time
time = parse_now("may 27 79 4:30")
assert_equal Time.local(1979, 5, 27, 16, 30), time
time = parse_now("may 27 79 at 4:30", :ambiguous_time_range => :none)
assert_equal Time.local(1979, 5, 27, 4, 30), time
# sd_rm_sy
time = parse_now("3 jan 2010")
assert_equal Time.local(2010, 1, 3, 12), time
time = parse_now("3 jan 2010 4pm")
assert_equal Time.local(2010, 1, 3, 16), time
time = parse_now("27 Oct 2006 7:30pm")
assert_equal Time.local(2006, 10, 27, 19, 30), time
# sm_sd_sy
time = parse_now("5/27/1979")
assert_equal Time.local(1979, 5, 27, 12), time
time = parse_now("5/27/1979 4am")
assert_equal Time.local(1979, 5, 27, 4), time
# sd_sm_sy
time = parse_now("27/5/1979")
assert_equal Time.local(1979, 5, 27, 12), time
time = parse_now("27/5/1979 @ 0700")
assert_equal Time.local(1979, 5, 27, 7), time
# sm_sy
time = parse_now("05/06")
assert_equal Time.local(2006, 5, 16, 12), time
time = parse_now("12/06")
assert_equal Time.local(2006, 12, 16, 12), time
time = parse_now("13/06")
assert_equal nil, time
# sy_sm_sd
time = parse_now("2000-1-1")
assert_equal Time.local(2000, 1, 1, 12), time
time = parse_now("2006-08-20")
assert_equal Time.local(2006, 8, 20, 12), time
time = parse_now("2006-08-20 7pm")
assert_equal Time.local(2006, 8, 20, 19), time
time = parse_now("2006-08-20 03:00")
assert_equal Time.local(2006, 8, 20, 3), time
time = parse_now("2006-08-20 03:30:30")
assert_equal Time.local(2006, 8, 20, 3, 30, 30), time
time = parse_now("2006-08-20 15:30:30")
assert_equal Time.local(2006, 8, 20, 15, 30, 30), time
time = parse_now("2006-08-20 15:30.30")
assert_equal Time.local(2006, 8, 20, 15, 30, 30), time
# rdn_rm_rd_rt_rtz_ry
time = parse_now("Mon Apr 02 17:00:00 PDT 2007")
assert_equal 1175558400, time.to_i
now = Time.now
time = parse_now(now.to_s)
assert_equal now.to_s, time.to_s
# rm_sd_rt
#time = parse_now("jan 5 13:00")
#assert_equal Time.local(2007, 1, 5, 13), time
# due to limitations of the Time class, these don't work
time = parse_now("may 40")
assert_equal nil, time
time = parse_now("may 27 40")
assert_equal nil, time
time = parse_now("1800-08-20")
assert_equal nil, time
end
def test_parse_guess_r
time = parse_now("friday")
assert_equal Time.local(2006, 8, 18, 12), time
time = parse_now("tue")
assert_equal Time.local(2006, 8, 22, 12), time
time = parse_now("5")
assert_equal Time.local(2006, 8, 16, 17), time
time = Chronic.parse("5", :now => Time.local(2006, 8, 16, 3, 0, 0, 0), :ambiguous_time_range => :none)
assert_equal Time.local(2006, 8, 16, 5), time
time = parse_now("13:00")
assert_equal Time.local(2006, 8, 17, 13), time
time = parse_now("13:45")
assert_equal Time.local(2006, 8, 17, 13, 45), time
time = parse_now("november")
assert_equal Time.local(2006, 11, 16), time
end
def test_parse_guess_rr
time = parse_now("friday 13:00")
assert_equal Time.local(2006, 8, 18, 13), time
time = parse_now("monday 4:00")
assert_equal Time.local(2006, 8, 21, 16), time
time = parse_now("sat 4:00", :ambiguous_time_range => :none)
assert_equal Time.local(2006, 8, 19, 4), time
time = parse_now("sunday 4:20", :ambiguous_time_range => :none)
assert_equal Time.local(2006, 8, 20, 4, 20), time
time = parse_now("4 pm")
assert_equal Time.local(2006, 8, 16, 16), time
time = parse_now("4 am", :ambiguous_time_range => :none)
assert_equal Time.local(2006, 8, 16, 4), time
time = parse_now("12 pm")
assert_equal Time.local(2006, 8, 16, 12), time
time = parse_now("12:01 pm")
assert_equal Time.local(2006, 8, 16, 12, 1), time
time = parse_now("12:01 am")
assert_equal Time.local(2006, 8, 16, 0, 1), time
time = parse_now("12 am")
assert_equal Time.local(2006, 8, 16), time
time = parse_now("4:00 in the morning")
assert_equal Time.local(2006, 8, 16, 4), time
time = parse_now("november 4")
assert_equal Time.local(2006, 11, 4, 12), time
time = parse_now("aug 24")
assert_equal Time.local(2006, 8, 24, 12), time
end
def test_parse_guess_rrr
time = parse_now("friday 1 pm")
assert_equal Time.local(2006, 8, 18, 13), time
time = parse_now("friday 11 at night")
assert_equal Time.local(2006, 8, 18, 23), time
time = parse_now("friday 11 in the evening")
assert_equal Time.local(2006, 8, 18, 23), time
time = parse_now("sunday 6am")
assert_equal Time.local(2006, 8, 20, 6), time
time = parse_now("friday evening at 7")
assert_equal Time.local(2006, 8, 18, 19), time
end
def test_parse_guess_gr
# year
time = parse_now("this year")
assert_equal Time.local(2006, 10, 24, 12, 30), time
time = parse_now("this year", :context => :past)
assert_equal Time.local(2006, 4, 24, 12, 30), time
# month
time = parse_now("this month")
assert_equal Time.local(2006, 8, 24, 12), time
time = parse_now("this month", :context => :past)
assert_equal Time.local(2006, 8, 8, 12), time
time = Chronic.parse("next month", :now => Time.local(2006, 11, 15))
assert_equal Time.local(2006, 12, 16, 12), time
# month name
time = parse_now("last november")
assert_equal Time.local(2005, 11, 16), time
# fortnight
time = parse_now("this fortnight")
assert_equal Time.local(2006, 8, 21, 19, 30), time
time = parse_now("this fortnight", :context => :past)
assert_equal Time.local(2006, 8, 14, 19), time
# week
time = parse_now("this week")
assert_equal Time.local(2006, 8, 18, 7, 30), time
time = parse_now("this week", :context => :past)
assert_equal Time.local(2006, 8, 14, 19), time
# weekend
time = parse_now("this weekend")
assert_equal Time.local(2006, 8, 20), time
time = parse_now("this weekend", :context => :past)
assert_equal Time.local(2006, 8, 13), time
time = parse_now("last weekend")
assert_equal Time.local(2006, 8, 13), time
# day
time = parse_now("this day")
assert_equal Time.local(2006, 8, 16, 19, 30), time
time = parse_now("this day", :context => :past)
assert_equal Time.local(2006, 8, 16, 7), time
time = parse_now("today")
assert_equal Time.local(2006, 8, 16, 19, 30), time
time = parse_now("yesterday")
assert_equal Time.local(2006, 8, 15, 12), time
time = parse_now("tomorrow")
assert_equal Time.local(2006, 8, 17, 12), time
# day name
time = parse_now("this tuesday")
assert_equal Time.local(2006, 8, 22, 12), time
time = parse_now("next tuesday")
assert_equal Time.local(2006, 8, 22, 12), time
time = parse_now("last tuesday")
assert_equal Time.local(2006, 8, 15, 12), time
time = parse_now("this wed")
assert_equal Time.local(2006, 8, 23, 12), time
time = parse_now("next wed")
assert_equal Time.local(2006, 8, 23, 12), time
time = parse_now("last wed")
assert_equal Time.local(2006, 8, 9, 12), time
# day portion
time = parse_now("this morning")
assert_equal Time.local(2006, 8, 16, 9), time
time = parse_now("tonight")
assert_equal Time.local(2006, 8, 16, 22), time
# minute
time = parse_now("next minute")
assert_equal Time.local(2006, 8, 16, 14, 1, 30), time
# second
time = parse_now("this second")
assert_equal Time.local(2006, 8, 16, 14), time
time = parse_now("this second", :context => :past)
assert_equal Time.local(2006, 8, 16, 14), time
time = parse_now("next second")
assert_equal Time.local(2006, 8, 16, 14, 0, 1), time
time = parse_now("last second")
assert_equal Time.local(2006, 8, 16, 13, 59, 59), time
end
def test_parse_guess_grr
time = parse_now("yesterday at 4:00")
assert_equal Time.local(2006, 8, 15, 16), time
time = parse_now("today at 9:00")
assert_equal Time.local(2006, 8, 16, 9), time
time = parse_now("today at 2100")
assert_equal Time.local(2006, 8, 16, 21), time
time = parse_now("this day at 0900")
assert_equal Time.local(2006, 8, 16, 9), time
time = parse_now("tomorrow at 0900")
assert_equal Time.local(2006, 8, 17, 9), time
time = parse_now("yesterday at 4:00", :ambiguous_time_range => :none)
assert_equal Time.local(2006, 8, 15, 4), time
time = parse_now("last friday at 4:00")
assert_equal Time.local(2006, 8, 11, 16), time
time = parse_now("next wed 4:00")
assert_equal Time.local(2006, 8, 23, 16), time
time = parse_now("yesterday afternoon")
assert_equal Time.local(2006, 8,