1
0
Fork 0
mirror of https://github.com/puma/puma.git synced 2022-11-09 13:48:40 -05:00
puma--puma/test/test_json_serialization.rb
Robin Wallin 0256d71e60
Rename Puma::JSON to Puma::JSONSerialization (#2640)
In the context of user-defined hooks (e.g. in `before_fork`), the previous naming had the unfortunate side-effect of causing `JSON` to resolve to `Puma::JSON` rather than, the likely more expected, `::JSON` module.

Closes #2639
2021-06-09 08:55:45 -06:00

107 lines
3 KiB
Ruby

require_relative "helper"
require "json"
require "puma/json_serialization"
class TestJSONSerialization < Minitest::Test
parallelize_me! unless JRUBY_HEAD
def test_json_generates_string_for_hash_with_string_keys
value = { "key" => "value" }
assert_puma_json_generates_string '{"key":"value"}', value
end
def test_json_generates_string_for_hash_with_symbol_keys
value = { key: 'value' }
assert_puma_json_generates_string '{"key":"value"}', value, expected_roundtrip: { "key" => "value" }
end
def test_generate_raises_error_for_unexpected_key_type
value = { [1] => 'b' }
ex = assert_raises Puma::JSONSerialization::SerializationError do
Puma::JSONSerialization.generate value
end
assert_equal 'Could not serialize object of type Array as object key', ex.message
end
def test_json_generates_string_for_array_of_integers
value = [1, 2, 3]
assert_puma_json_generates_string '[1,2,3]', value
end
def test_json_generates_string_for_array_of_strings
value = ["a", "b", "c"]
assert_puma_json_generates_string '["a","b","c"]', value
end
def test_json_generates_string_for_nested_arrays
value = [1, [2, [3]]]
assert_puma_json_generates_string '[1,[2,[3]]]', value
end
def test_json_generates_string_for_integer
value = 42
assert_puma_json_generates_string '42', value
end
def test_json_generates_string_for_float
value = 1.23
assert_puma_json_generates_string '1.23', value
end
def test_json_escapes_strings_with_quotes
value = 'a"'
assert_puma_json_generates_string '"a\""', value
end
def test_json_escapes_strings_with_backslashes
value = 'a\\'
assert_puma_json_generates_string '"a\\\\"', value
end
def test_json_escapes_strings_with_null_byte
value = "\x00"
assert_puma_json_generates_string '"\u0000"', value
end
def test_json_escapes_strings_with_unicode_information_separator_one
value = "\x1f"
assert_puma_json_generates_string '"\u001F"', value
end
def test_json_generates_string_for_true
value = true
assert_puma_json_generates_string 'true', value
end
def test_json_generates_string_for_false
value = false
assert_puma_json_generates_string 'false', value
end
def test_json_generates_string_for_nil
value = nil
assert_puma_json_generates_string 'null', value
end
def test_generate_raises_error_for_unexpected_value_type
value = /abc/
ex = assert_raises Puma::JSONSerialization::SerializationError do
Puma::JSONSerialization.generate value
end
assert_equal 'Unexpected value of type Regexp', ex.message
end
private
def assert_puma_json_generates_string(expected_output, value_to_serialize, expected_roundtrip: nil)
actual_output = Puma::JSONSerialization.generate(value_to_serialize)
assert_equal expected_output, actual_output
if value_to_serialize.nil?
assert_nil ::JSON.parse(actual_output)
else
expected_roundtrip ||= value_to_serialize
assert_equal expected_roundtrip, ::JSON.parse(actual_output)
end
end
end