diff options
Diffstat (limited to 'test/json/json_generator_test.rb')
-rwxr-xr-x[-rw-r--r--] | test/json/json_generator_test.rb | 67 |
1 files changed, 60 insertions, 7 deletions
diff --git a/test/json/json_generator_test.rb b/test/json/json_generator_test.rb index f31b6b290e..526bb8c1fe 100644..100755 --- a/test/json/json_generator_test.rb +++ b/test/json/json_generator_test.rb @@ -1,8 +1,7 @@ #!/usr/bin/env ruby -# encoding: utf-8 # frozen_string_literal: false -require 'test_helper' +require_relative 'test_helper' class JSONGeneratorTest < Test::Unit::TestCase include JSON @@ -62,6 +61,14 @@ EOT assert_equal '666', generate(666) end + def test_dump_unenclosed_hash + assert_equal '{"a":1,"b":2}', dump(a: 1, b: 2) + end + + def test_dump_strict + assert_equal '{}', dump({}, strict: true) + end + def test_generate_pretty json = pretty_generate({}) assert_equal(<<'EOT'.chomp, json) @@ -149,7 +156,8 @@ EOT :ascii_only => false, :buffer_initial_length => 1024, :depth => 0, - :escape_slash => false, + :script_safe => false, + :strict => false, :indent => " ", :max_nesting => 100, :object_nl => "\n", @@ -166,7 +174,8 @@ EOT :ascii_only => false, :buffer_initial_length => 1024, :depth => 0, - :escape_slash => false, + :script_safe => false, + :strict => false, :indent => "", :max_nesting => 100, :object_nl => "", @@ -183,7 +192,8 @@ EOT :ascii_only => false, :buffer_initial_length => 1024, :depth => 0, - :escape_slash => false, + :script_safe => false, + :strict => false, :indent => "", :max_nesting => 0, :object_nl => "", @@ -233,7 +243,7 @@ EOT def test_gc if respond_to?(:assert_in_out_err) && !(RUBY_PLATFORM =~ /java/) - assert_in_out_err(%w[-rjson --disable-gems], <<-EOS, [], []) + assert_in_out_err(%w[-rjson], <<-EOS, [], []) bignum_too_long_to_embed_as_string = 1234567890123456789012345 expect = bignum_too_long_to_embed_as_string.to_s GC.stress = true @@ -336,7 +346,13 @@ EOT def test_json_generate assert_raise JSON::GeneratorError do - assert_equal true, generate(["\xea"]) + generate(["\xea"]) + end + end + + def test_json_generate_unsupported_types + assert_raise JSON::GeneratorError do + generate(Object.new, strict: true) end end @@ -370,6 +386,18 @@ EOT # data = [ '/' ] json = '["\/"]' + assert_equal json, generate(data, :script_safe => true) + # + data = [ "\u2028\u2029" ] + json = '["\u2028\u2029"]' + assert_equal json, generate(data, :script_safe => true) + # + data = [ "ABC \u2028 DEF \u2029 GHI" ] + json = '["ABC \u2028 DEF \u2029 GHI"]' + assert_equal json, generate(data, :script_safe => true) + # + data = [ "/\u2028\u2029" ] + json = '["\/\u2028\u2029"]' assert_equal json, generate(data, :escape_slash => true) # data = ['"'] @@ -391,6 +419,31 @@ EOT end end + if defined?(JSON::Ext::Generator) and RUBY_PLATFORM != "java" + def test_string_ext_included_calls_super + included = false + + Module.send(:alias_method, :included_orig, :included) + Module.send(:remove_method, :included) + Module.send(:define_method, :included) do |base| + included_orig(base) + included = true + end + + Class.new(String) do + include JSON::Ext::Generator::GeneratorMethods::String + end + + assert included + ensure + if Module.private_method_defined?(:included_orig) + Module.send(:remove_method, :included) if Module.method_defined?(:included) + Module.send(:alias_method, :included, :included_orig) + Module.send(:remove_method, :included_orig) + end + end + end + if defined?(Encoding) def test_nonutf8_encoding assert_equal("\"5\u{b0}\"", "5\xb0".force_encoding("iso-8859-1").to_json) |