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/test_strict.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'
|
@@ -52,16 +52,16 @@ class StrictJuice < Minitest::Test
|
|
52
52
|
|
53
53
|
def test_fixnum
|
54
54
|
dump_and_load(0, false)
|
55
|
-
dump_and_load(
|
56
|
-
dump_and_load(-
|
55
|
+
dump_and_load(12_345, false)
|
56
|
+
dump_and_load(-54_321, false)
|
57
57
|
dump_and_load(1, false)
|
58
58
|
end
|
59
59
|
|
60
60
|
def test_float
|
61
61
|
dump_and_load(0.0, false)
|
62
|
-
dump_and_load(
|
62
|
+
dump_and_load(12_345.6789, false)
|
63
63
|
dump_and_load(70.35, false)
|
64
|
-
dump_and_load(-
|
64
|
+
dump_and_load(-54_321.012, false)
|
65
65
|
dump_and_load(1.7775, false)
|
66
66
|
dump_and_load(2.5024, false)
|
67
67
|
dump_and_load(2.48e16, false)
|
@@ -69,6 +69,16 @@ class StrictJuice < Minitest::Test
|
|
69
69
|
dump_and_load(-2.48e100 * 1.0e10, false)
|
70
70
|
end
|
71
71
|
|
72
|
+
def test_invalid_float
|
73
|
+
begin
|
74
|
+
Oj.load("64ecb72d29191067f91ff95b")
|
75
|
+
rescue Oj::ParseError => e
|
76
|
+
assert(e.message == "Invalid float")
|
77
|
+
return
|
78
|
+
end
|
79
|
+
assert(false, "*** expected an exception")
|
80
|
+
end
|
81
|
+
|
72
82
|
def test_nan_dump
|
73
83
|
assert_equal('null', Oj.dump(0/0.0, :nan => :null))
|
74
84
|
assert_equal('3.3e14159265358979323846', Oj.dump(0/0.0, :nan => :huge))
|
@@ -78,7 +88,7 @@ class StrictJuice < Minitest::Test
|
|
78
88
|
assert(true)
|
79
89
|
return
|
80
90
|
end
|
81
|
-
assert(false,
|
91
|
+
assert(false, '*** expected an exception')
|
82
92
|
end
|
83
93
|
|
84
94
|
def test_infinity_dump
|
@@ -90,7 +100,7 @@ class StrictJuice < Minitest::Test
|
|
90
100
|
assert(true)
|
91
101
|
return
|
92
102
|
end
|
93
|
-
assert(false,
|
103
|
+
assert(false, '*** expected an exception')
|
94
104
|
end
|
95
105
|
|
96
106
|
def test_neg_infinity_dump
|
@@ -102,7 +112,7 @@ class StrictJuice < Minitest::Test
|
|
102
112
|
assert(true)
|
103
113
|
return
|
104
114
|
end
|
105
|
-
assert(false,
|
115
|
+
assert(false, '*** expected an exception')
|
106
116
|
end
|
107
117
|
|
108
118
|
def test_string
|
@@ -115,15 +125,11 @@ class StrictJuice < Minitest::Test
|
|
115
125
|
def test_encode
|
116
126
|
opts = Oj.default_options
|
117
127
|
Oj.default_options = { :ascii_only => false }
|
118
|
-
|
119
|
-
dump_and_load("ぴーたー", false)
|
120
|
-
end
|
128
|
+
dump_and_load('ぴーたー', false)
|
121
129
|
Oj.default_options = { :ascii_only => true }
|
122
|
-
json = Oj.dump(
|
130
|
+
json = Oj.dump('ぴーたー')
|
123
131
|
assert_equal(%{"\\u3074\\u30fc\\u305f\\u30fc"}, json)
|
124
|
-
|
125
|
-
dump_and_load("ぴーたー", false)
|
126
|
-
end
|
132
|
+
dump_and_load('ぴーたー', false)
|
127
133
|
Oj.default_options = opts
|
128
134
|
end
|
129
135
|
|
@@ -152,17 +158,17 @@ class StrictJuice < Minitest::Test
|
|
152
158
|
end
|
153
159
|
|
154
160
|
def test_array_deep
|
155
|
-
dump_and_load([1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,[15,[16,[17,[18,[19,[20]]]]]]]]]]]]]]]]]]]], false)
|
161
|
+
dump_and_load([1, [2, [3, [4, [5, [6, [7, [8, [9, [10, [11, [12, [13, [14, [15, [16, [17, [18, [19, [20]]]]]]]]]]]]]]]]]]]], false)
|
156
162
|
end
|
157
163
|
|
158
164
|
def test_deep_nest
|
159
165
|
skip 'TruffleRuby causes SEGV' if RUBY_ENGINE == 'truffleruby'
|
160
166
|
|
161
167
|
begin
|
162
|
-
n =
|
163
|
-
Oj.strict_load('[' * n + ']' * n)
|
168
|
+
n = 10_000
|
169
|
+
Oj.strict_load(('[' * n) + (']' * n))
|
164
170
|
rescue Exception => e
|
165
|
-
|
171
|
+
refute(e.message)
|
166
172
|
end
|
167
173
|
end
|
168
174
|
|
@@ -209,7 +215,7 @@ class StrictJuice < Minitest::Test
|
|
209
215
|
assert(true)
|
210
216
|
return
|
211
217
|
end
|
212
|
-
assert(false,
|
218
|
+
assert(false, '*** expected an exception')
|
213
219
|
end
|
214
220
|
|
215
221
|
def test_bignum_object
|
@@ -238,7 +244,7 @@ class StrictJuice < Minitest::Test
|
|
238
244
|
assert(true)
|
239
245
|
return
|
240
246
|
end
|
241
|
-
assert(false,
|
247
|
+
assert(false, '*** expected an exception')
|
242
248
|
end
|
243
249
|
|
244
250
|
def test_range
|
@@ -248,7 +254,7 @@ class StrictJuice < Minitest::Test
|
|
248
254
|
assert(true)
|
249
255
|
return
|
250
256
|
end
|
251
|
-
assert(false,
|
257
|
+
assert(false, '*** expected an exception')
|
252
258
|
end
|
253
259
|
|
254
260
|
# Stream IO
|
@@ -265,13 +271,13 @@ class StrictJuice < Minitest::Test
|
|
265
271
|
end
|
266
272
|
|
267
273
|
def test_io_file
|
268
|
-
filename = File.join(
|
269
|
-
File.
|
274
|
+
filename = File.join(__dir__, 'open_file_test.json')
|
275
|
+
File.write(filename, %{{
|
270
276
|
"x":true,
|
271
277
|
"y":58,
|
272
278
|
"z": [1,2,3]
|
273
279
|
}
|
274
|
-
})
|
280
|
+
})
|
275
281
|
f = File.new(filename)
|
276
282
|
obj = Oj.strict_load(f)
|
277
283
|
f.close()
|
@@ -291,7 +297,7 @@ class StrictJuice < Minitest::Test
|
|
291
297
|
assert(true)
|
292
298
|
return
|
293
299
|
end
|
294
|
-
assert(false,
|
300
|
+
assert(false, '*** expected an exception')
|
295
301
|
end
|
296
302
|
|
297
303
|
def test_class
|
@@ -301,7 +307,7 @@ class StrictJuice < Minitest::Test
|
|
301
307
|
assert(true)
|
302
308
|
return
|
303
309
|
end
|
304
|
-
assert(false,
|
310
|
+
assert(false, '*** expected an exception')
|
305
311
|
end
|
306
312
|
|
307
313
|
def test_module
|
@@ -311,7 +317,7 @@ class StrictJuice < Minitest::Test
|
|
311
317
|
assert(true)
|
312
318
|
return
|
313
319
|
end
|
314
|
-
assert(false,
|
320
|
+
assert(false, '*** expected an exception')
|
315
321
|
end
|
316
322
|
|
317
323
|
# symbol_keys option
|
@@ -423,7 +429,7 @@ class StrictJuice < Minitest::Test
|
|
423
429
|
def dump_and_load(obj, trace=false)
|
424
430
|
json = Oj.dump(obj, :indent => 2)
|
425
431
|
puts json if trace
|
426
|
-
loaded = Oj.strict_load(json)
|
432
|
+
loaded = Oj.strict_load(json)
|
427
433
|
if obj.nil?
|
428
434
|
assert_nil(loaded)
|
429
435
|
else
|