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
|
# Tests type attribute coercion (boolean, integer, date, datetime, decimal, base64)
module ParserTypecastTests
def test_typecast_xml_value_true_typecasts_string_type
xml = "<global-settings><group><name>Settings</name>" \
'<setting type="string"><description>Test</description></setting></group></global-settings>'
assert_equal "", MultiXml.parse(xml)["global_settings"]["group"]["setting"]
end
def test_typecast_xml_value_false_preserves_type_attribute
xml = "<global-settings><group><name>Settings</name>" \
'<setting type="string"><description>Test</description></setting></group></global-settings>'
setting = MultiXml.parse(xml, typecast_xml_value: false)["global_settings"]["group"]["setting"]
assert_equal({"type" => "string", "description" => {"__content__" => "Test"}}, setting)
end
def test_symbolize_keys_option
xml = '<users><user name="Erik Berlin"/><user><name>Wynn Netherland</name></user></users>'
expected = {users: {user: [{name: "Erik Berlin"}, {name: "Wynn Netherland"}]}}
assert_equal expected, MultiXml.parse(xml, symbolize_keys: true)
end
def test_boolean_true_returns_true
assert MultiXml.parse('<tag type="boolean">true</tag>')["tag"]
end
def test_boolean_false_returns_false
refute MultiXml.parse('<tag type="boolean">false</tag>')["tag"]
end
def test_boolean_1_returns_true
assert MultiXml.parse('<tag type="boolean">1</tag>')["tag"]
end
def test_boolean_0_returns_false
refute MultiXml.parse('<tag type="boolean">0</tag>')["tag"]
end
def test_integer_returns_positive_integer
result = MultiXml.parse('<tag type="integer">1</tag>')["tag"]
assert_kind_of Integer, result
assert_equal 1, result
end
def test_integer_returns_negative_integer
result = MultiXml.parse('<tag type="integer">-1</tag>')["tag"]
assert_kind_of Integer, result
assert_equal(-1, result)
end
def test_string_type_returns_string
result = MultiXml.parse('<tag type="string"></tag>')["tag"]
assert_kind_of String, result
assert_equal "", result
end
def test_date_type_returns_date
result = MultiXml.parse('<tag type="date">1970-01-01</tag>')["tag"]
assert_kind_of Date, result
assert_equal Date.parse("1970-01-01"), result
end
def test_datetime_type_returns_time
result = MultiXml.parse('<tag type="datetime">1970-01-01 00:00</tag>')["tag"]
assert_kind_of Time, result
assert_equal Time.parse("1970-01-01 00:00"), result
end
def test_date_time_type_returns_time
result = MultiXml.parse('<tag type="dateTime">1970-01-01 00:00</tag>')["tag"]
assert_kind_of Time, result
assert_equal Time.parse("1970-01-01 00:00"), result
end
def test_double_type_returns_float
result = MultiXml.parse('<tag type="double">3.14159265358979</tag>')["tag"]
assert_kind_of Float, result
assert_in_delta(3.14159265358979, result)
end
def test_decimal_type_returns_bigdecimal
result = MultiXml.parse('<tag type="decimal">3.14159265358979</tag>')["tag"]
assert_kind_of BigDecimal, result
assert_in_delta(3.14159265358979, result)
end
def test_base64binary_type_returns_decoded_string
result = MultiXml.parse('<tag type="base64Binary">aW1hZ2UucG5n</tag>')["tag"]
assert_kind_of String, result
assert_equal "image.png", result
end
end
|