require File.dirname(__FILE__) + '/abstract_unit'
class TypesTest < Test::Unit::TestCase
include WS
def setup
@caster = BaseTypeCaster.new
end
def test_base_types
assert_equal(:int, BaseTypes.canonical_type_name(:integer))
assert_equal(:int, BaseTypes.canonical_type_name(:fixnum))
assert_equal(Integer, BaseTypes.type_name_to_class(:bignum))
assert_equal(Date, BaseTypes.type_name_to_class(:date))
assert_equal(Time, BaseTypes.type_name_to_class(:timestamp))
assert_equal(TrueClass, BaseTypes.type_name_to_class(:bool))
assert_equal(:int, BaseTypes.class_to_type_name(Bignum))
assert_equal(:bool, BaseTypes.class_to_type_name(FalseClass))
assert_equal(Integer, BaseTypes.canonical_type_class(Fixnum))
assert_raises(TypeError) do
BaseTypes.canonical_type_name(:fake)
end
end
def test_casting
assert_equal(5, @caster.cast("5", Fixnum))
assert_equal('50.0', @caster.cast(50.0, String))
assert_equal(true, @caster.cast('true', FalseClass))
assert_equal(false, @caster.cast('false', TrueClass))
assert_equal(true, @caster.cast(1, FalseClass))
assert_equal(false, @caster.cast(0, TrueClass))
assert_raises(TypeError) do
@caster.cast('yes', FalseClass)
end
assert_equal(3.14159, @caster.cast('3.14159', Float))
now1 = Time.new
now2 = @caster.cast("#{now1}", Time)
assert_equal(now1.tv_sec, now2.tv_sec)
date1 = Date.parse('2004-01-01')
date2 = @caster.cast("#{date1}", Date)
assert_equal(date1, date2)
end
end