aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/column_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/test/cases/column_test.rb')
-rw-r--r--activerecord/test/cases/column_test.rb56
1 files changed, 46 insertions, 10 deletions
diff --git a/activerecord/test/cases/column_test.rb b/activerecord/test/cases/column_test.rb
index 2a6d8cc2ab..c2135d75da 100644
--- a/activerecord/test/cases/column_test.rb
+++ b/activerecord/test/cases/column_test.rb
@@ -5,7 +5,7 @@ module ActiveRecord
module ConnectionAdapters
class ColumnTest < ActiveRecord::TestCase
def test_type_cast_boolean
- column = Column.new("field", nil, "boolean")
+ column = Column.new("field", nil, Type::Value.new, "boolean")
assert column.type_cast('').nil?
assert column.type_cast(nil).nil?
@@ -35,8 +35,15 @@ module ActiveRecord
assert_equal false, column.type_cast('SOMETHING RANDOM')
end
+ def test_type_cast_string
+ column = Column.new("field", nil, Type::Value.new, "varchar")
+ assert_equal "1", column.type_cast(true)
+ assert_equal "0", column.type_cast(false)
+ assert_equal "123", column.type_cast(123)
+ end
+
def test_type_cast_integer
- column = Column.new("field", nil, "integer")
+ column = Column.new("field", nil, Type::Value.new, "integer")
assert_equal 1, column.type_cast(1)
assert_equal 1, column.type_cast('1')
assert_equal 1, column.type_cast('1ignore')
@@ -49,31 +56,50 @@ module ActiveRecord
end
def test_type_cast_non_integer_to_integer
- column = Column.new("field", nil, "integer")
+ column = Column.new("field", nil, Type::Value.new, "integer")
assert_nil column.type_cast([1,2])
assert_nil column.type_cast({1 => 2})
assert_nil column.type_cast((1..2))
end
def test_type_cast_activerecord_to_integer
- column = Column.new("field", nil, "integer")
+ column = Column.new("field", nil, Type::Value.new, "integer")
firm = Firm.create(:name => 'Apple')
assert_nil column.type_cast(firm)
end
def test_type_cast_object_without_to_i_to_integer
- column = Column.new("field", nil, "integer")
+ column = Column.new("field", nil, Type::Value.new, "integer")
assert_nil column.type_cast(Object.new)
end
def test_type_cast_nan_and_infinity_to_integer
- column = Column.new("field", nil, "integer")
+ column = Column.new("field", nil, Type::Value.new, "integer")
assert_nil column.type_cast(Float::NAN)
assert_nil column.type_cast(1.0/0.0)
end
+ def test_type_cast_float
+ column = Column.new("field", nil, Type::Value.new, "float")
+ assert_equal 1.0, column.type_cast("1")
+ end
+
+ def test_type_cast_decimal
+ column = Column.new("field", nil, Type::Value.new, "decimal")
+ assert_equal BigDecimal.new("0"), column.type_cast(BigDecimal.new("0"))
+ assert_equal BigDecimal.new("123"), column.type_cast(123.0)
+ assert_equal BigDecimal.new("1"), column.type_cast(:"1")
+ end
+
+ def test_type_cast_binary
+ column = Column.new("field", nil, Type::Value.new, "binary")
+ assert_equal nil, column.type_cast(nil)
+ assert_equal "1", column.type_cast("1")
+ assert_equal 1, column.type_cast(1)
+ end
+
def test_type_cast_time
- column = Column.new("field", nil, "time")
+ column = Column.new("field", nil, Type::Value.new, "time")
assert_equal nil, column.type_cast(nil)
assert_equal nil, column.type_cast('')
assert_equal nil, column.type_cast('ABC')
@@ -83,7 +109,7 @@ module ActiveRecord
end
def test_type_cast_datetime_and_timestamp
- [Column.new("field", nil, "datetime"), Column.new("field", nil, "timestamp")].each do |column|
+ [Column.new("field", nil, Type::Value.new, "datetime"), Column.new("field", nil, Type::Value.new, "timestamp")].each do |column|
assert_equal nil, column.type_cast(nil)
assert_equal nil, column.type_cast('')
assert_equal nil, column.type_cast(' ')
@@ -95,7 +121,7 @@ module ActiveRecord
end
def test_type_cast_date
- column = Column.new("field", nil, "date")
+ column = Column.new("field", nil, Type::Value.new, "date")
assert_equal nil, column.type_cast(nil)
assert_equal nil, column.type_cast('')
assert_equal nil, column.type_cast(' ')
@@ -106,7 +132,7 @@ module ActiveRecord
end
def test_type_cast_duration_to_integer
- column = Column.new("field", nil, "integer")
+ column = Column.new("field", nil, Type::Value.new, "integer")
assert_equal 1800, column.type_cast(30.minutes)
assert_equal 7200, column.type_cast(2.hours)
end
@@ -118,6 +144,16 @@ module ActiveRecord
end
end
end
+
+ if current_adapter?(:SQLite3Adapter)
+ def test_binary_encoding
+ column = SQLite3Column.new("field", nil, Type::Value.new, "binary")
+ utf8_string = "a string".encode(Encoding::UTF_8)
+ type_cast = column.type_cast(utf8_string)
+
+ assert_equal Encoding::ASCII_8BIT, type_cast.encoding
+ end
+ end
end
end
end