oj 3.13.23 → 3.16.9
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 +81 -0
- data/README.md +2 -2
- data/ext/oj/buf.h +7 -6
- data/ext/oj/cache.c +29 -26
- data/ext/oj/cache.h +3 -2
- data/ext/oj/cache8.c +10 -9
- data/ext/oj/circarray.c +7 -5
- data/ext/oj/circarray.h +2 -2
- data/ext/oj/code.c +5 -12
- data/ext/oj/code.h +2 -2
- data/ext/oj/compat.c +20 -60
- data/ext/oj/custom.c +26 -59
- data/ext/oj/debug.c +3 -9
- data/ext/oj/dump.c +103 -53
- data/ext/oj/dump.h +1 -4
- data/ext/oj/dump_compat.c +557 -592
- data/ext/oj/dump_leaf.c +3 -5
- data/ext/oj/dump_object.c +42 -48
- data/ext/oj/dump_strict.c +10 -22
- data/ext/oj/encoder.c +1 -1
- data/ext/oj/err.c +2 -13
- data/ext/oj/err.h +9 -12
- data/ext/oj/extconf.rb +16 -7
- data/ext/oj/fast.c +60 -92
- data/ext/oj/intern.c +62 -47
- data/ext/oj/intern.h +3 -7
- data/ext/oj/mem.c +318 -0
- data/ext/oj/mem.h +53 -0
- data/ext/oj/mimic_json.c +51 -32
- data/ext/oj/object.c +33 -43
- data/ext/oj/odd.c +8 -6
- data/ext/oj/odd.h +4 -4
- data/ext/oj/oj.c +243 -212
- data/ext/oj/oj.h +83 -81
- data/ext/oj/parse.c +94 -148
- data/ext/oj/parse.h +21 -24
- data/ext/oj/parser.c +80 -67
- data/ext/oj/parser.h +7 -8
- data/ext/oj/rails.c +70 -92
- data/ext/oj/reader.c +9 -14
- data/ext/oj/reader.h +4 -2
- data/ext/oj/resolve.c +3 -4
- data/ext/oj/rxclass.c +6 -5
- data/ext/oj/rxclass.h +1 -1
- data/ext/oj/saj.c +10 -9
- data/ext/oj/saj2.c +37 -49
- data/ext/oj/saj2.h +1 -1
- data/ext/oj/scp.c +3 -14
- data/ext/oj/sparse.c +22 -70
- data/ext/oj/stream_writer.c +45 -41
- data/ext/oj/strict.c +20 -52
- data/ext/oj/string_writer.c +64 -38
- data/ext/oj/trace.h +31 -4
- data/ext/oj/usual.c +125 -114
- data/ext/oj/usual.h +7 -6
- data/ext/oj/util.h +1 -1
- data/ext/oj/val_stack.c +13 -2
- data/ext/oj/val_stack.h +8 -7
- data/ext/oj/wab.c +25 -57
- data/lib/oj/active_support_helper.rb +1 -3
- data/lib/oj/bag.rb +7 -1
- data/lib/oj/easy_hash.rb +4 -5
- data/lib/oj/error.rb +0 -1
- data/lib/oj/json.rb +162 -150
- data/lib/oj/mimic.rb +7 -7
- data/lib/oj/schandler.rb +5 -4
- data/lib/oj/state.rb +8 -5
- data/lib/oj/version.rb +1 -2
- data/lib/oj.rb +2 -0
- data/pages/InstallOptions.md +20 -0
- data/pages/Options.md +4 -0
- data/test/_test_active.rb +8 -9
- data/test/_test_active_mimic.rb +7 -8
- data/test/_test_mimic_rails.rb +17 -20
- data/test/activerecord/result_test.rb +5 -6
- data/test/activesupport6/encoding_test.rb +63 -28
- data/test/activesupport7/abstract_unit.rb +4 -1
- data/test/activesupport7/encoding_test.rb +72 -22
- data/test/files.rb +15 -15
- data/test/foo.rb +18 -69
- data/test/helper.rb +5 -8
- data/test/isolated/shared.rb +3 -2
- data/test/json_gem/json_addition_test.rb +2 -2
- data/test/json_gem/json_common_interface_test.rb +8 -6
- data/test/json_gem/json_encoding_test.rb +0 -0
- data/test/json_gem/json_ext_parser_test.rb +1 -0
- data/test/json_gem/json_fixtures_test.rb +3 -2
- data/test/json_gem/json_generator_test.rb +50 -33
- data/test/json_gem/json_generic_object_test.rb +11 -11
- data/test/json_gem/json_parser_test.rb +46 -46
- data/test/json_gem/json_string_matching_test.rb +9 -9
- data/test/mem.rb +13 -12
- data/test/perf.rb +21 -26
- data/test/perf_compat.rb +31 -33
- data/test/perf_dump.rb +28 -28
- data/test/perf_fast.rb +80 -82
- data/test/perf_file.rb +27 -29
- data/test/perf_object.rb +65 -69
- data/test/perf_once.rb +12 -11
- data/test/perf_parser.rb +42 -48
- data/test/perf_saj.rb +46 -54
- data/test/perf_scp.rb +57 -69
- data/test/perf_simple.rb +41 -39
- data/test/perf_strict.rb +68 -70
- data/test/perf_wab.rb +67 -69
- data/test/prec.rb +5 -5
- data/test/sample/change.rb +0 -1
- data/test/sample/dir.rb +0 -1
- data/test/sample/doc.rb +0 -1
- data/test/sample/file.rb +0 -1
- data/test/sample/group.rb +0 -1
- data/test/sample/hasprops.rb +0 -1
- data/test/sample/layer.rb +0 -1
- data/test/sample/rect.rb +0 -1
- data/test/sample/shape.rb +0 -1
- data/test/sample/text.rb +0 -1
- data/test/sample.rb +16 -16
- data/test/sample_json.rb +8 -8
- data/test/test_compat.rb +81 -54
- data/test/test_custom.rb +63 -52
- data/test/test_debian.rb +7 -10
- data/test/test_fast.rb +86 -90
- data/test/test_file.rb +24 -29
- data/test/test_gc.rb +5 -5
- data/test/test_generate.rb +5 -5
- data/test/test_hash.rb +4 -4
- data/test/test_integer_range.rb +9 -9
- data/test/test_null.rb +20 -20
- data/test/test_object.rb +92 -87
- data/test/test_parser.rb +4 -4
- data/test/test_parser_debug.rb +5 -5
- data/test/test_parser_saj.rb +27 -25
- data/test/test_parser_usual.rb +44 -6
- data/test/test_rails.rb +2 -2
- data/test/test_saj.rb +10 -8
- data/test/test_scp.rb +35 -35
- data/test/test_strict.rb +38 -32
- data/test/test_various.rb +146 -97
- data/test/test_wab.rb +46 -44
- data/test/test_writer.rb +63 -47
- data/test/tests.rb +7 -7
- data/test/tests_mimic.rb +6 -6
- data/test/tests_mimic_addition.rb +6 -6
- metadata +46 -26
- data/test/activesupport4/decoding_test.rb +0 -108
- data/test/activesupport4/encoding_test.rb +0 -531
- data/test/activesupport4/test_helper.rb +0 -41
- data/test/activesupport5/abstract_unit.rb +0 -45
- data/test/activesupport5/decoding_test.rb +0 -133
- data/test/activesupport5/encoding_test.rb +0 -500
- data/test/activesupport5/encoding_test_cases.rb +0 -98
- data/test/activesupport5/test_helper.rb +0 -72
- data/test/activesupport5/time_zone_test_helpers.rb +0 -39
- data/test/bar.rb +0 -11
- data/test/baz.rb +0 -16
- data/test/bug.rb +0 -16
- data/test/zoo.rb +0 -13
data/test/prec.rb
CHANGED
@@ -2,21 +2,21 @@
|
|
2
2
|
|
3
3
|
require 'oj'
|
4
4
|
|
5
|
-
extras = {
|
5
|
+
extras = { 'locationLng' => -97.14690769100295 }
|
6
6
|
|
7
|
-
Oj.default_options = {float_precision: 17}
|
7
|
+
Oj.default_options = { float_precision: 17 }
|
8
8
|
|
9
9
|
encoded = Oj.dump(extras)
|
10
10
|
puts encoded
|
11
11
|
puts Oj.load(encoded)
|
12
12
|
|
13
|
-
require
|
13
|
+
require 'active_record'
|
14
14
|
|
15
15
|
Oj::Rails.set_encoder()
|
16
16
|
Oj::Rails.set_decoder()
|
17
17
|
|
18
|
-
Oj.default_options = {float_precision: 17}
|
19
|
-
# Using Oj rails encoder, gets the correct value: {
|
18
|
+
Oj.default_options = { float_precision: 17 }
|
19
|
+
# Using Oj rails encoder, gets the correct value: { 'locationLng':-97.14690769100295 }
|
20
20
|
encoded = ActiveSupport::JSON.encode(extras)
|
21
21
|
puts encoded
|
22
22
|
puts ActiveSupport::JSON.decode(encoded)
|
data/test/sample/change.rb
CHANGED
data/test/sample/dir.rb
CHANGED
data/test/sample/doc.rb
CHANGED
data/test/sample/file.rb
CHANGED
data/test/sample/group.rb
CHANGED
data/test/sample/hasprops.rb
CHANGED
data/test/sample/layer.rb
CHANGED
data/test/sample/rect.rb
CHANGED
data/test/sample/shape.rb
CHANGED
data/test/sample/text.rb
CHANGED
data/test/sample.rb
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
#!/usr/bin/env ruby -wW2
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
|
-
if $
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
if $PROGRAM_NAME == __FILE__
|
5
|
+
$LOAD_PATH << '.'
|
6
|
+
$LOAD_PATH << '..'
|
7
|
+
$LOAD_PATH << '../lib'
|
8
|
+
$LOAD_PATH << '../ext'
|
8
9
|
end
|
9
10
|
|
10
|
-
require 'pp'
|
11
11
|
require 'sample/doc'
|
12
12
|
|
13
13
|
def sample_doc(size=3)
|
14
14
|
colors = [ :black, :gray, :white, :red, :blue, :yellow, :green, :purple, :orange ]
|
15
15
|
|
16
|
-
d =
|
16
|
+
d = Sample::Doc.new('Sample')
|
17
17
|
|
18
18
|
# add some history
|
19
19
|
(0..size * 10).each do |i|
|
@@ -22,22 +22,22 @@ def sample_doc(size=3)
|
|
22
22
|
|
23
23
|
# add some layers
|
24
24
|
(1..size).each do |i|
|
25
|
-
layer =
|
25
|
+
layer = Sample::Layer.new("Layer-#{i}")
|
26
26
|
(1..size).each do |j|
|
27
|
-
g =
|
27
|
+
g = Sample::Group.new
|
28
28
|
(1..size).each do |k|
|
29
|
-
g2 =
|
30
|
-
r =
|
31
|
-
|
29
|
+
g2 = Sample::Group.new
|
30
|
+
r = Sample::Rect.new((j * 40) + 10.0, i * 10.0,
|
31
|
+
10.123456 / k, 10.0 / k, colors[(i + j + k) % colors.size])
|
32
32
|
r.add_prop(:part_of, layer.name)
|
33
33
|
g2 << r
|
34
|
-
g2 <<
|
34
|
+
g2 << Sample::Text.new("#{k} in #{j}", r.left, r.top, r.width, r.height)
|
35
35
|
g << g2
|
36
36
|
end
|
37
|
-
g2 =
|
37
|
+
g2 = Sample::Group.new
|
38
38
|
(1..size).each do |k|
|
39
|
-
o =
|
40
|
-
|
39
|
+
o = Sample::Oval.new((j * 40) + 12.0, (i * 10.0) + 2.0,
|
40
|
+
6.0 / k, 6.0 / k, colors[(i + j + k) % colors.size])
|
41
41
|
o.add_prop(:inside, true)
|
42
42
|
g << o
|
43
43
|
end
|
data/test/sample_json.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
|
-
if $
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
if $PROGRAM_NAME == __FILE__
|
5
|
+
$LOAD_PATH << '.'
|
6
|
+
$LOAD_PATH << '..'
|
7
|
+
$LOAD_PATH << '../lib'
|
8
|
+
$LOAD_PATH << '../ext'
|
8
9
|
end
|
9
10
|
|
10
|
-
require 'pp'
|
11
11
|
require 'oj'
|
12
12
|
|
13
13
|
def sample_json(size=3)
|
@@ -32,6 +32,6 @@ def sample_json(size=3)
|
|
32
32
|
container
|
33
33
|
end
|
34
34
|
|
35
|
-
if $
|
36
|
-
File.
|
35
|
+
if $PROGRAM_NAME == __FILE__
|
36
|
+
File.write('sample.json', Oj.dump(sample_json(3), :indent => 2))
|
37
37
|
end
|
data/test/test_compat.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
#
|
2
|
+
# frozen_string_literal: true
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
$LOAD_PATH << __dir__
|
5
|
+
@oj_dir = File.dirname(File.expand_path(__dir__))
|
6
6
|
%w(lib ext).each do |dir|
|
7
|
-
|
7
|
+
$LOAD_PATH << File.join(@oj_dir, dir)
|
8
8
|
end
|
9
9
|
|
10
10
|
require 'minitest'
|
@@ -29,18 +29,16 @@ class CompatJuice < Minitest::Test
|
|
29
29
|
end
|
30
30
|
alias == eql?
|
31
31
|
|
32
|
-
def to_json(*
|
33
|
-
%|{"json_class":"#{self.class
|
32
|
+
def to_json(*_a)
|
33
|
+
%|{"json_class":"#{self.class}","x":#{@x},"y":#{@y}}|
|
34
34
|
end
|
35
35
|
|
36
36
|
def self.json_create(h)
|
37
|
-
|
37
|
+
new(h['x'], h['y'])
|
38
38
|
end
|
39
39
|
end # Jeez
|
40
40
|
|
41
41
|
class Argy
|
42
|
-
def initialize()
|
43
|
-
end
|
44
42
|
|
45
43
|
def to_json(*a)
|
46
44
|
%|{"args":"#{a}"}|
|
@@ -48,10 +46,8 @@ class CompatJuice < Minitest::Test
|
|
48
46
|
end # Argy
|
49
47
|
|
50
48
|
class Stringy
|
51
|
-
def initialize()
|
52
|
-
end
|
53
49
|
|
54
|
-
def to_s
|
50
|
+
def to_s
|
55
51
|
%|[1,2]|
|
56
52
|
end
|
57
53
|
end # Stringy
|
@@ -61,20 +57,17 @@ class CompatJuice < Minitest::Test
|
|
61
57
|
module Three
|
62
58
|
class Deep
|
63
59
|
|
64
|
-
def initialize()
|
65
|
-
end
|
66
|
-
|
67
60
|
def eql?(o)
|
68
61
|
self.class == o.class
|
69
62
|
end
|
70
63
|
alias == eql?
|
71
64
|
|
72
|
-
def to_json(*
|
65
|
+
def to_json(*_a)
|
73
66
|
%|{"json_class":"#{self.class.name}"}|
|
74
67
|
end
|
75
68
|
|
76
|
-
def self.json_create(
|
77
|
-
|
69
|
+
def self.json_create(_h)
|
70
|
+
new()
|
78
71
|
end
|
79
72
|
end # Deep
|
80
73
|
end # Three
|
@@ -106,24 +99,30 @@ class CompatJuice < Minitest::Test
|
|
106
99
|
|
107
100
|
def test_fixnum
|
108
101
|
dump_and_load(0, false)
|
109
|
-
dump_and_load(
|
110
|
-
dump_and_load(-
|
102
|
+
dump_and_load(12_345, false)
|
103
|
+
dump_and_load(-54_321, false)
|
111
104
|
dump_and_load(1, false)
|
112
105
|
end
|
113
106
|
|
107
|
+
def test_fixnum_array
|
108
|
+
data = (1..1000).to_a
|
109
|
+
json = Oj.dump(data, mode: :compat)
|
110
|
+
assert_equal("[#{data.join(',')}]", json)
|
111
|
+
end
|
112
|
+
|
114
113
|
def test_float
|
115
114
|
dump_and_load(0.0, false)
|
116
115
|
dump_and_load(0.56, false)
|
117
116
|
dump_and_load(3.0, false)
|
118
|
-
dump_and_load(
|
117
|
+
dump_and_load(12_345.6789, false)
|
119
118
|
dump_and_load(70.35, false)
|
120
|
-
dump_and_load(-
|
119
|
+
dump_and_load(-54_321.012, false)
|
121
120
|
dump_and_load(1.7775, false)
|
122
121
|
dump_and_load(2.5024, false)
|
123
122
|
dump_and_load(2.48e16, false)
|
124
123
|
dump_and_load(2.48e100 * 1.0e10, false)
|
125
124
|
dump_and_load(-2.48e100 * 1.0e10, false)
|
126
|
-
dump_and_load(
|
125
|
+
dump_and_load(1_405_460_727.723866, false)
|
127
126
|
dump_and_load(0.5773, false)
|
128
127
|
dump_and_load(0.6768, false)
|
129
128
|
dump_and_load(0.685, false)
|
@@ -148,7 +147,7 @@ class CompatJuice < Minitest::Test
|
|
148
147
|
def test_encode
|
149
148
|
opts = Oj.default_options
|
150
149
|
Oj.default_options = { :ascii_only => true }
|
151
|
-
json = Oj.dump(
|
150
|
+
json = Oj.dump('ぴーたー')
|
152
151
|
assert_equal(%{"\\u3074\\u30fc\\u305f\\u30fc"}, json)
|
153
152
|
Oj.default_options = opts
|
154
153
|
end
|
@@ -170,7 +169,7 @@ class CompatJuice < Minitest::Test
|
|
170
169
|
end
|
171
170
|
|
172
171
|
def test_array_deep
|
173
|
-
dump_and_load([1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,[15,[16,[17,[18,[19,[20]]]]]]]]]]]]]]]]]]]], false)
|
172
|
+
dump_and_load([1, [2, [3, [4, [5, [6, [7, [8, [9, [10, [11, [12, [13, [14, [15, [16, [17, [18, [19, [20]]]]]]]]]]]]]]]]]]]], false)
|
174
173
|
end
|
175
174
|
|
176
175
|
def test_symbol
|
@@ -179,8 +178,8 @@ class CompatJuice < Minitest::Test
|
|
179
178
|
end
|
180
179
|
|
181
180
|
def test_time_xml_schema
|
182
|
-
t = Time.xmlschema(
|
183
|
-
#t = Time.local(2012, 1, 5, 23, 58, 7, 123456)
|
181
|
+
t = Time.xmlschema('2012-01-05T23:58:07.123456000+09:00')
|
182
|
+
# t = Time.local(2012, 1, 5, 23, 58, 7, 123456)
|
184
183
|
json = Oj.dump(t, :mode => :compat)
|
185
184
|
assert_equal(%{"2012-01-05 23:58:07 +0900"}, json)
|
186
185
|
end
|
@@ -199,8 +198,9 @@ class CompatJuice < Minitest::Test
|
|
199
198
|
def test_non_str_hash
|
200
199
|
json = Oj.dump({ 1 => true, 0 => false }, :mode => :compat)
|
201
200
|
h = Oj.load(json, :mode => :strict)
|
202
|
-
assert_equal({
|
201
|
+
assert_equal({ '1' => true, '0' => false }, h)
|
203
202
|
end
|
203
|
+
|
204
204
|
def test_hash
|
205
205
|
dump_and_load({}, false)
|
206
206
|
dump_and_load({ 'true' => true, 'false' => false}, false)
|
@@ -239,12 +239,12 @@ class CompatJuice < Minitest::Test
|
|
239
239
|
def test_invalid_escapes_handled
|
240
240
|
json = '{"subtext":"\"404er\” \w \k \3 \a"}'
|
241
241
|
obj = Oj.compat_load(json)
|
242
|
-
assert_equal({
|
242
|
+
assert_equal({'subtext' => '"404er” w k 3 a'}, obj)
|
243
243
|
end
|
244
244
|
|
245
245
|
def test_hash_escaping
|
246
246
|
json = Oj.to_json({'<>' => '<>'}, mode: :compat)
|
247
|
-
assert_equal(
|
247
|
+
assert_equal('{"<>":"<>"}', json)
|
248
248
|
end
|
249
249
|
|
250
250
|
def test_bignum_object
|
@@ -271,7 +271,7 @@ class CompatJuice < Minitest::Test
|
|
271
271
|
def test_bignum_compat
|
272
272
|
json = Oj.dump(7 ** 55, :mode => :compat)
|
273
273
|
b = Oj.load(json, :mode => :strict)
|
274
|
-
assert_equal(
|
274
|
+
assert_equal(30_226_801_971_775_055_948_247_051_683_954_096_612_865_741_943, b)
|
275
275
|
end
|
276
276
|
|
277
277
|
# BigDecimal
|
@@ -313,7 +313,7 @@ class CompatJuice < Minitest::Test
|
|
313
313
|
if x.is_a?(String)
|
314
314
|
assert_equal(orig.to_s, x)
|
315
315
|
else # better be a Hash
|
316
|
-
assert_equal({
|
316
|
+
assert_equal({'year' => orig.year, 'month' => orig.month, 'day' => orig.day, 'start' => orig.start}, x)
|
317
317
|
end
|
318
318
|
end
|
319
319
|
|
@@ -340,13 +340,13 @@ class CompatJuice < Minitest::Test
|
|
340
340
|
end
|
341
341
|
|
342
342
|
def test_io_file
|
343
|
-
filename = File.join(
|
344
|
-
File.
|
343
|
+
filename = File.join(__dir__, 'open_file_test.json')
|
344
|
+
File.write(filename, %{{
|
345
345
|
"x":true,
|
346
346
|
"y":58,
|
347
347
|
"z": [1,2,3]
|
348
348
|
}
|
349
|
-
})
|
349
|
+
})
|
350
350
|
f = File.new(filename)
|
351
351
|
obj = Oj.compat_load(f)
|
352
352
|
f.close()
|
@@ -410,7 +410,7 @@ class CompatJuice < Minitest::Test
|
|
410
410
|
|
411
411
|
# A child to_json should not be called.
|
412
412
|
def test_json_object_child
|
413
|
-
obj = {
|
413
|
+
obj = { 'child' => Jeez.new(true, 58) }
|
414
414
|
assert_equal('{"child":{"json_class":"CompatJuice::Jeez","x":true,"y":58}}', Oj.dump(obj))
|
415
415
|
end
|
416
416
|
|
@@ -431,10 +431,10 @@ class CompatJuice < Minitest::Test
|
|
431
431
|
begin
|
432
432
|
Oj.compat_load(json, :create_additions => true)
|
433
433
|
rescue Exception => e
|
434
|
-
assert_equal(
|
434
|
+
assert_equal('ArgumentError', e.class().name)
|
435
435
|
return
|
436
436
|
end
|
437
|
-
assert(false,
|
437
|
+
assert(false, '*** expected an exception')
|
438
438
|
end
|
439
439
|
|
440
440
|
def test_json_object_create_cache
|
@@ -450,7 +450,7 @@ class CompatJuice < Minitest::Test
|
|
450
450
|
expected = Jeez.new(true, 58)
|
451
451
|
json = Oj.to_json(expected)
|
452
452
|
json.gsub!('json_class', '_class_')
|
453
|
-
obj = Oj.compat_load(json, :create_id =>
|
453
|
+
obj = Oj.compat_load(json, :create_id => '_class_', :create_additions => true)
|
454
454
|
assert_equal(expected, obj)
|
455
455
|
end
|
456
456
|
|
@@ -467,8 +467,26 @@ class CompatJuice < Minitest::Test
|
|
467
467
|
end
|
468
468
|
|
469
469
|
def test_arg_passing
|
470
|
-
json = Oj.to_json(Argy.new(), :max_nesting=> 40)
|
471
|
-
|
470
|
+
json = Oj.to_json(Argy.new(), :max_nesting => 40)
|
471
|
+
assert_match(/.*max_nesting.*40.*/, json)
|
472
|
+
end
|
473
|
+
|
474
|
+
def test_max_nesting
|
475
|
+
assert_raises() { Oj.to_json([[[[[]]]]], :max_nesting => 3) }
|
476
|
+
assert_raises() { Oj.dump([[[[[]]]]], :max_nesting => 3, :mode=>:compat) }
|
477
|
+
|
478
|
+
assert_raises() { Oj.to_json([[]], :max_nesting => 1) }
|
479
|
+
assert_equal('[[]]', Oj.to_json([[]], :max_nesting => 2))
|
480
|
+
|
481
|
+
assert_raises() { Oj.dump([[]], :max_nesting => 1, :mode=>:compat) }
|
482
|
+
assert_equal('[[]]', Oj.dump([[]], :max_nesting => 2, :mode=>:compat))
|
483
|
+
|
484
|
+
assert_raises() { Oj.to_json([[3]], :max_nesting => 1) }
|
485
|
+
assert_equal('[[3]]', Oj.to_json([[3]], :max_nesting => 2))
|
486
|
+
|
487
|
+
assert_raises() { Oj.dump([[3]], :max_nesting => 1, :mode=>:compat) }
|
488
|
+
assert_equal('[[3]]', Oj.dump([[3]], :max_nesting => 2, :mode=>:compat))
|
489
|
+
|
472
490
|
end
|
473
491
|
|
474
492
|
def test_bad_unicode
|
@@ -485,38 +503,47 @@ class CompatJuice < Minitest::Test
|
|
485
503
|
|
486
504
|
def test_parse_to_s
|
487
505
|
s = Stringy.new
|
488
|
-
assert_equal([1,2], Oj.load(s, :mode => :compat))
|
506
|
+
assert_equal([1, 2], Oj.load(s, :mode => :compat))
|
489
507
|
end
|
490
508
|
|
491
509
|
def test_parse_large_string
|
492
510
|
error = assert_raises() { Oj.load(%|{"a":"aaaaaaaaaa\0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}|) }
|
493
|
-
|
511
|
+
assert_includes(error.message, 'NULL byte in string')
|
494
512
|
|
495
513
|
error = assert_raises() { Oj.load(%|{"a":"aaaaaaaaaaaaaaaaaaaa }|) }
|
496
|
-
|
514
|
+
assert_includes(error.message, 'quoted string not terminated')
|
497
515
|
|
498
516
|
json =<<~JSON
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
517
|
+
{
|
518
|
+
"a": "\\u3074\\u30fc\\u305f\\u30fc",
|
519
|
+
"b": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
520
|
+
}
|
503
521
|
JSON
|
504
|
-
assert_equal(
|
522
|
+
assert_equal('ぴーたー', Oj.load(json)['a'])
|
505
523
|
end
|
506
524
|
|
507
525
|
def test_parse_large_escaped_string
|
508
|
-
invalid_json = %|{"a"
|
526
|
+
invalid_json = %|{"a":"aaaa\\nbbbb\\rcccc\\tddd\\feee\\bf/\\\\\\u3074\\u30fc\\u305f\\u30fc }|
|
509
527
|
error = assert_raises() { Oj.load(invalid_json) }
|
510
|
-
|
528
|
+
assert_includes(error.message, 'quoted string not terminated')
|
511
529
|
|
512
|
-
json = "
|
530
|
+
json = '"aaaa\\nbbbb\\rcccc\\tddd\\feee\\bf/\\\\\\u3074\\u30fc\\u305f\\u30fc "'
|
513
531
|
assert_equal("aaaa\nbbbb\rcccc\tddd\feee\bf/\\ぴーたー ", Oj.load(json))
|
514
532
|
end
|
515
533
|
|
534
|
+
def test_invalid_to_s
|
535
|
+
obj = Object.new
|
536
|
+
def obj.to_s
|
537
|
+
nil
|
538
|
+
end
|
539
|
+
|
540
|
+
assert_raises(TypeError) { Oj.dump(obj, mode: :compat) }
|
541
|
+
end
|
542
|
+
|
516
543
|
def dump_and_load(obj, trace=false)
|
517
544
|
json = Oj.dump(obj)
|
518
545
|
puts json if trace
|
519
|
-
loaded = Oj.compat_load(json, :create_additions => true)
|
546
|
+
loaded = Oj.compat_load(json, :create_additions => true)
|
520
547
|
if obj.nil?
|
521
548
|
assert_nil(loaded)
|
522
549
|
else
|
@@ -528,7 +555,7 @@ class CompatJuice < Minitest::Test
|
|
528
555
|
def dump_to_json_and_load(obj, trace=false)
|
529
556
|
json = Oj.to_json(obj, :indent => ' ')
|
530
557
|
puts json if trace
|
531
|
-
loaded = Oj.compat_load(json, :create_additions => true)
|
558
|
+
loaded = Oj.compat_load(json, :create_additions => true)
|
532
559
|
if obj.nil?
|
533
560
|
assert_nil(loaded)
|
534
561
|
else
|