oj 3.16.9 → 3.16.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/ext/oj/fast.c +3 -6
- data/ext/oj/mimic_json.c +3 -6
- data/ext/oj/oj.c +2 -4
- data/ext/oj/parse.c +15 -5
- data/ext/oj/parser.c +1 -1
- data/ext/oj/parser.h +2 -0
- data/ext/oj/rails.c +1 -2
- data/ext/oj/saj.c +3 -6
- data/ext/oj/scp.c +3 -6
- data/ext/oj/stream_writer.c +1 -7
- data/ext/oj/strict.c +2 -4
- data/ext/oj/string_writer.c +1 -3
- data/lib/oj/version.rb +1 -1
- metadata +3 -98
- data/test/_test_active.rb +0 -75
- data/test/_test_active_mimic.rb +0 -95
- data/test/_test_mimic_rails.rb +0 -123
- data/test/activerecord/result_test.rb +0 -31
- data/test/activesupport6/abstract_unit.rb +0 -44
- data/test/activesupport6/decoding_test.rb +0 -133
- data/test/activesupport6/encoding_test.rb +0 -542
- data/test/activesupport6/encoding_test_cases.rb +0 -98
- data/test/activesupport6/test_common.rb +0 -17
- data/test/activesupport6/test_helper.rb +0 -163
- data/test/activesupport6/time_zone_test_helpers.rb +0 -39
- data/test/activesupport7/abstract_unit.rb +0 -52
- data/test/activesupport7/decoding_test.rb +0 -125
- data/test/activesupport7/encoding_test.rb +0 -536
- data/test/activesupport7/encoding_test_cases.rb +0 -104
- data/test/activesupport7/time_zone_test_helpers.rb +0 -47
- data/test/files.rb +0 -29
- data/test/foo.rb +0 -26
- data/test/helper.rb +0 -39
- data/test/isolated/shared.rb +0 -309
- data/test/isolated/test_mimic_after.rb +0 -13
- data/test/isolated/test_mimic_alone.rb +0 -12
- data/test/isolated/test_mimic_as_json.rb +0 -45
- data/test/isolated/test_mimic_before.rb +0 -13
- data/test/isolated/test_mimic_define.rb +0 -28
- data/test/isolated/test_mimic_rails_after.rb +0 -22
- data/test/isolated/test_mimic_rails_before.rb +0 -21
- data/test/isolated/test_mimic_redefine.rb +0 -15
- data/test/json_gem/json_addition_test.rb +0 -216
- data/test/json_gem/json_common_interface_test.rb +0 -155
- data/test/json_gem/json_encoding_test.rb +0 -107
- data/test/json_gem/json_ext_parser_test.rb +0 -21
- data/test/json_gem/json_fixtures_test.rb +0 -36
- data/test/json_gem/json_generator_test.rb +0 -413
- data/test/json_gem/json_generic_object_test.rb +0 -90
- data/test/json_gem/json_parser_test.rb +0 -477
- data/test/json_gem/json_string_matching_test.rb +0 -42
- data/test/json_gem/test_helper.rb +0 -30
- data/test/mem.rb +0 -34
- data/test/perf.rb +0 -102
- data/test/perf_compat.rb +0 -128
- data/test/perf_dump.rb +0 -50
- data/test/perf_fast.rb +0 -162
- data/test/perf_file.rb +0 -62
- data/test/perf_object.rb +0 -134
- data/test/perf_once.rb +0 -59
- data/test/perf_parser.rb +0 -183
- data/test/perf_saj.rb +0 -101
- data/test/perf_scp.rb +0 -140
- data/test/perf_simple.rb +0 -289
- data/test/perf_strict.rb +0 -137
- data/test/perf_wab.rb +0 -129
- data/test/prec.rb +0 -23
- data/test/sample/change.rb +0 -13
- data/test/sample/dir.rb +0 -18
- data/test/sample/doc.rb +0 -35
- data/test/sample/file.rb +0 -47
- data/test/sample/group.rb +0 -15
- data/test/sample/hasprops.rb +0 -15
- data/test/sample/layer.rb +0 -11
- data/test/sample/line.rb +0 -20
- data/test/sample/oval.rb +0 -10
- data/test/sample/rect.rb +0 -9
- data/test/sample/shape.rb +0 -34
- data/test/sample/text.rb +0 -19
- data/test/sample.rb +0 -54
- data/test/sample_json.rb +0 -37
- data/test/test_compat.rb +0 -567
- data/test/test_custom.rb +0 -555
- data/test/test_debian.rb +0 -50
- data/test/test_fast.rb +0 -526
- data/test/test_file.rb +0 -250
- data/test/test_gc.rb +0 -60
- data/test/test_generate.rb +0 -21
- data/test/test_hash.rb +0 -39
- data/test/test_integer_range.rb +0 -72
- data/test/test_null.rb +0 -376
- data/test/test_object.rb +0 -1030
- data/test/test_parser.rb +0 -11
- data/test/test_parser_debug.rb +0 -27
- data/test/test_parser_saj.rb +0 -337
- data/test/test_parser_usual.rb +0 -255
- data/test/test_rails.rb +0 -35
- data/test/test_saj.rb +0 -188
- data/test/test_scp.rb +0 -431
- data/test/test_strict.rb +0 -441
- data/test/test_various.rb +0 -801
- data/test/test_wab.rb +0 -311
- data/test/test_writer.rb +0 -396
- data/test/tests.rb +0 -33
- data/test/tests_mimic.rb +0 -23
- data/test/tests_mimic_addition.rb +0 -16
@@ -1,163 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
gem "minitest" # make sure we get the gem, not stdlib
|
4
|
-
require "minitest"
|
5
|
-
require "active_support/testing/tagged_logging"
|
6
|
-
require "active_support/testing/setup_and_teardown"
|
7
|
-
require "active_support/testing/assertions"
|
8
|
-
require "active_support/testing/deprecation"
|
9
|
-
require "active_support/testing/declarative"
|
10
|
-
require "active_support/testing/isolation"
|
11
|
-
require "active_support/testing/constant_lookup"
|
12
|
-
require "active_support/testing/time_helpers"
|
13
|
-
require "active_support/testing/file_fixtures"
|
14
|
-
require "active_support/testing/parallelization"
|
15
|
-
require "concurrent/utility/processor_counter"
|
16
|
-
|
17
|
-
module ActiveSupport
|
18
|
-
class TestCase < ::Minitest::Test
|
19
|
-
Assertion = Minitest::Assertion
|
20
|
-
|
21
|
-
class << self
|
22
|
-
# Sets the order in which test cases are run.
|
23
|
-
#
|
24
|
-
# ActiveSupport::TestCase.test_order = :random # => :random
|
25
|
-
#
|
26
|
-
# Valid values are:
|
27
|
-
# * +:random+ (to run tests in random order)
|
28
|
-
# * +:parallel+ (to run tests in parallel)
|
29
|
-
# * +:sorted+ (to run tests alphabetically by method name)
|
30
|
-
# * +:alpha+ (equivalent to +:sorted+)
|
31
|
-
def test_order=(new_order)
|
32
|
-
ActiveSupport.test_order = new_order
|
33
|
-
end
|
34
|
-
|
35
|
-
# Returns the order in which test cases are run.
|
36
|
-
#
|
37
|
-
# ActiveSupport::TestCase.test_order # => :random
|
38
|
-
#
|
39
|
-
# Possible values are +:random+, +:parallel+, +:alpha+, +:sorted+.
|
40
|
-
# Defaults to +:random+.
|
41
|
-
def test_order
|
42
|
-
ActiveSupport.test_order ||= :random
|
43
|
-
end
|
44
|
-
|
45
|
-
# Parallelizes the test suite.
|
46
|
-
#
|
47
|
-
# Takes a +workers+ argument that controls how many times the process
|
48
|
-
# is forked. For each process a new database will be created suffixed
|
49
|
-
# with the worker number.
|
50
|
-
#
|
51
|
-
# test-database-0
|
52
|
-
# test-database-1
|
53
|
-
#
|
54
|
-
# If <tt>ENV["PARALLEL_WORKERS"]</tt> is set the workers argument will be ignored
|
55
|
-
# and the environment variable will be used instead. This is useful for CI
|
56
|
-
# environments, or other environments where you may need more workers than
|
57
|
-
# you do for local testing.
|
58
|
-
#
|
59
|
-
# If the number of workers is set to +1+ or fewer, the tests will not be
|
60
|
-
# parallelized.
|
61
|
-
#
|
62
|
-
# If +workers+ is set to +:number_of_processors+, the number of workers will be
|
63
|
-
# set to the actual core count on the machine you are on.
|
64
|
-
#
|
65
|
-
# The default parallelization method is to fork processes. If you'd like to
|
66
|
-
# use threads instead you can pass <tt>with: :threads</tt> to the +parallelize+
|
67
|
-
# method. Note the threaded parallelization does not create multiple
|
68
|
-
# database and will not work with system tests at this time.
|
69
|
-
#
|
70
|
-
# parallelize(workers: :number_of_processors, with: :threads)
|
71
|
-
#
|
72
|
-
# The threaded parallelization uses minitest's parallel executor directly.
|
73
|
-
# The processes parallelization uses a Ruby DRb server.
|
74
|
-
def parallelize(workers: :number_of_processors, with: :processes)
|
75
|
-
workers = Concurrent.physical_processor_count if workers == :number_of_processors
|
76
|
-
workers = ENV["PARALLEL_WORKERS"].to_i if ENV["PARALLEL_WORKERS"]
|
77
|
-
|
78
|
-
return if workers <= 1
|
79
|
-
|
80
|
-
executor = case with
|
81
|
-
when :processes
|
82
|
-
Testing::Parallelization.new(workers)
|
83
|
-
when :threads
|
84
|
-
Minitest::Parallel::Executor.new(workers)
|
85
|
-
else
|
86
|
-
raise ArgumentError, "#{with} is not a supported parallelization executor."
|
87
|
-
end
|
88
|
-
|
89
|
-
self.lock_threads = false if defined?(self.lock_threads) && with == :threads
|
90
|
-
|
91
|
-
Minitest.parallel_executor = executor
|
92
|
-
|
93
|
-
parallelize_me!
|
94
|
-
end
|
95
|
-
|
96
|
-
# Set up hook for parallel testing. This can be used if you have multiple
|
97
|
-
# databases or any behavior that needs to be run after the process is forked
|
98
|
-
# but before the tests run.
|
99
|
-
#
|
100
|
-
# Note: this feature is not available with the threaded parallelization.
|
101
|
-
#
|
102
|
-
# In your +test_helper.rb+ add the following:
|
103
|
-
#
|
104
|
-
# class ActiveSupport::TestCase
|
105
|
-
# parallelize_setup do
|
106
|
-
# # create databases
|
107
|
-
# end
|
108
|
-
# end
|
109
|
-
def parallelize_setup(&block)
|
110
|
-
ActiveSupport::Testing::Parallelization.after_fork_hook do |worker|
|
111
|
-
yield worker
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
# Clean up hook for parallel testing. This can be used to drop databases
|
116
|
-
# if your app uses multiple write/read databases or other clean up before
|
117
|
-
# the tests finish. This runs before the forked process is closed.
|
118
|
-
#
|
119
|
-
# Note: this feature is not available with the threaded parallelization.
|
120
|
-
#
|
121
|
-
# In your +test_helper.rb+ add the following:
|
122
|
-
#
|
123
|
-
# class ActiveSupport::TestCase
|
124
|
-
# parallelize_teardown do
|
125
|
-
# # drop databases
|
126
|
-
# end
|
127
|
-
# end
|
128
|
-
def parallelize_teardown(&block)
|
129
|
-
ActiveSupport::Testing::Parallelization.run_cleanup_hook do |worker|
|
130
|
-
yield worker
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
alias_method :method_name, :name
|
136
|
-
|
137
|
-
include ActiveSupport::Testing::TaggedLogging
|
138
|
-
prepend ActiveSupport::Testing::SetupAndTeardown
|
139
|
-
include ActiveSupport::Testing::Assertions
|
140
|
-
include ActiveSupport::Testing::Deprecation
|
141
|
-
include ActiveSupport::Testing::TimeHelpers
|
142
|
-
include ActiveSupport::Testing::FileFixtures
|
143
|
-
extend ActiveSupport::Testing::Declarative
|
144
|
-
|
145
|
-
# test/unit backwards compatibility methods
|
146
|
-
alias :assert_raise :assert_raises
|
147
|
-
alias :assert_not_empty :refute_empty
|
148
|
-
alias :assert_not_equal :refute_equal
|
149
|
-
alias :assert_not_in_delta :refute_in_delta
|
150
|
-
alias :assert_not_in_epsilon :refute_in_epsilon
|
151
|
-
alias :assert_not_includes :refute_includes
|
152
|
-
alias :assert_not_instance_of :refute_instance_of
|
153
|
-
alias :assert_not_kind_of :refute_kind_of
|
154
|
-
alias :assert_no_match :refute_match
|
155
|
-
alias :assert_not_nil :refute_nil
|
156
|
-
alias :assert_not_operator :refute_operator
|
157
|
-
alias :assert_not_predicate :refute_predicate
|
158
|
-
alias :assert_not_respond_to :refute_respond_to
|
159
|
-
alias :assert_not_same :refute_same
|
160
|
-
|
161
|
-
ActiveSupport.run_load_hooks(:active_support_test_case, self)
|
162
|
-
end
|
163
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module TimeZoneTestHelpers
|
4
|
-
def with_tz_default(tz = nil)
|
5
|
-
old_tz = Time.zone
|
6
|
-
Time.zone = tz
|
7
|
-
yield
|
8
|
-
ensure
|
9
|
-
Time.zone = old_tz
|
10
|
-
end
|
11
|
-
|
12
|
-
def with_env_tz(new_tz = "US/Eastern")
|
13
|
-
old_tz, ENV["TZ"] = ENV["TZ"], new_tz
|
14
|
-
yield
|
15
|
-
ensure
|
16
|
-
old_tz ? ENV["TZ"] = old_tz : ENV.delete("TZ")
|
17
|
-
end
|
18
|
-
|
19
|
-
def with_preserve_timezone(value)
|
20
|
-
old_preserve_tz = ActiveSupport.to_time_preserves_timezone
|
21
|
-
ActiveSupport.to_time_preserves_timezone = value
|
22
|
-
yield
|
23
|
-
ensure
|
24
|
-
ActiveSupport.to_time_preserves_timezone = old_preserve_tz
|
25
|
-
end
|
26
|
-
|
27
|
-
def with_tz_mappings(mappings)
|
28
|
-
old_mappings = ActiveSupport::TimeZone::MAPPING.dup
|
29
|
-
ActiveSupport::TimeZone.clear
|
30
|
-
ActiveSupport::TimeZone::MAPPING.clear
|
31
|
-
ActiveSupport::TimeZone::MAPPING.merge!(mappings)
|
32
|
-
|
33
|
-
yield
|
34
|
-
ensure
|
35
|
-
ActiveSupport::TimeZone.clear
|
36
|
-
ActiveSupport::TimeZone::MAPPING.clear
|
37
|
-
ActiveSupport::TimeZone::MAPPING.merge!(old_mappings)
|
38
|
-
end
|
39
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
ORIG_ARGV = ARGV.dup
|
4
|
-
|
5
|
-
require "bundler/setup"
|
6
|
-
require "active_support/core_ext/kernel/reporting"
|
7
|
-
|
8
|
-
silence_warnings do
|
9
|
-
Encoding.default_internal = Encoding::UTF_8
|
10
|
-
Encoding.default_external = Encoding::UTF_8
|
11
|
-
end
|
12
|
-
|
13
|
-
require "active_support/testing/autorun"
|
14
|
-
require "active_support/testing/method_call_assertions"
|
15
|
-
|
16
|
-
ENV["NO_RELOAD"] = "1"
|
17
|
-
require "active_support"
|
18
|
-
|
19
|
-
Thread.abort_on_exception = true
|
20
|
-
|
21
|
-
# Show backtraces for deprecated behavior for quicker cleanup.
|
22
|
-
if ActiveSupport::Deprecation.respond_to?(:debug)
|
23
|
-
# Rails 7.2 does not have ActiveSupport::Deprecation.debug
|
24
|
-
ActiveSupport::Deprecation.debug = true
|
25
|
-
end
|
26
|
-
|
27
|
-
# Default to old to_time behavior but allow running tests with new behavior
|
28
|
-
ActiveSupport.to_time_preserves_timezone = ENV["PRESERVE_TIMEZONES"] == "1"
|
29
|
-
|
30
|
-
# Disable available locale checks to avoid warnings running the test suite.
|
31
|
-
I18n.enforce_available_locales = false
|
32
|
-
|
33
|
-
class ActiveSupport::TestCase
|
34
|
-
if Process.respond_to?(:fork) && !Gem.win_platform?
|
35
|
-
parallelize
|
36
|
-
else
|
37
|
-
parallelize(with: :threads)
|
38
|
-
end
|
39
|
-
|
40
|
-
include ActiveSupport::Testing::MethodCallAssertions
|
41
|
-
|
42
|
-
private
|
43
|
-
# Skips the current run on Rubinius using Minitest::Assertions#skip
|
44
|
-
def rubinius_skip(message = "")
|
45
|
-
skip message if RUBY_ENGINE == "rbx"
|
46
|
-
end
|
47
|
-
|
48
|
-
# Skips the current run on JRuby using Minitest::Assertions#skip
|
49
|
-
def jruby_skip(message = "")
|
50
|
-
skip message if defined?(JRUBY_VERSION)
|
51
|
-
end
|
52
|
-
end
|
@@ -1,125 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "abstract_unit"
|
4
|
-
require "active_support/json"
|
5
|
-
require "active_support/time"
|
6
|
-
require_relative "time_zone_test_helpers"
|
7
|
-
|
8
|
-
class TestJSONDecoding < ActiveSupport::TestCase
|
9
|
-
include TimeZoneTestHelpers
|
10
|
-
|
11
|
-
class Foo
|
12
|
-
def self.json_create(object)
|
13
|
-
"Foo"
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
TESTS = {
|
18
|
-
%q({"returnTo":{"\/categories":"\/"}}) => { "returnTo" => { "/categories" => "/" } },
|
19
|
-
%q({"return\\"To\\":":{"\/categories":"\/"}}) => { "return\"To\":" => { "/categories" => "/" } },
|
20
|
-
%q({"returnTo":{"\/categories":1}}) => { "returnTo" => { "/categories" => 1 } },
|
21
|
-
%({"returnTo":[1,"a"]}) => { "returnTo" => [1, "a"] },
|
22
|
-
%({"returnTo":[1,"\\"a\\",", "b"]}) => { "returnTo" => [1, "\"a\",", "b"] },
|
23
|
-
%({"a": "'", "b": "5,000"}) => { "a" => "'", "b" => "5,000" },
|
24
|
-
%({"a": "a's, b's and c's", "b": "5,000"}) => { "a" => "a's, b's and c's", "b" => "5,000" },
|
25
|
-
# multibyte
|
26
|
-
%({"matzue": "松江", "asakusa": "浅草"}) => { "matzue" => "松江", "asakusa" => "浅草" },
|
27
|
-
%({"a": "2007-01-01"}) => { "a" => Date.new(2007, 1, 1) },
|
28
|
-
%({"a": "2007-01-01 01:12:34 Z"}) => { "a" => Time.utc(2007, 1, 1, 1, 12, 34) },
|
29
|
-
%(["2007-01-01 01:12:34 Z"]) => [Time.utc(2007, 1, 1, 1, 12, 34)],
|
30
|
-
%(["2007-01-01 01:12:34 Z", "2007-01-01 01:12:35 Z"]) => [Time.utc(2007, 1, 1, 1, 12, 34), Time.utc(2007, 1, 1, 1, 12, 35)],
|
31
|
-
# no time zone
|
32
|
-
%({"a": "2007-01-01 01:12:34"}) => { "a" => Time.new(2007, 1, 1, 1, 12, 34, "-05:00") },
|
33
|
-
# invalid date
|
34
|
-
%({"a": "1089-10-40"}) => { "a" => "1089-10-40" },
|
35
|
-
# xmlschema date notation
|
36
|
-
%({"a": "2009-08-10T19:01:02"}) => { "a" => Time.new(2009, 8, 10, 19, 1, 2, "-04:00") },
|
37
|
-
%({"a": "2009-08-10T19:01:02Z"}) => { "a" => Time.utc(2009, 8, 10, 19, 1, 2) },
|
38
|
-
%({"a": "2009-08-10T19:01:02+02:00"}) => { "a" => Time.utc(2009, 8, 10, 17, 1, 2) },
|
39
|
-
%({"a": "2009-08-10T19:01:02-05:00"}) => { "a" => Time.utc(2009, 8, 11, 00, 1, 2) },
|
40
|
-
# needs to be *exact*
|
41
|
-
%({"a": " 2007-01-01 01:12:34 Z "}) => { "a" => " 2007-01-01 01:12:34 Z " },
|
42
|
-
%({"a": "2007-01-01 : it's your birthday"}) => { "a" => "2007-01-01 : it's your birthday" },
|
43
|
-
%({"a": "Today is:\\n2020-05-21"}) => { "a" => "Today is:\n2020-05-21" },
|
44
|
-
%({"a": "2007-01-01 01:12:34 Z\\nwas my birthday"}) => { "a" => "2007-01-01 01:12:34 Z\nwas my birthday" },
|
45
|
-
%([]) => [],
|
46
|
-
%({}) => {},
|
47
|
-
%({"a":1}) => { "a" => 1 },
|
48
|
-
%({"a": ""}) => { "a" => "" },
|
49
|
-
%({"a":"\\""}) => { "a" => "\"" },
|
50
|
-
%({"a": null}) => { "a" => nil },
|
51
|
-
%({"a": true}) => { "a" => true },
|
52
|
-
%({"a": false}) => { "a" => false },
|
53
|
-
'{"bad":"\\\\","trailing":""}' => { "bad" => "\\", "trailing" => "" },
|
54
|
-
%q({"a": "http:\/\/test.host\/posts\/1"}) => { "a" => "http://test.host/posts/1" },
|
55
|
-
%q({"a": "\u003cunicode\u0020escape\u003e"}) => { "a" => "<unicode escape>" },
|
56
|
-
'{"a": "\\\\u0020skip double backslashes"}' => { "a" => "\\u0020skip double backslashes" },
|
57
|
-
%q({"a": "\u003cbr /\u003e"}) => { "a" => "<br />" },
|
58
|
-
%q({"b":["\u003ci\u003e","\u003cb\u003e","\u003cu\u003e"]}) => { "b" => ["<i>", "<b>", "<u>"] },
|
59
|
-
# test combination of dates and escaped or unicode encoded data in arrays
|
60
|
-
%q([{"d":"1970-01-01", "s":"\u0020escape"},{"d":"1970-01-01", "s":"\u0020escape"}]) =>
|
61
|
-
[{ "d" => Date.new(1970, 1, 1), "s" => " escape" }, { "d" => Date.new(1970, 1, 1), "s" => " escape" }],
|
62
|
-
%q([{"d":"1970-01-01","s":"http:\/\/example.com"},{"d":"1970-01-01","s":"http:\/\/example.com"}]) =>
|
63
|
-
[{ "d" => Date.new(1970, 1, 1), "s" => "http://example.com" },
|
64
|
-
{ "d" => Date.new(1970, 1, 1), "s" => "http://example.com" }],
|
65
|
-
# tests escaping of "\n" char with Yaml backend
|
66
|
-
%q({"a":"\n"}) => { "a" => "\n" },
|
67
|
-
%q({"a":"\u000a"}) => { "a" => "\n" },
|
68
|
-
%q({"a":"Line1\u000aLine2"}) => { "a" => "Line1\nLine2" },
|
69
|
-
# prevent json unmarshalling
|
70
|
-
'{"json_class":"TestJSONDecoding::Foo"}' => { "json_class" => "TestJSONDecoding::Foo" },
|
71
|
-
# json "fragments" - these are invalid JSON, but ActionPack relies on this
|
72
|
-
'"a string"' => "a string",
|
73
|
-
"1.1" => 1.1,
|
74
|
-
"1" => 1,
|
75
|
-
"-1" => -1,
|
76
|
-
"true" => true,
|
77
|
-
"false" => false,
|
78
|
-
"null" => nil
|
79
|
-
}
|
80
|
-
|
81
|
-
TESTS.each_with_index do |(json, expected), index|
|
82
|
-
fail_message = "JSON decoding failed for #{json}"
|
83
|
-
|
84
|
-
test "json decodes #{index}" do
|
85
|
-
with_tz_default "Eastern Time (US & Canada)" do
|
86
|
-
with_parse_json_times(true) do
|
87
|
-
silence_warnings do
|
88
|
-
if expected.nil?
|
89
|
-
assert_nil ActiveSupport::JSON.decode(json), fail_message
|
90
|
-
else
|
91
|
-
assert_equal expected, ActiveSupport::JSON.decode(json), fail_message
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
test "json decodes time json with time parsing disabled" do
|
100
|
-
with_parse_json_times(false) do
|
101
|
-
expected = { "a" => "2007-01-01 01:12:34 Z" }
|
102
|
-
assert_equal expected, ActiveSupport::JSON.decode(%({"a": "2007-01-01 01:12:34 Z"}))
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
def test_failed_json_decoding
|
107
|
-
assert_raise(ActiveSupport::JSON.parse_error) { ActiveSupport::JSON.decode(%(undefined)) }
|
108
|
-
assert_raise(ActiveSupport::JSON.parse_error) { ActiveSupport::JSON.decode(%({a: 1})) }
|
109
|
-
assert_raise(ActiveSupport::JSON.parse_error) { ActiveSupport::JSON.decode(%({: 1})) }
|
110
|
-
assert_raise(ActiveSupport::JSON.parse_error) { ActiveSupport::JSON.decode(%()) }
|
111
|
-
end
|
112
|
-
|
113
|
-
def test_cannot_pass_unsupported_options
|
114
|
-
assert_raise(ArgumentError) { ActiveSupport::JSON.decode("", create_additions: true) }
|
115
|
-
end
|
116
|
-
|
117
|
-
private
|
118
|
-
def with_parse_json_times(value)
|
119
|
-
old_value = ActiveSupport.parse_json_times
|
120
|
-
ActiveSupport.parse_json_times = value
|
121
|
-
yield
|
122
|
-
ensure
|
123
|
-
ActiveSupport.parse_json_times = old_value
|
124
|
-
end
|
125
|
-
end
|