oj 3.14.3 → 3.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/ext/oj/custom.c +5 -15
- data/ext/oj/dump.c +27 -2
- data/ext/oj/mimic_json.c +21 -0
- data/ext/oj/object.c +7 -21
- data/ext/oj/oj.c +20 -0
- data/ext/oj/oj.h +3 -0
- data/ext/oj/strict.c +9 -27
- data/ext/oj/wab.c +9 -27
- data/lib/oj/version.rb +1 -1
- data/lib/oj.rb +3 -0
- data/pages/Options.md +4 -0
- data/test/_test_active.rb +8 -8
- data/test/_test_active_mimic.rb +7 -7
- data/test/_test_mimic_rails.rb +17 -19
- data/test/files.rb +14 -14
- data/test/foo.rb +5 -5
- data/test/helper.rb +4 -4
- data/test/mem.rb +8 -7
- data/test/perf.rb +21 -26
- data/test/perf_compat.rb +30 -32
- data/test/perf_dump.rb +25 -25
- data/test/perf_fast.rb +80 -82
- data/test/perf_file.rb +27 -29
- data/test/perf_object.rb +65 -68
- data/test/perf_once.rb +8 -7
- data/test/perf_parser.rb +40 -46
- data/test/perf_saj.rb +46 -53
- data/test/perf_scp.rb +57 -69
- data/test/perf_simple.rb +40 -38
- data/test/perf_strict.rb +68 -70
- data/test/perf_wab.rb +67 -69
- data/test/prec.rb +3 -3
- data/test/sample.rb +16 -15
- data/test/sample_json.rb +8 -7
- data/test/test_compat.rb +44 -46
- data/test/test_custom.rb +56 -42
- data/test/test_debian.rb +6 -9
- data/test/test_fast.rb +78 -72
- data/test/test_file.rb +16 -21
- 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 +18 -20
- data/test/test_object.rb +76 -86
- data/test/test_parser.rb +4 -4
- data/test/test_parser_debug.rb +4 -4
- data/test/test_parser_saj.rb +31 -31
- data/test/test_parser_usual.rb +3 -3
- data/test/test_rails.rb +2 -2
- data/test/test_saj.rb +8 -8
- data/test/test_scp.rb +29 -29
- data/test/test_strict.rb +25 -31
- data/test/test_various.rb +121 -75
- data/test/test_wab.rb +43 -42
- data/test/test_writer.rb +46 -46
- data/test/tests.rb +7 -7
- data/test/tests_mimic.rb +6 -6
- data/test/tests_mimic_addition.rb +6 -6
- metadata +3 -6
- 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/sample.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
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
11
|
require 'sample/doc'
|
@@ -12,7 +13,7 @@ require 'sample/doc'
|
|
12
13
|
def sample_doc(size=3)
|
13
14
|
colors = [ :black, :gray, :white, :red, :blue, :yellow, :green, :purple, :orange ]
|
14
15
|
|
15
|
-
d =
|
16
|
+
d = Sample::Doc.new('Sample')
|
16
17
|
|
17
18
|
# add some history
|
18
19
|
(0..size * 10).each do |i|
|
@@ -21,22 +22,22 @@ def sample_doc(size=3)
|
|
21
22
|
|
22
23
|
# add some layers
|
23
24
|
(1..size).each do |i|
|
24
|
-
layer =
|
25
|
+
layer = Sample::Layer.new("Layer-#{i}")
|
25
26
|
(1..size).each do |j|
|
26
|
-
g =
|
27
|
+
g = Sample::Group.new
|
27
28
|
(1..size).each do |k|
|
28
|
-
g2 =
|
29
|
-
r =
|
30
|
-
|
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])
|
31
32
|
r.add_prop(:part_of, layer.name)
|
32
33
|
g2 << r
|
33
|
-
g2 <<
|
34
|
+
g2 << Sample::Text.new("#{k} in #{j}", r.left, r.top, r.width, r.height)
|
34
35
|
g << g2
|
35
36
|
end
|
36
|
-
g2 =
|
37
|
+
g2 = Sample::Group.new
|
37
38
|
(1..size).each do |k|
|
38
|
-
o =
|
39
|
-
|
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])
|
40
41
|
o.add_prop(:inside, true)
|
41
42
|
g << o
|
42
43
|
end
|
data/test/sample_json.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
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
11
|
require 'oj'
|
@@ -31,6 +32,6 @@ def sample_json(size=3)
|
|
31
32
|
container
|
32
33
|
end
|
33
34
|
|
34
|
-
if $
|
35
|
-
File.
|
35
|
+
if $PROGRAM_NAME == __FILE__
|
36
|
+
File.write('sample.json', Oj.dump(sample_json(3), :indent => 2))
|
36
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(*
|
32
|
+
def to_json(*_a)
|
33
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
|
@@ -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,15 +340,13 @@ class CompatJuice < Minitest::Test
|
|
340
340
|
end
|
341
341
|
|
342
342
|
def test_io_file
|
343
|
-
filename = File.join(
|
344
|
-
File.
|
345
|
-
f.write(%{{
|
343
|
+
filename = File.join(__dir__, 'open_file_test.json')
|
344
|
+
File.write(filename, %{{
|
346
345
|
"x":true,
|
347
346
|
"y":58,
|
348
347
|
"z": [1,2,3]
|
349
348
|
}
|
350
349
|
})
|
351
|
-
}
|
352
350
|
f = File.new(filename)
|
353
351
|
obj = Oj.compat_load(f)
|
354
352
|
f.close()
|
@@ -412,7 +410,7 @@ class CompatJuice < Minitest::Test
|
|
412
410
|
|
413
411
|
# A child to_json should not be called.
|
414
412
|
def test_json_object_child
|
415
|
-
obj = {
|
413
|
+
obj = { 'child' => Jeez.new(true, 58) }
|
416
414
|
assert_equal('{"child":{"json_class":"CompatJuice::Jeez","x":true,"y":58}}', Oj.dump(obj))
|
417
415
|
end
|
418
416
|
|
@@ -433,10 +431,10 @@ class CompatJuice < Minitest::Test
|
|
433
431
|
begin
|
434
432
|
Oj.compat_load(json, :create_additions => true)
|
435
433
|
rescue Exception => e
|
436
|
-
assert_equal(
|
434
|
+
assert_equal('ArgumentError', e.class().name)
|
437
435
|
return
|
438
436
|
end
|
439
|
-
assert(false,
|
437
|
+
assert(false, '*** expected an exception')
|
440
438
|
end
|
441
439
|
|
442
440
|
def test_json_object_create_cache
|
@@ -452,7 +450,7 @@ class CompatJuice < Minitest::Test
|
|
452
450
|
expected = Jeez.new(true, 58)
|
453
451
|
json = Oj.to_json(expected)
|
454
452
|
json.gsub!('json_class', '_class_')
|
455
|
-
obj = Oj.compat_load(json, :create_id =>
|
453
|
+
obj = Oj.compat_load(json, :create_id => '_class_', :create_additions => true)
|
456
454
|
assert_equal(expected, obj)
|
457
455
|
end
|
458
456
|
|
@@ -492,10 +490,10 @@ class CompatJuice < Minitest::Test
|
|
492
490
|
|
493
491
|
def test_parse_large_string
|
494
492
|
error = assert_raises() { Oj.load(%|{"a":"aaaaaaaaaa\0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}|) }
|
495
|
-
|
493
|
+
assert_includes(error.message, 'NULL byte in string')
|
496
494
|
|
497
495
|
error = assert_raises() { Oj.load(%|{"a":"aaaaaaaaaaaaaaaaaaaa }|) }
|
498
|
-
|
496
|
+
assert_includes(error.message, 'quoted string not terminated')
|
499
497
|
|
500
498
|
json =<<~JSON
|
501
499
|
{
|
@@ -503,15 +501,15 @@ class CompatJuice < Minitest::Test
|
|
503
501
|
"b": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
504
502
|
}
|
505
503
|
JSON
|
506
|
-
assert_equal(
|
504
|
+
assert_equal('ぴーたー', Oj.load(json)['a'])
|
507
505
|
end
|
508
506
|
|
509
507
|
def test_parse_large_escaped_string
|
510
|
-
invalid_json = %|{"a"
|
508
|
+
invalid_json = %|{"a":"aaaa\\nbbbb\\rcccc\\tddd\\feee\\bf/\\\\\\u3074\\u30fc\\u305f\\u30fc }|
|
511
509
|
error = assert_raises() { Oj.load(invalid_json) }
|
512
|
-
|
510
|
+
assert_includes(error.message, 'quoted string not terminated')
|
513
511
|
|
514
|
-
json = "
|
512
|
+
json = '"aaaa\\nbbbb\\rcccc\\tddd\\feee\\bf/\\\\\\u3074\\u30fc\\u305f\\u30fc "'
|
515
513
|
assert_equal("aaaa\nbbbb\rcccc\tddd\feee\bf/\\ぴーたー ", Oj.load(json))
|
516
514
|
end
|
517
515
|
|
@@ -527,7 +525,7 @@ class CompatJuice < Minitest::Test
|
|
527
525
|
def dump_and_load(obj, trace=false)
|
528
526
|
json = Oj.dump(obj)
|
529
527
|
puts json if trace
|
530
|
-
loaded = Oj.compat_load(json, :create_additions => true)
|
528
|
+
loaded = Oj.compat_load(json, :create_additions => true)
|
531
529
|
if obj.nil?
|
532
530
|
assert_nil(loaded)
|
533
531
|
else
|
@@ -539,7 +537,7 @@ class CompatJuice < Minitest::Test
|
|
539
537
|
def dump_to_json_and_load(obj, trace=false)
|
540
538
|
json = Oj.to_json(obj, :indent => ' ')
|
541
539
|
puts json if trace
|
542
|
-
loaded = Oj.compat_load(json, :create_additions => true)
|
540
|
+
loaded = Oj.compat_load(json, :create_additions => true)
|
543
541
|
if obj.nil?
|
544
542
|
assert_nil(loaded)
|
545
543
|
else
|
data/test/test_custom.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'
|
@@ -27,19 +27,24 @@ class CustomJuice < Minitest::Test
|
|
27
27
|
@y = y
|
28
28
|
@_z = x.to_s
|
29
29
|
end
|
30
|
+
|
30
31
|
def ==(o)
|
31
32
|
self.class == o.class && @x == o.x && @y = o.y
|
32
33
|
end
|
33
|
-
|
34
|
+
|
35
|
+
def to_json(*_args)
|
34
36
|
%|{"xx":#{@x},"yy":#{y}}|
|
35
37
|
end
|
36
|
-
|
38
|
+
|
39
|
+
def raw_json(_depth, _indent)
|
37
40
|
%|{"xxx":#{@x},"yyy":#{y}}|
|
38
41
|
end
|
39
|
-
|
42
|
+
|
43
|
+
def as_json(*_args)
|
40
44
|
{'a' => @x, :b => @y }
|
41
45
|
end
|
42
|
-
|
46
|
+
|
47
|
+
def to_hash
|
43
48
|
{'b' => @x, 'n' => @y }
|
44
49
|
end
|
45
50
|
end
|
@@ -51,10 +56,12 @@ class CustomJuice < Minitest::Test
|
|
51
56
|
@x = x
|
52
57
|
@y = y
|
53
58
|
end
|
59
|
+
|
54
60
|
def ==(o)
|
55
61
|
self.class == o.class && @x == o.x && @y = o.y
|
56
62
|
end
|
57
|
-
|
63
|
+
|
64
|
+
def as_json(*_args)
|
58
65
|
{'a' => @x, :b => @y }
|
59
66
|
end
|
60
67
|
end
|
@@ -66,10 +73,12 @@ class CustomJuice < Minitest::Test
|
|
66
73
|
@x = x
|
67
74
|
@y = y
|
68
75
|
end
|
76
|
+
|
69
77
|
def ==(o)
|
70
78
|
self.class == o.class && @x == o.x && @y = o.y
|
71
79
|
end
|
72
|
-
|
80
|
+
|
81
|
+
def as_json(*_args)
|
73
82
|
a = @x
|
74
83
|
a = a.as_json if a.respond_to?('as_json')
|
75
84
|
b = @y
|
@@ -101,16 +110,16 @@ class CustomJuice < Minitest::Test
|
|
101
110
|
|
102
111
|
def test_fixnum
|
103
112
|
dump_and_load(0, false)
|
104
|
-
dump_and_load(
|
105
|
-
dump_and_load(-
|
113
|
+
dump_and_load(12_345, false)
|
114
|
+
dump_and_load(-54_321, false)
|
106
115
|
dump_and_load(1, false)
|
107
116
|
end
|
108
117
|
|
109
118
|
def test_float
|
110
119
|
dump_and_load(0.0, false)
|
111
|
-
dump_and_load(
|
120
|
+
dump_and_load(12_345.6789, false)
|
112
121
|
dump_and_load(70.35, false)
|
113
|
-
dump_and_load(-
|
122
|
+
dump_and_load(-54_321.012, false)
|
114
123
|
dump_and_load(1.7775, false)
|
115
124
|
dump_and_load(2.5024, false)
|
116
125
|
dump_and_load(2.48e16, false)
|
@@ -119,12 +128,12 @@ class CustomJuice < Minitest::Test
|
|
119
128
|
end
|
120
129
|
|
121
130
|
def test_float_parse
|
122
|
-
f = Oj.load(
|
131
|
+
f = Oj.load('12.123456789012345678', mode: :custom, bigdecimal_load: :float)
|
123
132
|
assert_equal(Float, f.class)
|
124
133
|
end
|
125
134
|
|
126
135
|
def test_float_parse_fast
|
127
|
-
f = Oj.load(
|
136
|
+
f = Oj.load('12.123456789012345678', mode: :custom, bigdecimal_load: :fast)
|
128
137
|
assert_equal(Float, f.class)
|
129
138
|
assert(12.12345678901234 <= f && f < 12.12345678901236)
|
130
139
|
end
|
@@ -139,7 +148,7 @@ class CustomJuice < Minitest::Test
|
|
139
148
|
assert(true)
|
140
149
|
return
|
141
150
|
end
|
142
|
-
assert(false,
|
151
|
+
assert(false, '*** expected an exception')
|
143
152
|
end
|
144
153
|
|
145
154
|
def test_infinity_dump
|
@@ -152,7 +161,7 @@ class CustomJuice < Minitest::Test
|
|
152
161
|
assert(true)
|
153
162
|
return
|
154
163
|
end
|
155
|
-
assert(false,
|
164
|
+
assert(false, '*** expected an exception')
|
156
165
|
end
|
157
166
|
|
158
167
|
def test_neg_infinity_dump
|
@@ -165,7 +174,7 @@ class CustomJuice < Minitest::Test
|
|
165
174
|
assert(true)
|
166
175
|
return
|
167
176
|
end
|
168
|
-
assert(false,
|
177
|
+
assert(false, '*** expected an exception')
|
169
178
|
end
|
170
179
|
|
171
180
|
def test_string
|
@@ -176,15 +185,15 @@ class CustomJuice < Minitest::Test
|
|
176
185
|
end
|
177
186
|
|
178
187
|
def test_string_ascii
|
179
|
-
json = Oj.dump(
|
188
|
+
json = Oj.dump('ぴーたー', :escape_mode => :ascii)
|
180
189
|
assert_equal(%{"\\u3074\\u30fc\\u305f\\u30fc"}, json)
|
181
|
-
dump_and_load(
|
190
|
+
dump_and_load('ぴーたー', false, :escape_mode => :ascii)
|
182
191
|
end
|
183
192
|
|
184
193
|
def test_string_json
|
185
|
-
json = Oj.dump(
|
194
|
+
json = Oj.dump('ぴーたー', :escape_mode => :json)
|
186
195
|
assert_equal(%{"ぴーたー"}, json)
|
187
|
-
dump_and_load(
|
196
|
+
dump_and_load('ぴーたー', false, :escape_mode => :json)
|
188
197
|
end
|
189
198
|
|
190
199
|
def test_array
|
@@ -203,10 +212,10 @@ class CustomJuice < Minitest::Test
|
|
203
212
|
skip 'TruffleRuby causes SEGV' if RUBY_ENGINE == 'truffleruby'
|
204
213
|
|
205
214
|
begin
|
206
|
-
n =
|
215
|
+
n = 10_000
|
207
216
|
Oj.strict_load(('[' * n) + (']' * n))
|
208
217
|
rescue Exception => e
|
209
|
-
|
218
|
+
refute(e.message)
|
210
219
|
end
|
211
220
|
end
|
212
221
|
|
@@ -261,11 +270,11 @@ class CustomJuice < Minitest::Test
|
|
261
270
|
|
262
271
|
def test_object
|
263
272
|
obj = Jeez.new(true, 58)
|
264
|
-
json = Oj.dump(obj, create_id:
|
273
|
+
json = Oj.dump(obj, create_id: '^o', use_to_json: false, use_as_json: false, use_to_hash: false)
|
265
274
|
assert_equal(%|{"x":true,"y":58,"_z":"true"}|, json)
|
266
|
-
json = Oj.dump(obj, create_id:
|
275
|
+
json = Oj.dump(obj, create_id: '^o', use_to_json: false, use_as_json: false, use_to_hash: false, ignore_under: true)
|
267
276
|
assert_equal(%|{"x":true,"y":58}|, json)
|
268
|
-
dump_and_load(obj, false, :create_id =>
|
277
|
+
dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
|
269
278
|
end
|
270
279
|
|
271
280
|
def test_object_to_json
|
@@ -393,24 +402,29 @@ class CustomJuice < Minitest::Test
|
|
393
402
|
assert_equal(%|{"x":{"a":1}}|, json)
|
394
403
|
end
|
395
404
|
|
405
|
+
def test_omit_null_byte
|
406
|
+
json = Oj.dump({ "fo\x00o" => "b\x00ar" }, :omit_null_byte => true)
|
407
|
+
assert_equal(%|{"foo":"bar"}|, json)
|
408
|
+
end
|
409
|
+
|
396
410
|
def test_complex
|
397
411
|
obj = Complex(2, 9)
|
398
|
-
dump_and_load(obj, false, :create_id =>
|
412
|
+
dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
|
399
413
|
end
|
400
414
|
|
401
415
|
def test_rational
|
402
416
|
obj = Rational(2, 9)
|
403
|
-
dump_and_load(obj, false, :create_id =>
|
417
|
+
dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
|
404
418
|
end
|
405
419
|
|
406
420
|
def test_range
|
407
421
|
obj = 3..8
|
408
|
-
dump_and_load(obj, false, :create_id =>
|
422
|
+
dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
|
409
423
|
end
|
410
424
|
|
411
425
|
def test_date
|
412
426
|
obj = Date.new(2017, 1, 5)
|
413
|
-
dump_and_load(obj, false, :create_id =>
|
427
|
+
dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
|
414
428
|
end
|
415
429
|
|
416
430
|
def test_date_unix
|
@@ -439,7 +453,7 @@ class CustomJuice < Minitest::Test
|
|
439
453
|
|
440
454
|
def test_datetime
|
441
455
|
obj = DateTime.new(2017, 1, 5, 10, 20, 30)
|
442
|
-
dump_and_load(obj, false, :create_id =>
|
456
|
+
dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
|
443
457
|
end
|
444
458
|
|
445
459
|
def test_datetime_unix
|
@@ -469,12 +483,12 @@ class CustomJuice < Minitest::Test
|
|
469
483
|
def test_regexp
|
470
484
|
# this notation must be used to get an == match later
|
471
485
|
obj = /(?ix-m:^yes$)/
|
472
|
-
dump_and_load(obj, false, :create_id =>
|
486
|
+
dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
|
473
487
|
end
|
474
488
|
|
475
489
|
def test_openstruct
|
476
490
|
obj = OpenStruct.new(:a => 1, 'b' => 2)
|
477
|
-
dump_and_load(obj, false, :create_id =>
|
491
|
+
dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
|
478
492
|
end
|
479
493
|
|
480
494
|
def test_time
|
@@ -484,14 +498,14 @@ class CustomJuice < Minitest::Test
|
|
484
498
|
# These two forms should be able to recreate the time precisely,
|
485
499
|
# so we check they can load a dumped version and recreate the
|
486
500
|
# original object correctly.
|
487
|
-
dump_and_load(obj, false, :time_format => :unix, :create_id =>
|
488
|
-
dump_and_load(obj, false, :time_format => :unix_zone, :create_id =>
|
501
|
+
dump_and_load(obj, false, :time_format => :unix, :create_id => '^o', :create_additions => true)
|
502
|
+
dump_and_load(obj, false, :time_format => :unix_zone, :create_id => '^o', :create_additions => true)
|
489
503
|
# These two forms will lose precision while dumping as they don't
|
490
504
|
# preserve full precision. We check that a dumped version is equal
|
491
505
|
# to that version loaded and dumped a second time, but don't check
|
492
506
|
# that the loaded Ruby objects is still the same as the original.
|
493
|
-
dump_load_dump(obj, false, :time_format => :xmlschema, :create_id =>
|
494
|
-
dump_load_dump(obj, false, :time_format => :ruby, :create_id =>
|
507
|
+
dump_load_dump(obj, false, :time_format => :xmlschema, :create_id => '^o', :create_additions => true)
|
508
|
+
dump_load_dump(obj, false, :time_format => :ruby, :create_id => '^o', :create_additions => true)
|
495
509
|
end
|
496
510
|
|
497
511
|
def dump_and_load(obj, trace=false, options={})
|
@@ -499,7 +513,7 @@ class CustomJuice < Minitest::Test
|
|
499
513
|
json = Oj.dump(obj, options)
|
500
514
|
puts json if trace
|
501
515
|
|
502
|
-
loaded = Oj.load(json, options)
|
516
|
+
loaded = Oj.load(json, options)
|
503
517
|
if obj.nil?
|
504
518
|
assert_nil(loaded)
|
505
519
|
else
|
@@ -513,7 +527,7 @@ class CustomJuice < Minitest::Test
|
|
513
527
|
json = Oj.dump(obj, options)
|
514
528
|
puts json if trace
|
515
529
|
|
516
|
-
loaded = Oj.load(json, options)
|
530
|
+
loaded = Oj.load(json, options)
|
517
531
|
if obj.nil?
|
518
532
|
assert_nil(loaded)
|
519
533
|
else
|
@@ -527,7 +541,7 @@ class CustomJuice < Minitest::Test
|
|
527
541
|
json = Oj.dump(obj, options)
|
528
542
|
puts json if trace
|
529
543
|
|
530
|
-
loaded = Oj.load(json, options)
|
544
|
+
loaded = Oj.load(json, options)
|
531
545
|
if obj.nil?
|
532
546
|
assert_nil(loaded)
|
533
547
|
else
|
data/test/test_debian.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'helper'
|
4
4
|
|
@@ -20,18 +20,15 @@ class DebJuice < Minitest::Test
|
|
20
20
|
|
21
21
|
# contributed by sauliusg to fix as_json
|
22
22
|
class Orange < Jam
|
23
|
-
def initialize(x, y)
|
24
|
-
super
|
25
|
-
end
|
26
23
|
|
27
|
-
def as_json
|
24
|
+
def as_json
|
28
25
|
{ :json_class => self.class,
|
29
26
|
:x => @x,
|
30
27
|
:y => @y }
|
31
28
|
end
|
32
29
|
|
33
30
|
def self.json_create(h)
|
34
|
-
|
31
|
+
new(h['x'], h['y'])
|
35
32
|
end
|
36
33
|
end
|
37
34
|
|
@@ -39,13 +36,13 @@ class DebJuice < Minitest::Test
|
|
39
36
|
Oj.default_options = { :mode => :compat, :class_cache => true, :use_as_json => true }
|
40
37
|
obj = Orange.new(true, 58)
|
41
38
|
json = Oj.dump(obj, :indent => 2)
|
42
|
-
|
39
|
+
refute_nil(json)
|
43
40
|
dump_and_load(obj, true)
|
44
41
|
end
|
45
42
|
|
46
|
-
def dump_and_load(obj,
|
43
|
+
def dump_and_load(obj, _trace=false)
|
47
44
|
json = Oj.dump(obj, :indent => 2)
|
48
|
-
loaded = Oj.load(json)
|
45
|
+
loaded = Oj.load(json)
|
49
46
|
assert_equal(obj, loaded)
|
50
47
|
loaded
|
51
48
|
end
|