summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Frank <flori@ping.de>2016-02-25 00:13:04 +0100
committerFlorian Frank <flori@ping.de>2016-02-25 00:13:04 +0100
commitbc33e102a6b8babc38f735ce22c973bd59c4588b (patch)
treef101193f4516300cc05e8e77662244ef2959c75c
parent5fd6c4e168005c68995a97ef436725a01c42dfd9 (diff)
downloadjson-bc33e102a6b8babc38f735ce22c973bd59c4588b.tar.gz
Add missing tests
-rwxr-xr-xtests/test_json_generate.rb24
1 files changed, 24 insertions, 0 deletions
diff --git a/tests/test_json_generate.rb b/tests/test_json_generate.rb
index 8db0b78..3dea970 100755
--- a/tests/test_json_generate.rb
+++ b/tests/test_json_generate.rb
@@ -1,5 +1,6 @@
#!/usr/bin/env ruby
# encoding: utf-8
+# frozen_string_literal: false
require 'test/unit'
require File.join(File.dirname(__FILE__), 'setup_variant')
@@ -334,4 +335,27 @@ EOT
assert_equal true, JSON.generate(["\xea"])
end
end
+
+ def test_string_subclass
+ s = Class.new(String) do
+ def to_s; self; end
+ undef to_json
+ end
+ assert_nothing_raised(SystemStackError) do
+ assert_equal '[""]', JSON.generate([s.new])
+ end
+ end
+
+ if EnvUtil.gc_stress_to_class?
+ def assert_no_memory_leak(code, *rest, **opt)
+ code = "8.times {20_000.times {begin #{code}; rescue NoMemoryError; end}; GC.start}"
+ super(["-rjson/ext/generator"],
+ "GC.add_stress_to_class(JSON::Ext::Generator::State); "\
+ "#{code}", code, *rest, rss: true, limit: 1.1, **opt)
+ end
+
+ def test_no_memory_leak_allocate
+ assert_no_memory_leak("JSON::Ext::Generator::State.allocate")
+ end
+ end
end