Files
ruby/test/json/test_helper.rb
Lucas Dohmen 7da1b1c7a0 [ruby/json] Fix Interoperability with Zlib::GzipReader
GzipReader offers both a read and to_io method. The read method returns
the uncompressed file as a string. The to_io method returns the
compressed file. The JSON.load method first tests for the to_io method
and uses it before testing for the read method. This results in reading
the compressed file, which is invalid JSON.

Instead, we now test for the read method first.

https://github.com/ruby/json/commit/b6a5d35245
2026-09-30 13:46:09 +00:00

64 lines
1.9 KiB
Ruby

$LOAD_PATH.unshift(File.expand_path('../../../ext', __FILE__), File.expand_path('../../../lib', __FILE__))
if ENV["JSON_COVERAGE"]
# This test helper is loaded inside Ruby's own test suite, so we try to not mess it up.
require 'coverage'
branches_supported = Coverage.respond_to?(:supported?) && Coverage.supported?(:branches)
# Coverage module must be started before SimpleCov to work around the cyclic require order.
# Track both branches and lines, or else SimpleCov misleadingly reports 0/0 = 100% for non-branching files.
Coverage.start(lines: true,
branches: branches_supported)
require 'simplecov'
SimpleCov.start do
# Enabling both coverage types to let SimpleCov know to output them together in reports
enable_coverage :line
enable_coverage :branch if branches_supported
# Can't always trust SimpleCov to find files implicitly
track_files 'lib/**/*.rb'
add_filter 'lib/json/truffle_ruby' unless RUBY_ENGINE == 'truffleruby'
add_filter 'test/'
coverage_dir '.coverage'
end
end
require 'json'
require 'test/unit'
require 'stringio'
require 'tempfile'
require 'zlib'
begin
require 'bigdecimal'
rescue LoadError
end
if ENV["JSON_COMPACT"]
if GC.respond_to?(:verify_compaction_references)
# This method was added in Ruby 3.0.0. Calling it this way asks the GC to
# move objects around, helping to find object movement bugs.
begin
GC.verify_compaction_references(expand_heap: true, toward: :empty)
rescue NotImplementedError, ArgumentError
# Some platforms don't support compaction
end
end
if GC.respond_to?(:auto_compact=)
begin
GC.auto_compact = true
rescue NotImplementedError
# Some platforms don't support compaction
end
end
end
unless defined?(Test::Unit::CoreAssertions)
require "core_assertions"
Test::Unit::TestCase.include Test::Unit::CoreAssertions
end