1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
|
require 'helper'
class TestChronic < Test::Unit::TestCase
def setup
# Wed Aug 16 14:00:00 UTC 2006
@now = Time.local(2006, 8, 16, 14, 0, 0, 0)
end
def test_pre_normalize_numerized_string
string = 'two and a half years'
assert_equal Chronic::Numerizer.numerize(string), Chronic.pre_normalize(string)
end
def test_post_normalize_am_pm_aliases
# affect wanted patterns
tokens = [Chronic::Token.new("5:00"), Chronic::Token.new("morning")]
tokens[0].tag(Chronic::RepeaterTime.new("5:00"))
tokens[1].tag(Chronic::RepeaterDayPortion.new(:morning))
assert_equal :morning, tokens[1].tags[0].type
tokens = Chronic::Handlers.dealias_and_disambiguate_times(tokens, {})
assert_equal :am, tokens[1].tags[0].type
assert_equal 2, tokens.size
# don't affect unwanted patterns
tokens = [Chronic::Token.new("friday"), Chronic::Token.new("morning")]
tokens[0].tag(Chronic::RepeaterDayName.new(:friday))
tokens[1].tag(Chronic::RepeaterDayPortion.new(:morning))
assert_equal :morning, tokens[1].tags[0].type
tokens = Chronic::Handlers.dealias_and_disambiguate_times(tokens, {})
assert_equal :morning, tokens[1].tags[0].type
assert_equal 2, tokens.size
end
def test_guess
span = Chronic::Span.new(Time.local(2006, 8, 16, 0), Time.local(2006, 8, 17, 0))
assert_equal Time.local(2006, 8, 16, 12), Chronic.guess(span)
span = Chronic::Span.new(Time.local(2006, 8, 16, 0), Time.local(2006, 8, 17, 0, 0, 1))
assert_equal Time.local(2006, 8, 16, 12), Chronic.guess(span)
span = Chronic::Span.new(Time.local(2006, 11), Time.local(2006, 12))
assert_equal Time.local(2006, 11, 16), Chronic.guess(span)
end
def test_now
Chronic.parse('now', :now => Time.local(2006, 01))
assert_equal Time.local(2006, 01), Chronic.now
Chronic.parse('now', :now => Time.local(2007, 01))
assert_equal Time.local(2007, 01), Chronic.now
end
def test_endian_definitions
# middle, little
endians = [
Chronic::Handler.new([:scalar_month, :separator_slash_or_dash, :scalar_day, :separator_slash_or_dash, :scalar_year, :separator_at?, 'time?'], :handle_sm_sd_sy),
Chronic::Handler.new([:scalar_day, :separator_slash_or_dash, :scalar_month, :separator_slash_or_dash, :scalar_year, :separator_at?, 'time?'], :handle_sd_sm_sy)
]
assert_equal endians, Chronic.definitions[:endian]
defs = Chronic.definitions(:endian_precedence => :little)
assert_equal endians.reverse, defs[:endian]
defs = Chronic.definitions(:endian_precedence => [:little, :middle])
assert_equal endians.reverse, defs[:endian]
assert_raises(ArgumentError) do
Chronic.definitions(:endian_precedence => :invalid)
end
end
def test_passing_options
assert_raises(ArgumentError) do
Chronic.parse('now', :invalid => :option)
end
assert_raises(ArgumentError) do
Chronic.parse('now', :context => :invalid_context)
end
end
def test_debug
require 'stringio'
$stdout = StringIO.new
Chronic.debug = true
Chronic.parse 'now'
assert $stdout.string.include?('this(grabber-this)')
ensure
$stdout = STDOUT
Chronic.debug = false
end
# Chronic.construct
def test_normal
assert_equal Time.local(2006, 1, 2, 0, 0, 0), Chronic.construct(2006, 1, 2, 0, 0, 0)
assert_equal Time.local(2006, 1, 2, 3, 0, 0), Chronic.construct(2006, 1, 2, 3, 0, 0)
assert_equal Time.local(2006, 1, 2, 3, 4, 0), Chronic.construct(2006, 1, 2, 3, 4, 0)
assert_equal Time.local(2006, 1, 2, 3, 4, 5), Chronic.construct(2006, 1, 2, 3, 4, 5)
end
def test_second_overflow
assert_equal Time.local(2006, 1, 1, 0, 1, 30), Chronic.construct(2006, 1, 1, 0, 0, 90)
assert_equal Time.local(2006, 1, 1, 0, 5, 0), Chronic.construct(2006, 1, 1, 0, 0, 300)
end
def test_minute_overflow
assert_equal Time.local(2006, 1, 1, 1, 30), Chronic.construct(2006, 1, 1, 0, 90)
assert_equal Time.local(2006, 1, 1, 5), Chronic.construct(2006, 1, 1, 0, 300)
end
def test_hour_overflow
assert_equal Time.local(2006, 1, 2, 12), Chronic.construct(2006, 1, 1, 36)
assert_equal Time.local(2006, 1, 7), Chronic.construct(2006, 1, 1, 144)
end
def test_day_overflow
assert_equal Time.local(2006, 2, 1), Chronic.construct(2006, 1, 32)
assert_equal Time.local(2006, 3, 5), Chronic.construct(2006, 2, 33)
assert_equal Time.local(2004, 3, 4), Chronic.construct(2004, 2, 33)
assert_equal Time.local(2000, 3, 4), Chronic.construct(2000, 2, 33)
assert_nothing_raised do
Chronic.construct(2006, 1, 56)
end
assert_raise(RuntimeError) do
Chronic.construct(2006, 1, 57)
end
end
def test_month_overflow
assert_equal Time.local(2006, 1), Chronic.construct(2005, 13)
assert_equal Time.local(2005, 12), Chronic.construct(2000, 72)
end
end
|