oj 2.18.3 → 3.13.14
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 +5 -5
- data/CHANGELOG.md +1324 -0
- data/README.md +51 -204
- data/RELEASE_NOTES.md +61 -0
- data/ext/oj/buf.h +49 -72
- data/ext/oj/cache.c +326 -0
- data/ext/oj/cache.h +21 -0
- data/ext/oj/cache8.c +61 -64
- data/ext/oj/cache8.h +12 -39
- data/ext/oj/circarray.c +37 -68
- data/ext/oj/circarray.h +16 -42
- data/ext/oj/code.c +221 -0
- data/ext/oj/code.h +40 -0
- data/ext/oj/compat.c +231 -107
- data/ext/oj/custom.c +1125 -0
- data/ext/oj/debug.c +132 -0
- data/ext/oj/dump.c +935 -2513
- data/ext/oj/dump.h +108 -0
- data/ext/oj/dump_compat.c +936 -0
- data/ext/oj/dump_leaf.c +164 -0
- data/ext/oj/dump_object.c +761 -0
- data/ext/oj/dump_strict.c +410 -0
- data/ext/oj/encode.h +7 -42
- data/ext/oj/encoder.c +43 -0
- data/ext/oj/err.c +40 -54
- data/ext/oj/err.h +52 -46
- data/ext/oj/extconf.rb +21 -30
- data/ext/oj/fast.c +1097 -1080
- data/ext/oj/intern.c +301 -0
- data/ext/oj/intern.h +26 -0
- data/ext/oj/mimic_json.c +893 -0
- data/ext/oj/object.c +549 -620
- data/ext/oj/odd.c +155 -167
- data/ext/oj/odd.h +37 -63
- data/ext/oj/oj.c +1661 -2063
- data/ext/oj/oj.h +341 -270
- data/ext/oj/parse.c +974 -737
- data/ext/oj/parse.h +105 -97
- data/ext/oj/parser.c +1526 -0
- data/ext/oj/parser.h +90 -0
- data/ext/oj/rails.c +1504 -0
- data/ext/oj/rails.h +18 -0
- data/ext/oj/reader.c +141 -163
- data/ext/oj/reader.h +75 -113
- data/ext/oj/resolve.c +45 -93
- data/ext/oj/resolve.h +7 -34
- data/ext/oj/rxclass.c +143 -0
- data/ext/oj/rxclass.h +26 -0
- data/ext/oj/saj.c +447 -511
- data/ext/oj/saj2.c +348 -0
- data/ext/oj/scp.c +91 -138
- data/ext/oj/sparse.c +793 -644
- data/ext/oj/stream_writer.c +331 -0
- data/ext/oj/strict.c +145 -109
- data/ext/oj/string_writer.c +493 -0
- data/ext/oj/trace.c +72 -0
- data/ext/oj/trace.h +28 -0
- data/ext/oj/usual.c +1254 -0
- data/ext/oj/util.c +136 -0
- data/ext/oj/util.h +20 -0
- data/ext/oj/val_stack.c +62 -70
- data/ext/oj/val_stack.h +95 -129
- data/ext/oj/validate.c +51 -0
- data/ext/oj/wab.c +622 -0
- data/lib/oj/bag.rb +1 -0
- data/lib/oj/easy_hash.rb +17 -8
- data/lib/oj/error.rb +10 -11
- data/lib/oj/json.rb +176 -0
- data/lib/oj/mimic.rb +158 -19
- data/lib/oj/state.rb +132 -0
- data/lib/oj/version.rb +2 -2
- data/lib/oj.rb +1 -31
- data/pages/Advanced.md +22 -0
- data/pages/Compatibility.md +25 -0
- data/pages/Custom.md +23 -0
- data/pages/Encoding.md +65 -0
- data/pages/JsonGem.md +94 -0
- data/pages/Modes.md +161 -0
- data/pages/Options.md +327 -0
- data/pages/Parser.md +309 -0
- data/pages/Rails.md +167 -0
- data/pages/Security.md +20 -0
- data/pages/WAB.md +13 -0
- data/test/activerecord/result_test.rb +32 -0
- data/test/activesupport4/decoding_test.rb +108 -0
- data/test/activesupport4/encoding_test.rb +531 -0
- data/test/activesupport4/test_helper.rb +41 -0
- data/test/activesupport5/abstract_unit.rb +45 -0
- data/test/activesupport5/decoding_test.rb +133 -0
- data/test/activesupport5/encoding_test.rb +500 -0
- data/test/activesupport5/encoding_test_cases.rb +98 -0
- data/test/activesupport5/test_helper.rb +72 -0
- data/test/activesupport5/time_zone_test_helpers.rb +39 -0
- data/test/activesupport6/abstract_unit.rb +44 -0
- data/test/activesupport6/decoding_test.rb +133 -0
- data/test/activesupport6/encoding_test.rb +507 -0
- data/test/activesupport6/encoding_test_cases.rb +98 -0
- data/test/activesupport6/test_common.rb +17 -0
- data/test/activesupport6/test_helper.rb +163 -0
- data/test/activesupport6/time_zone_test_helpers.rb +39 -0
- data/test/activesupport7/abstract_unit.rb +49 -0
- data/test/activesupport7/decoding_test.rb +125 -0
- data/test/activesupport7/encoding_test.rb +486 -0
- data/test/activesupport7/encoding_test_cases.rb +104 -0
- data/test/activesupport7/time_zone_test_helpers.rb +47 -0
- data/test/bar.rb +9 -0
- data/test/baz.rb +16 -0
- data/test/bug.rb +11 -46
- data/test/foo.rb +69 -16
- data/test/helper.rb +10 -1
- data/test/isolated/shared.rb +12 -8
- data/test/isolated/test_mimic_rails_after.rb +3 -3
- data/test/isolated/test_mimic_rails_before.rb +3 -3
- data/test/json_gem/json_addition_test.rb +216 -0
- data/test/json_gem/json_common_interface_test.rb +153 -0
- data/test/json_gem/json_encoding_test.rb +107 -0
- data/test/json_gem/json_ext_parser_test.rb +20 -0
- data/test/json_gem/json_fixtures_test.rb +35 -0
- data/test/json_gem/json_generator_test.rb +397 -0
- data/test/json_gem/json_generic_object_test.rb +90 -0
- data/test/json_gem/json_parser_test.rb +470 -0
- data/test/json_gem/json_string_matching_test.rb +42 -0
- data/test/json_gem/test_helper.rb +26 -0
- data/test/mem.rb +33 -0
- data/test/perf.rb +1 -1
- data/test/perf_compat.rb +30 -28
- data/test/perf_dump.rb +50 -0
- data/test/perf_object.rb +1 -1
- data/test/perf_once.rb +58 -0
- data/test/perf_parser.rb +189 -0
- data/test/perf_scp.rb +11 -10
- data/test/perf_strict.rb +30 -19
- data/test/perf_wab.rb +131 -0
- data/test/prec.rb +23 -0
- data/test/sample.rb +0 -1
- data/test/sample_json.rb +1 -1
- data/test/test_compat.rb +219 -102
- data/test/test_custom.rb +533 -0
- data/test/test_fast.rb +107 -35
- data/test/test_file.rb +19 -25
- data/test/test_generate.rb +21 -0
- data/test/test_hash.rb +11 -1
- data/test/test_integer_range.rb +72 -0
- data/test/test_null.rb +376 -0
- data/test/test_object.rb +357 -70
- data/test/test_parser.rb +27 -0
- data/test/test_parser_saj.rb +245 -0
- data/test/test_parser_usual.rb +217 -0
- data/test/test_rails.rb +35 -0
- data/test/test_saj.rb +1 -1
- data/test/test_scp.rb +39 -2
- data/test/test_strict.rb +186 -7
- data/test/test_various.rb +160 -774
- data/test/test_wab.rb +307 -0
- data/test/test_writer.rb +90 -2
- data/test/tests.rb +24 -0
- data/test/tests_mimic.rb +14 -0
- data/test/tests_mimic_addition.rb +7 -0
- data/test/zoo.rb +13 -0
- metadata +194 -56
- data/ext/oj/hash.c +0 -163
- data/ext/oj/hash.h +0 -46
- data/ext/oj/hash_test.c +0 -512
- data/test/activesupport_datetime_test.rb +0 -23
- data/test/bug2.rb +0 -10
- data/test/bug3.rb +0 -46
- data/test/bug_fast.rb +0 -32
- data/test/bug_load.rb +0 -24
- data/test/crash.rb +0 -111
- data/test/curl/curl_oj.rb +0 -46
- data/test/curl/get_oj.rb +0 -24
- data/test/curl/just_curl.rb +0 -31
- data/test/curl/just_oj.rb +0 -51
- data/test/example.rb +0 -11
- data/test/io.rb +0 -48
- data/test/isolated/test_mimic_rails_datetime.rb +0 -27
- data/test/mod.rb +0 -16
- data/test/rails.rb +0 -50
- data/test/russian.rb +0 -18
- data/test/struct.rb +0 -29
- data/test/test_serializer.rb +0 -59
- data/test/write_timebars.rb +0 -31
data/test/test_strict.rb
CHANGED
|
@@ -1,14 +1,37 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
-
# encoding:
|
|
2
|
+
# encoding: utf-8
|
|
3
3
|
|
|
4
4
|
$: << File.dirname(__FILE__)
|
|
5
|
+
$oj_dir = File.dirname(File.expand_path(File.dirname(__FILE__)))
|
|
6
|
+
%w(lib ext).each do |dir|
|
|
7
|
+
$: << File.join($oj_dir, dir)
|
|
8
|
+
end
|
|
5
9
|
|
|
6
|
-
require '
|
|
10
|
+
require 'minitest'
|
|
11
|
+
require 'minitest/autorun'
|
|
12
|
+
require 'stringio'
|
|
13
|
+
require 'date'
|
|
14
|
+
require 'bigdecimal'
|
|
15
|
+
require 'oj'
|
|
7
16
|
|
|
8
17
|
class StrictJuice < Minitest::Test
|
|
9
18
|
|
|
19
|
+
module TestModule
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
class Jeez
|
|
23
|
+
attr_accessor :x, :y
|
|
24
|
+
|
|
25
|
+
def initialize(x, y)
|
|
26
|
+
@x = x
|
|
27
|
+
@y = y
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
10
31
|
def setup
|
|
11
32
|
@default_options = Oj.default_options
|
|
33
|
+
# in strict mode other options other than the number formats are not used.
|
|
34
|
+
Oj.default_options = { :mode => :strict }
|
|
12
35
|
end
|
|
13
36
|
|
|
14
37
|
def teardown
|
|
@@ -46,6 +69,42 @@ class StrictJuice < Minitest::Test
|
|
|
46
69
|
dump_and_load(-2.48e100 * 1.0e10, false)
|
|
47
70
|
end
|
|
48
71
|
|
|
72
|
+
def test_nan_dump
|
|
73
|
+
assert_equal('null', Oj.dump(0/0.0, :nan => :null))
|
|
74
|
+
assert_equal('3.3e14159265358979323846', Oj.dump(0/0.0, :nan => :huge))
|
|
75
|
+
begin
|
|
76
|
+
Oj.dump(0/0.0, :nan => :word)
|
|
77
|
+
rescue Exception
|
|
78
|
+
assert(true)
|
|
79
|
+
return
|
|
80
|
+
end
|
|
81
|
+
assert(false, "*** expected an exception")
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def test_infinity_dump
|
|
85
|
+
assert_equal('null', Oj.dump(1/0.0, :nan => :null))
|
|
86
|
+
assert_equal('3.0e14159265358979323846', Oj.dump(1/0.0, :nan => :huge))
|
|
87
|
+
begin
|
|
88
|
+
Oj.dump(1/0.0, :nan => :word)
|
|
89
|
+
rescue Exception
|
|
90
|
+
assert(true)
|
|
91
|
+
return
|
|
92
|
+
end
|
|
93
|
+
assert(false, "*** expected an exception")
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def test_neg_infinity_dump
|
|
97
|
+
assert_equal('null', Oj.dump(-1/0.0, :nan => :null))
|
|
98
|
+
assert_equal('-3.0e14159265358979323846', Oj.dump(-1/0.0, :nan => :huge))
|
|
99
|
+
begin
|
|
100
|
+
Oj.dump(-1/0.0, :nan => :word)
|
|
101
|
+
rescue Exception
|
|
102
|
+
assert(true)
|
|
103
|
+
return
|
|
104
|
+
end
|
|
105
|
+
assert(false, "*** expected an exception")
|
|
106
|
+
end
|
|
107
|
+
|
|
49
108
|
def test_string
|
|
50
109
|
dump_and_load('', false)
|
|
51
110
|
dump_and_load('abc', false)
|
|
@@ -96,6 +155,15 @@ class StrictJuice < Minitest::Test
|
|
|
96
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)
|
|
97
156
|
end
|
|
98
157
|
|
|
158
|
+
def test_deep_nest
|
|
159
|
+
begin
|
|
160
|
+
n = 10000
|
|
161
|
+
Oj.strict_load('[' * n + ']' * n)
|
|
162
|
+
rescue Exception => e
|
|
163
|
+
assert(false, e.message)
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
99
167
|
# Hash
|
|
100
168
|
def test_hash
|
|
101
169
|
dump_and_load({}, false)
|
|
@@ -132,23 +200,55 @@ class StrictJuice < Minitest::Test
|
|
|
132
200
|
assert_equal({"a\nb" => true, "c\td" => false}, obj)
|
|
133
201
|
end
|
|
134
202
|
|
|
203
|
+
def test_non_str_hash
|
|
204
|
+
begin
|
|
205
|
+
Oj.dump({ 1 => true, 0 => false })
|
|
206
|
+
rescue Exception
|
|
207
|
+
assert(true)
|
|
208
|
+
return
|
|
209
|
+
end
|
|
210
|
+
assert(false, "*** expected an exception")
|
|
211
|
+
end
|
|
212
|
+
|
|
135
213
|
def test_bignum_object
|
|
136
214
|
dump_and_load(7 ** 55, false)
|
|
137
215
|
end
|
|
138
216
|
|
|
139
217
|
# BigDecimal
|
|
140
218
|
def test_bigdecimal_strict
|
|
141
|
-
|
|
219
|
+
Oj.default_options = { :bigdecimal_load => true}
|
|
220
|
+
dump_and_load(BigDecimal('3.14159265358979323846'), false)
|
|
142
221
|
end
|
|
143
222
|
|
|
144
223
|
def test_bigdecimal_load
|
|
145
|
-
orig = BigDecimal
|
|
146
|
-
json = Oj.dump(orig, :mode => :
|
|
147
|
-
bg = Oj.load(json, :mode => :
|
|
224
|
+
orig = BigDecimal('80.51')
|
|
225
|
+
json = Oj.dump(orig, :mode => :strict, :bigdecimal_as_decimal => true)
|
|
226
|
+
bg = Oj.load(json, :mode => :strict, :bigdecimal_load => true)
|
|
148
227
|
assert_equal(BigDecimal, bg.class)
|
|
149
228
|
assert_equal(orig, bg)
|
|
150
229
|
end
|
|
151
230
|
|
|
231
|
+
def test_json_object
|
|
232
|
+
obj = Jeez.new(true, 58)
|
|
233
|
+
begin
|
|
234
|
+
Oj.dump(obj)
|
|
235
|
+
rescue Exception
|
|
236
|
+
assert(true)
|
|
237
|
+
return
|
|
238
|
+
end
|
|
239
|
+
assert(false, "*** expected an exception")
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
def test_range
|
|
243
|
+
begin
|
|
244
|
+
Oj.dump(1..7)
|
|
245
|
+
rescue Exception
|
|
246
|
+
assert(true)
|
|
247
|
+
return
|
|
248
|
+
end
|
|
249
|
+
assert(false, "*** expected an exception")
|
|
250
|
+
end
|
|
251
|
+
|
|
152
252
|
# Stream IO
|
|
153
253
|
def test_io_string
|
|
154
254
|
json = %{{
|
|
@@ -176,6 +276,42 @@ class StrictJuice < Minitest::Test
|
|
|
176
276
|
assert_equal({ 'x' => true, 'y' => 58, 'z' => [1, 2, 3]}, obj)
|
|
177
277
|
end
|
|
178
278
|
|
|
279
|
+
def test_symbol
|
|
280
|
+
json = Oj.dump(:abc)
|
|
281
|
+
assert_equal('"abc"', json)
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
def test_time
|
|
285
|
+
t = Time.local(2012, 1, 5, 23, 58, 7)
|
|
286
|
+
begin
|
|
287
|
+
Oj.dump(t)
|
|
288
|
+
rescue Exception
|
|
289
|
+
assert(true)
|
|
290
|
+
return
|
|
291
|
+
end
|
|
292
|
+
assert(false, "*** expected an exception")
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
def test_class
|
|
296
|
+
begin
|
|
297
|
+
Oj.dump(StrictJuice)
|
|
298
|
+
rescue Exception
|
|
299
|
+
assert(true)
|
|
300
|
+
return
|
|
301
|
+
end
|
|
302
|
+
assert(false, "*** expected an exception")
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
def test_module
|
|
306
|
+
begin
|
|
307
|
+
Oj.dump(TestModule)
|
|
308
|
+
rescue Exception
|
|
309
|
+
assert(true)
|
|
310
|
+
return
|
|
311
|
+
end
|
|
312
|
+
assert(false, "*** expected an exception")
|
|
313
|
+
end
|
|
314
|
+
|
|
179
315
|
# symbol_keys option
|
|
180
316
|
def test_symbol_keys
|
|
181
317
|
json = %{{
|
|
@@ -243,11 +379,54 @@ class StrictJuice < Minitest::Test
|
|
|
243
379
|
assert_equal([{ 'x' => 1 }, { 'y' => 2 }], results)
|
|
244
380
|
end
|
|
245
381
|
|
|
382
|
+
def test_invalid_decimal_dot_start
|
|
383
|
+
assert_raises(Oj::ParseError) {
|
|
384
|
+
Oj.load('.123', mode: :strict)
|
|
385
|
+
}
|
|
386
|
+
assert_raises(Oj::ParseError) {
|
|
387
|
+
Oj.load('-.123', mode: :strict)
|
|
388
|
+
}
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
def test_invalid_decimal_dot_end
|
|
392
|
+
json = '123.'
|
|
393
|
+
assert_raises(Oj::ParseError) {
|
|
394
|
+
Oj.load(json, mode: :strict)
|
|
395
|
+
}
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
def test_invalid_decimal_plus
|
|
399
|
+
json = '+12'
|
|
400
|
+
assert_raises(Oj::ParseError) {
|
|
401
|
+
Oj.load(json, mode: :strict)
|
|
402
|
+
}
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
def test_circular_hash
|
|
406
|
+
h = { 'a' => 7 }
|
|
407
|
+
h['b'] = h
|
|
408
|
+
json = Oj.dump(h, :indent => 2, :circular => true)
|
|
409
|
+
assert_equal(%|{
|
|
410
|
+
"a":7,
|
|
411
|
+
"b":null
|
|
412
|
+
}
|
|
413
|
+
|, json)
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
def test_omit_nil
|
|
417
|
+
json = Oj.dump({'x' => {'a' => 1, 'b' => nil }, 'y' => nil}, :omit_nil => true)
|
|
418
|
+
assert_equal(%|{"x":{"a":1}}|, json)
|
|
419
|
+
end
|
|
420
|
+
|
|
246
421
|
def dump_and_load(obj, trace=false)
|
|
247
422
|
json = Oj.dump(obj, :indent => 2)
|
|
248
423
|
puts json if trace
|
|
249
424
|
loaded = Oj.strict_load(json);
|
|
250
|
-
|
|
425
|
+
if obj.nil?
|
|
426
|
+
assert_nil(loaded)
|
|
427
|
+
else
|
|
428
|
+
assert_equal(obj, loaded)
|
|
429
|
+
end
|
|
251
430
|
loaded
|
|
252
431
|
end
|
|
253
432
|
|