oj 3.13.17 → 3.16.3
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 +77 -0
- data/README.md +4 -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 +44 -96
- data/ext/oj/debug.c +3 -9
- data/ext/oj/dump.c +69 -39
- 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 -6
- data/ext/oj/fast.c +76 -106
- data/ext/oj/intern.c +63 -51
- 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 +43 -30
- data/ext/oj/object.c +61 -70
- data/ext/oj/odd.c +8 -6
- data/ext/oj/odd.h +4 -4
- data/ext/oj/oj.c +243 -205
- data/ext/oj/oj.h +82 -78
- data/ext/oj/parse.c +123 -188
- data/ext/oj/parse.h +23 -24
- data/ext/oj/parser.c +103 -63
- data/ext/oj/parser.h +19 -9
- data/ext/oj/rails.c +68 -92
- data/ext/oj/reader.c +10 -15
- 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 +74 -92
- data/ext/oj/saj2.h +23 -0
- data/ext/oj/scp.c +3 -14
- data/ext/oj/sparse.c +22 -70
- data/ext/oj/stream_writer.c +43 -35
- data/ext/oj/strict.c +20 -52
- data/ext/oj/string_writer.c +60 -34
- data/ext/oj/trace.h +31 -4
- data/ext/oj/usual.c +125 -150
- data/ext/oj/usual.h +69 -0
- data/ext/oj/util.h +1 -1
- data/ext/oj/val_stack.c +14 -3
- 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 +6 -2
- data/lib/oj/state.rb +9 -6
- data/lib/oj/version.rb +1 -2
- data/lib/oj.rb +2 -0
- data/pages/Compatibility.md +1 -1
- data/pages/InstallOptions.md +20 -0
- data/pages/Options.md +10 -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/files.rb +15 -15
- data/test/foo.rb +9 -72
- data/test/helper.rb +11 -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 +53 -37
- data/test/json_gem/json_generic_object_test.rb +11 -11
- data/test/json_gem/json_parser_test.rb +47 -47
- data/test/json_gem/json_string_matching_test.rb +9 -9
- data/test/json_gem/test_helper.rb +7 -3
- 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 +80 -53
- data/test/test_custom.rb +73 -51
- data/test/test_debian.rb +7 -10
- data/test/test_fast.rb +86 -90
- data/test/test_file.rb +28 -35
- data/test/test_gc.rb +16 -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 +94 -96
- data/test/test_parser.rb +6 -22
- data/test/test_parser_debug.rb +27 -0
- data/test/test_parser_saj.rb +61 -22
- data/test/test_parser_usual.rb +16 -6
- data/test/test_rails.rb +2 -2
- data/test/test_saj.rb +10 -8
- data/test/test_scp.rb +37 -39
- data/test/test_strict.rb +40 -32
- data/test/test_various.rb +148 -100
- data/test/test_wab.rb +48 -44
- data/test/test_writer.rb +47 -47
- data/test/tests.rb +13 -4
- data/test/tests_mimic.rb +12 -3
- data/test/tests_mimic_addition.rb +12 -3
- metadata +36 -27
- 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,15 +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
|
165
|
+
skip 'TruffleRuby causes SEGV' if RUBY_ENGINE == 'truffleruby'
|
166
|
+
|
159
167
|
begin
|
160
|
-
n =
|
161
|
-
Oj.strict_load('[' * n + ']' * n)
|
168
|
+
n = 10_000
|
169
|
+
Oj.strict_load(('[' * n) + (']' * n))
|
162
170
|
rescue Exception => e
|
163
|
-
|
171
|
+
refute(e.message)
|
164
172
|
end
|
165
173
|
end
|
166
174
|
|
@@ -207,7 +215,7 @@ class StrictJuice < Minitest::Test
|
|
207
215
|
assert(true)
|
208
216
|
return
|
209
217
|
end
|
210
|
-
assert(false,
|
218
|
+
assert(false, '*** expected an exception')
|
211
219
|
end
|
212
220
|
|
213
221
|
def test_bignum_object
|
@@ -236,7 +244,7 @@ class StrictJuice < Minitest::Test
|
|
236
244
|
assert(true)
|
237
245
|
return
|
238
246
|
end
|
239
|
-
assert(false,
|
247
|
+
assert(false, '*** expected an exception')
|
240
248
|
end
|
241
249
|
|
242
250
|
def test_range
|
@@ -246,7 +254,7 @@ class StrictJuice < Minitest::Test
|
|
246
254
|
assert(true)
|
247
255
|
return
|
248
256
|
end
|
249
|
-
assert(false,
|
257
|
+
assert(false, '*** expected an exception')
|
250
258
|
end
|
251
259
|
|
252
260
|
# Stream IO
|
@@ -263,13 +271,13 @@ class StrictJuice < Minitest::Test
|
|
263
271
|
end
|
264
272
|
|
265
273
|
def test_io_file
|
266
|
-
filename = File.join(
|
267
|
-
File.
|
274
|
+
filename = File.join(__dir__, 'open_file_test.json')
|
275
|
+
File.write(filename, %{{
|
268
276
|
"x":true,
|
269
277
|
"y":58,
|
270
278
|
"z": [1,2,3]
|
271
279
|
}
|
272
|
-
})
|
280
|
+
})
|
273
281
|
f = File.new(filename)
|
274
282
|
obj = Oj.strict_load(f)
|
275
283
|
f.close()
|
@@ -289,7 +297,7 @@ class StrictJuice < Minitest::Test
|
|
289
297
|
assert(true)
|
290
298
|
return
|
291
299
|
end
|
292
|
-
assert(false,
|
300
|
+
assert(false, '*** expected an exception')
|
293
301
|
end
|
294
302
|
|
295
303
|
def test_class
|
@@ -299,7 +307,7 @@ class StrictJuice < Minitest::Test
|
|
299
307
|
assert(true)
|
300
308
|
return
|
301
309
|
end
|
302
|
-
assert(false,
|
310
|
+
assert(false, '*** expected an exception')
|
303
311
|
end
|
304
312
|
|
305
313
|
def test_module
|
@@ -309,7 +317,7 @@ class StrictJuice < Minitest::Test
|
|
309
317
|
assert(true)
|
310
318
|
return
|
311
319
|
end
|
312
|
-
assert(false,
|
320
|
+
assert(false, '*** expected an exception')
|
313
321
|
end
|
314
322
|
|
315
323
|
# symbol_keys option
|
@@ -421,7 +429,7 @@ class StrictJuice < Minitest::Test
|
|
421
429
|
def dump_and_load(obj, trace=false)
|
422
430
|
json = Oj.dump(obj, :indent => 2)
|
423
431
|
puts json if trace
|
424
|
-
loaded = Oj.strict_load(json)
|
432
|
+
loaded = Oj.strict_load(json)
|
425
433
|
if obj.nil?
|
426
434
|
assert_nil(loaded)
|
427
435
|
else
|