oj 3.14.3 → 3.15.1
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 +10 -0
- data/ext/oj/code.c +3 -10
- data/ext/oj/compat.c +5 -18
- data/ext/oj/custom.c +10 -28
- data/ext/oj/dump.c +40 -10
- data/ext/oj/dump.h +1 -4
- data/ext/oj/extconf.rb +4 -2
- data/ext/oj/fast.c +3 -6
- data/ext/oj/mimic_json.c +21 -1
- data/ext/oj/object.c +7 -21
- data/ext/oj/oj.c +24 -4
- data/ext/oj/oj.h +10 -6
- data/ext/oj/parse.c +3 -5
- data/ext/oj/parse.h +16 -14
- data/ext/oj/parser.h +2 -2
- data/ext/oj/reader.c +1 -3
- data/ext/oj/saj.c +1 -1
- data/ext/oj/strict.c +9 -27
- data/ext/oj/wab.c +9 -27
- data/lib/oj/active_support_helper.rb +2 -3
- data/lib/oj/json.rb +156 -149
- data/lib/oj/mimic.rb +3 -1
- 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 +15 -10
- 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 +27 -27
- 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/test_object.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
#
|
2
|
+
# frozen_string_literal: true
|
3
3
|
|
4
|
-
|
4
|
+
$LOAD_PATH << __dir__
|
5
5
|
|
6
6
|
require 'helper'
|
7
7
|
|
@@ -20,12 +20,12 @@ class ObjectJuice < Minitest::Test
|
|
20
20
|
end
|
21
21
|
alias == eql?
|
22
22
|
|
23
|
-
def to_json(*
|
23
|
+
def to_json(*_a)
|
24
24
|
%{{"json_class":"#{self.class}","x":#{@x},"y":#{@y}}}
|
25
25
|
end
|
26
26
|
|
27
27
|
def self.json_create(h)
|
28
|
-
|
28
|
+
new(h['x'], h['y'])
|
29
29
|
end
|
30
30
|
end # Jeez
|
31
31
|
|
@@ -45,30 +45,26 @@ class ObjectJuice < Minitest::Test
|
|
45
45
|
end # Jam
|
46
46
|
|
47
47
|
class Jazz < Jam
|
48
|
-
|
49
|
-
|
50
|
-
end
|
51
|
-
def to_hash()
|
48
|
+
|
49
|
+
def to_hash
|
52
50
|
{ 'json_class' => self.class.to_s, 'x' => @x, 'y' => @y }
|
53
51
|
end
|
52
|
+
|
54
53
|
def self.json_create(h)
|
55
|
-
|
54
|
+
new(h['x'], h['y'])
|
56
55
|
end
|
57
56
|
end # Jazz
|
58
57
|
|
59
58
|
class Orange < Jam
|
60
|
-
def initialize(x, y)
|
61
|
-
super
|
62
|
-
end
|
63
59
|
|
64
|
-
def as_json
|
60
|
+
def as_json
|
65
61
|
{ :json_class => self.class,
|
66
62
|
:x => @x,
|
67
63
|
:y => @y }
|
68
64
|
end
|
69
65
|
|
70
66
|
def self.json_create(h)
|
71
|
-
|
67
|
+
new(h['x'], h['y'])
|
72
68
|
end
|
73
69
|
end
|
74
70
|
|
@@ -77,24 +73,21 @@ class ObjectJuice < Minitest::Test
|
|
77
73
|
module Three
|
78
74
|
class Deep
|
79
75
|
|
80
|
-
def initialize()
|
81
|
-
end
|
82
|
-
|
83
76
|
def eql?(o)
|
84
77
|
self.class == o.class
|
85
78
|
end
|
86
79
|
alias == eql?
|
87
80
|
|
88
|
-
def to_hash
|
89
|
-
{'json_class' =>
|
81
|
+
def to_hash
|
82
|
+
{'json_class' => self.class.name.to_s}
|
90
83
|
end
|
91
84
|
|
92
|
-
def to_json(*
|
85
|
+
def to_json(*_a)
|
93
86
|
%{{"json_class":"#{self.class.name}"}}
|
94
87
|
end
|
95
88
|
|
96
|
-
def self.json_create(
|
97
|
-
|
89
|
+
def self.json_create(_h)
|
90
|
+
new()
|
98
91
|
end
|
99
92
|
end # Deep
|
100
93
|
end # Three
|
@@ -102,7 +95,6 @@ class ObjectJuice < Minitest::Test
|
|
102
95
|
|
103
96
|
class Stuck2 < Struct.new(:a, :b)
|
104
97
|
end
|
105
|
-
|
106
98
|
end # One
|
107
99
|
|
108
100
|
class Stuck < Struct.new(:a, :b)
|
@@ -115,7 +107,7 @@ class ObjectJuice < Minitest::Test
|
|
115
107
|
@safe = safe
|
116
108
|
end
|
117
109
|
|
118
|
-
def safe?
|
110
|
+
def safe?
|
119
111
|
@safe
|
120
112
|
end
|
121
113
|
|
@@ -128,8 +120,8 @@ class ObjectJuice < Minitest::Test
|
|
128
120
|
end
|
129
121
|
alias == eql?
|
130
122
|
|
131
|
-
def inspect
|
132
|
-
|
123
|
+
def inspect
|
124
|
+
super + '(' + @safe + ')'
|
133
125
|
end
|
134
126
|
end
|
135
127
|
|
@@ -182,7 +174,7 @@ class ObjectJuice < Minitest::Test
|
|
182
174
|
@json = j
|
183
175
|
end
|
184
176
|
|
185
|
-
def to_json(*
|
177
|
+
def to_json(*_a)
|
186
178
|
@json
|
187
179
|
end
|
188
180
|
|
@@ -206,7 +198,7 @@ class ObjectJuice < Minitest::Test
|
|
206
198
|
@hash = h
|
207
199
|
end
|
208
200
|
|
209
|
-
def dump
|
201
|
+
def dump
|
210
202
|
@hash
|
211
203
|
end
|
212
204
|
|
@@ -237,16 +229,16 @@ class ObjectJuice < Minitest::Test
|
|
237
229
|
|
238
230
|
def test_fixnum
|
239
231
|
dump_and_load(0, false)
|
240
|
-
dump_and_load(
|
241
|
-
dump_and_load(-
|
232
|
+
dump_and_load(12_345, false)
|
233
|
+
dump_and_load(-54_321, false)
|
242
234
|
dump_and_load(1, false)
|
243
235
|
end
|
244
236
|
|
245
237
|
def test_float
|
246
238
|
dump_and_load(0.0, false)
|
247
|
-
dump_and_load(
|
239
|
+
dump_and_load(12_345.6789, false)
|
248
240
|
dump_and_load(70.35, false)
|
249
|
-
dump_and_load(-
|
241
|
+
dump_and_load(-54_321.012, false)
|
250
242
|
dump_and_load(1.7775, false)
|
251
243
|
dump_and_load(2.5024, false)
|
252
244
|
dump_and_load(2.48e16, false)
|
@@ -256,8 +248,8 @@ class ObjectJuice < Minitest::Test
|
|
256
248
|
# NaN does not always == NaN
|
257
249
|
json = Oj.dump(0/0.0, :mode => :object)
|
258
250
|
assert_equal('3.3e14159265358979323846', json)
|
259
|
-
loaded = Oj.load(json)
|
260
|
-
|
251
|
+
loaded = Oj.load(json)
|
252
|
+
assert_predicate(loaded, :nan?)
|
261
253
|
end
|
262
254
|
|
263
255
|
def test_string
|
@@ -269,18 +261,18 @@ class ObjectJuice < Minitest::Test
|
|
269
261
|
|
270
262
|
def test_symbol
|
271
263
|
dump_and_load(:abc, false)
|
272
|
-
dump_and_load(
|
273
|
-
dump_and_load(
|
264
|
+
dump_and_load(':abc', false)
|
265
|
+
dump_and_load(:":xyz", false)
|
274
266
|
end
|
275
267
|
|
276
268
|
def test_encode
|
277
269
|
opts = Oj.default_options
|
278
270
|
Oj.default_options = { :ascii_only => false }
|
279
|
-
dump_and_load(
|
271
|
+
dump_and_load('ぴーたー', false)
|
280
272
|
Oj.default_options = { :ascii_only => true }
|
281
|
-
json = Oj.dump(
|
273
|
+
json = Oj.dump('ぴーたー')
|
282
274
|
assert_equal(%{"\\u3074\\u30fc\\u305f\\u30fc"}, json)
|
283
|
-
dump_and_load(
|
275
|
+
dump_and_load('ぴーたー', false)
|
284
276
|
Oj.default_options = opts
|
285
277
|
end
|
286
278
|
|
@@ -376,15 +368,13 @@ class ObjectJuice < Minitest::Test
|
|
376
368
|
end
|
377
369
|
|
378
370
|
def test_io_file
|
379
|
-
filename = File.join(
|
380
|
-
File.
|
381
|
-
f.write(%{{
|
371
|
+
filename = File.join(__dir__, 'open_file_test.json')
|
372
|
+
File.write(filename, %{{
|
382
373
|
"x":true,
|
383
374
|
"y":58,
|
384
375
|
"z": [1,2,3]
|
385
376
|
}
|
386
377
|
})
|
387
|
-
}
|
388
378
|
f = File.new(filename)
|
389
379
|
obj = Oj.object_load(f)
|
390
380
|
f.close()
|
@@ -414,7 +404,7 @@ class ObjectJuice < Minitest::Test
|
|
414
404
|
def test_non_str_hash_object
|
415
405
|
json = Oj.dump({ 1 => true, :sim => nil }, :mode => :object)
|
416
406
|
h = Oj.load(json, :mode => :strict)
|
417
|
-
assert_equal({
|
407
|
+
assert_equal({'^#1' => [1, true], ':sim' => nil}, h)
|
418
408
|
h = Oj.load(json, :mode => :object)
|
419
409
|
assert_equal({ 1 => true, :sim => nil }, h)
|
420
410
|
end
|
@@ -466,8 +456,8 @@ class ObjectJuice < Minitest::Test
|
|
466
456
|
# mismatch so instead the seconds, nsecs, and gmt_offset are checked
|
467
457
|
# separately along with utc.
|
468
458
|
json = Oj.dump(t, :mode => :object, :time_format => :xmlschema)
|
469
|
-
#puts "*** json for test_xml_time '#{json}'"
|
470
|
-
loaded = Oj.object_load(json)
|
459
|
+
# puts "*** json for test_xml_time '#{json}'"
|
460
|
+
loaded = Oj.object_load(json)
|
471
461
|
assert_equal(t.tv_sec, loaded.tv_sec)
|
472
462
|
if t.respond_to?(:tv_nsec)
|
473
463
|
assert_equal(t.tv_nsec, loaded.tv_nsec)
|
@@ -484,7 +474,7 @@ class ObjectJuice < Minitest::Test
|
|
484
474
|
# mismatch so instead the seconds, nsecs, and gmt_offset are checked
|
485
475
|
# separately along with utc.
|
486
476
|
json = Oj.dump(t, :mode => :object, :time_format => :xmlschema)
|
487
|
-
loaded = Oj.object_load(json)
|
477
|
+
loaded = Oj.object_load(json)
|
488
478
|
assert_equal(t.tv_sec, loaded.tv_sec)
|
489
479
|
if t.respond_to?(:tv_nsec)
|
490
480
|
assert_equal(t.tv_nsec, loaded.tv_nsec)
|
@@ -501,8 +491,8 @@ class ObjectJuice < Minitest::Test
|
|
501
491
|
# mismatch so instead the seconds, nsecs, and gmt_offset are checked
|
502
492
|
# separately along with utc.
|
503
493
|
json = Oj.dump(t, :mode => :object, :time_format => :ruby)
|
504
|
-
#puts "*** json for test_ruby_time '#{json}'"
|
505
|
-
loaded = Oj.object_load(json)
|
494
|
+
# puts "*** json for test_ruby_time '#{json}'"
|
495
|
+
loaded = Oj.object_load(json)
|
506
496
|
assert_equal(t.tv_sec, loaded.tv_sec)
|
507
497
|
if t.respond_to?(:tv_nsec)
|
508
498
|
assert_equal(t.tv_nsec, loaded.tv_nsec)
|
@@ -514,14 +504,14 @@ class ObjectJuice < Minitest::Test
|
|
514
504
|
end
|
515
505
|
|
516
506
|
def test_ruby_time_12345
|
517
|
-
t = Time.new(2015, 1, 5, 21, 37, 7.123456789,
|
507
|
+
t = Time.new(2015, 1, 5, 21, 37, 7.123456789, 12_345/60*60)
|
518
508
|
# The fractional seconds are not always recreated exactly which causes a
|
519
509
|
# mismatch so instead the seconds, nsecs, and gmt_offset are checked
|
520
510
|
# separately along with utc.
|
521
511
|
json = Oj.dump(t, :mode => :object, :time_format => :ruby)
|
522
|
-
#puts "*** json for test_ruby_time '#{json}'"
|
523
|
-
loaded = Oj.object_load(json)
|
524
|
-
#puts "*** loaded: #{loaded}"
|
512
|
+
# puts "*** json for test_ruby_time '#{json}'"
|
513
|
+
loaded = Oj.object_load(json)
|
514
|
+
# puts "*** loaded: #{loaded}"
|
525
515
|
assert_equal(t.tv_sec, loaded.tv_sec)
|
526
516
|
if t.respond_to?(:tv_nsec)
|
527
517
|
assert_equal(t.tv_nsec, loaded.tv_nsec)
|
@@ -538,8 +528,8 @@ class ObjectJuice < Minitest::Test
|
|
538
528
|
# mismatch so instead the seconds, nsecs, and gmt_offset are checked
|
539
529
|
# separately along with utc.
|
540
530
|
json = Oj.dump(t, :mode => :object, :time_format => :ruby)
|
541
|
-
#puts json
|
542
|
-
loaded = Oj.object_load(json)
|
531
|
+
# puts json
|
532
|
+
loaded = Oj.object_load(json)
|
543
533
|
assert_equal(t.tv_sec, loaded.tv_sec)
|
544
534
|
if t.respond_to?(:tv_nsec)
|
545
535
|
assert_equal(t.tv_nsec, loaded.tv_nsec)
|
@@ -559,8 +549,8 @@ class ObjectJuice < Minitest::Test
|
|
559
549
|
# mismatch so instead the seconds, nsecs, and gmt_offset are checked
|
560
550
|
# separately along with utc.
|
561
551
|
json = Oj.dump(t, :mode => :object, :time_format => :unix_zone)
|
562
|
-
#puts json
|
563
|
-
loaded = Oj.object_load(json)
|
552
|
+
# puts json
|
553
|
+
loaded = Oj.object_load(json)
|
564
554
|
assert_equal(t.tv_sec, loaded.tv_sec)
|
565
555
|
if t.respond_to?(:tv_nsec)
|
566
556
|
assert_equal(t.tv_nsec, loaded.tv_nsec)
|
@@ -577,8 +567,8 @@ class ObjectJuice < Minitest::Test
|
|
577
567
|
# mismatch so instead the seconds, nsecs, and gmt_offset are checked
|
578
568
|
# separately along with utc.
|
579
569
|
json = Oj.dump(t, :mode => :object, :time_format => :unix_zone)
|
580
|
-
#puts json
|
581
|
-
loaded = Oj.object_load(json)
|
570
|
+
# puts json
|
571
|
+
loaded = Oj.object_load(json)
|
582
572
|
assert_equal(t.tv_sec, loaded.tv_sec)
|
583
573
|
if t.respond_to?(:tv_nsec)
|
584
574
|
assert_equal(t.tv_nsec, loaded.tv_nsec)
|
@@ -590,13 +580,13 @@ class ObjectJuice < Minitest::Test
|
|
590
580
|
end
|
591
581
|
|
592
582
|
def test_time_unix_zone_12345
|
593
|
-
t = Time.new(2015, 1, 5, 21, 37, 7.123456789,
|
583
|
+
t = Time.new(2015, 1, 5, 21, 37, 7.123456789, 12_345)
|
594
584
|
# The fractional seconds are not always recreated exactly which causes a
|
595
585
|
# mismatch so instead the seconds, nsecs, and gmt_offset are checked
|
596
586
|
# separately along with utc.
|
597
587
|
json = Oj.dump(t, :mode => :object, :time_format => :unix_zone)
|
598
|
-
#puts json
|
599
|
-
loaded = Oj.object_load(json)
|
588
|
+
# puts json
|
589
|
+
loaded = Oj.object_load(json)
|
600
590
|
assert_equal(t.tv_sec, loaded.tv_sec)
|
601
591
|
if t.respond_to?(:tv_nsec)
|
602
592
|
assert_equal(t.tv_nsec, loaded.tv_nsec)
|
@@ -613,8 +603,8 @@ class ObjectJuice < Minitest::Test
|
|
613
603
|
# mismatch so instead the seconds, nsecs, and gmt_offset are checked
|
614
604
|
# separately along with utc.
|
615
605
|
json = Oj.dump(t, :mode => :object, :time_format => :unix_zone)
|
616
|
-
#puts json
|
617
|
-
loaded = Oj.object_load(json)
|
606
|
+
# puts json
|
607
|
+
loaded = Oj.object_load(json)
|
618
608
|
assert_equal(t.tv_sec, loaded.tv_sec)
|
619
609
|
if t.respond_to?(:tv_nsec)
|
620
610
|
assert_equal(t.tv_nsec, loaded.tv_nsec)
|
@@ -640,20 +630,20 @@ class ObjectJuice < Minitest::Test
|
|
640
630
|
begin
|
641
631
|
Oj.object_load(json)
|
642
632
|
rescue Exception => e
|
643
|
-
assert_equal(
|
633
|
+
assert_equal('ArgumentError', e.class().name)
|
644
634
|
return
|
645
635
|
end
|
646
|
-
assert(false,
|
636
|
+
assert(false, '*** expected an exception')
|
647
637
|
end
|
648
638
|
|
649
639
|
def test_json_object_not_hat_hash
|
650
640
|
json = %{{"^#x":[1,2]}}
|
651
641
|
h = Oj.object_load(json)
|
652
|
-
assert_equal({1 => 2}, h)
|
642
|
+
assert_equal({1 => 2}, h)
|
653
643
|
|
654
644
|
json = %{{"~#x":[1,2]}}
|
655
645
|
h = Oj.object_load(json)
|
656
|
-
assert_equal({'~#x' => [1, 2]}, h)
|
646
|
+
assert_equal({'~#x' => [1, 2]}, h)
|
657
647
|
end
|
658
648
|
|
659
649
|
def test_json_struct
|
@@ -670,14 +660,14 @@ class ObjectJuice < Minitest::Test
|
|
670
660
|
s = Struct.new(:x, :y)
|
671
661
|
obj = s.new(1, 2)
|
672
662
|
json = Oj.dump(obj, :indent => 2, :mode => :object)
|
673
|
-
#puts json
|
674
|
-
loaded = Oj.object_load(json)
|
663
|
+
# puts json
|
664
|
+
loaded = Oj.object_load(json)
|
675
665
|
assert_equal(obj.members, loaded.members)
|
676
666
|
assert_equal(obj.values, loaded.values)
|
677
667
|
end
|
678
668
|
|
679
669
|
def test_json_non_str_hash
|
680
|
-
obj = { 59 =>
|
670
|
+
obj = { 59 => 'young', false => true }
|
681
671
|
dump_and_load(obj, false)
|
682
672
|
end
|
683
673
|
|
@@ -781,24 +771,24 @@ class ObjectJuice < Minitest::Test
|
|
781
771
|
err = e
|
782
772
|
end
|
783
773
|
json = Oj.dump(err, :mode => :object, :indent => 2)
|
784
|
-
#puts "*** #{json}"
|
774
|
+
# puts "*** #{json}"
|
785
775
|
e2 = Oj.load(json, :mode => :strict)
|
786
776
|
assert_equal(err.class.to_s, e2['^o'])
|
787
777
|
assert_equal(err.message, e2['~mesg'])
|
788
778
|
assert_equal(err.backtrace, e2['~bt'])
|
789
779
|
e2 = Oj.load(json, :mode => :object)
|
790
780
|
if 'rubinius' == $ruby
|
791
|
-
assert_equal(e.class, e2.class)
|
792
|
-
assert_equal(e.message, e2.message)
|
793
|
-
assert_equal(e.backtrace, e2.backtrace)
|
781
|
+
assert_equal(e.class, e2.class)
|
782
|
+
assert_equal(e.message, e2.message)
|
783
|
+
assert_equal(e.backtrace, e2.backtrace)
|
794
784
|
else
|
795
|
-
assert_equal(e, e2)
|
785
|
+
assert_equal(e, e2)
|
796
786
|
end
|
797
787
|
end
|
798
788
|
|
799
|
-
class SubX <
|
789
|
+
class SubX < StandardError
|
800
790
|
def initialize
|
801
|
-
super(
|
791
|
+
super('sub')
|
802
792
|
@xyz = 123
|
803
793
|
end
|
804
794
|
end
|
@@ -811,13 +801,13 @@ class ObjectJuice < Minitest::Test
|
|
811
801
|
err = e
|
812
802
|
end
|
813
803
|
json = Oj.dump(err, :mode => :object, :indent => 2)
|
814
|
-
#puts "*** #{json}"
|
804
|
+
# puts "*** #{json}"
|
815
805
|
e2 = Oj.load(json, :mode => :strict)
|
816
806
|
assert_equal(err.class.to_s, e2['^o'])
|
817
807
|
assert_equal(err.message, e2['~mesg'])
|
818
808
|
assert_equal(err.backtrace, e2['~bt'])
|
819
809
|
e2 = Oj.load(json, :mode => :object)
|
820
|
-
assert_equal(e, e2)
|
810
|
+
assert_equal(e, e2)
|
821
811
|
end
|
822
812
|
|
823
813
|
def test_range_object
|
@@ -826,7 +816,7 @@ class ObjectJuice < Minitest::Test
|
|
826
816
|
if 'ruby' == $ruby
|
827
817
|
assert_equal(%{{"^u":["Range",1,7,false]}}, json)
|
828
818
|
else
|
829
|
-
|
819
|
+
assert_equal(%{{"^O":"Range","begin":1,"end":7,"exclude_end?":false}}, json)
|
830
820
|
end
|
831
821
|
dump_and_load(1..7, false)
|
832
822
|
dump_and_load(1..1, false)
|
@@ -958,7 +948,7 @@ class ObjectJuice < Minitest::Test
|
|
958
948
|
|
959
949
|
def test_odd_datetime
|
960
950
|
dump_and_load(DateTime.new(2012, 6, 19, 13, 5, Rational(4, 3)), false)
|
961
|
-
dump_and_load(DateTime.new(2012, 6, 19, 13, 5, Rational(
|
951
|
+
dump_and_load(DateTime.new(2012, 6, 19, 13, 5, Rational(7_123_456_789, 1_000_000_000)), false)
|
962
952
|
end
|
963
953
|
|
964
954
|
def test_bag
|
@@ -968,13 +958,13 @@ class ObjectJuice < Minitest::Test
|
|
968
958
|
"y":58 }}
|
969
959
|
obj = Oj.load(json, :mode => :object, :auto_define => true)
|
970
960
|
assert_equal('ObjectJuice::Jem', obj.class.name)
|
971
|
-
|
961
|
+
assert(obj.x)
|
972
962
|
assert_equal(58, obj.y)
|
973
963
|
end
|
974
964
|
|
975
965
|
def test_odd_string
|
976
966
|
Oj.register_odd(Strung, Strung, :create, :to_s, 'safe?')
|
977
|
-
s = Strung.new(
|
967
|
+
s = Strung.new('Pete', true)
|
978
968
|
dump_and_load(s, false)
|
979
969
|
end
|
980
970
|
|
@@ -995,7 +985,7 @@ class ObjectJuice < Minitest::Test
|
|
995
985
|
end
|
996
986
|
|
997
987
|
def test_auto_string
|
998
|
-
s = AutoStrung.new(
|
988
|
+
s = AutoStrung.new('Pete', true)
|
999
989
|
dump_and_load(s, false)
|
1000
990
|
end
|
1001
991
|
|
@@ -1014,7 +1004,7 @@ class ObjectJuice < Minitest::Test
|
|
1014
1004
|
def dump_and_load(obj, trace=false)
|
1015
1005
|
json = Oj.dump(obj, :indent => 2, :mode => :object)
|
1016
1006
|
puts json if trace
|
1017
|
-
loaded = Oj.object_load(json)
|
1007
|
+
loaded = Oj.object_load(json)
|
1018
1008
|
if obj.nil?
|
1019
1009
|
assert_nil(loaded)
|
1020
1010
|
else
|
data/test/test_parser.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 'test_parser_usual'
|
data/test/test_parser_debug.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'
|
data/test/test_parser_saj.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
#
|
2
|
+
# frozen_string_literal: true
|
3
3
|
|
4
|
-
|
4
|
+
$LOAD_PATH << __dir__
|
5
5
|
|
6
6
|
require 'helper'
|
7
7
|
|
@@ -23,7 +23,7 @@ $json = %|{
|
|
23
23
|
class AllSaj < Oj::Saj
|
24
24
|
attr_accessor :calls
|
25
25
|
|
26
|
-
def initialize
|
26
|
+
def initialize
|
27
27
|
@calls = []
|
28
28
|
|
29
29
|
super
|
@@ -58,7 +58,7 @@ end # AllSaj
|
|
58
58
|
class LocSaj
|
59
59
|
attr_accessor :calls
|
60
60
|
|
61
|
-
def initialize
|
61
|
+
def initialize
|
62
62
|
@calls = []
|
63
63
|
end
|
64
64
|
|
@@ -128,7 +128,7 @@ class SajTest < Minitest::Test
|
|
128
128
|
p = Oj::Parser.new(:saj)
|
129
129
|
p.handler = handler
|
130
130
|
p.parse(json)
|
131
|
-
assert_equal([[:add_value,
|
131
|
+
assert_equal([[:add_value, 12_345, nil]], handler.calls)
|
132
132
|
end
|
133
133
|
|
134
134
|
def test_float
|
@@ -137,7 +137,7 @@ class SajTest < Minitest::Test
|
|
137
137
|
p = Oj::Parser.new(:saj)
|
138
138
|
p.handler = handler
|
139
139
|
p.parse(json)
|
140
|
-
assert_equal([[:add_value,
|
140
|
+
assert_equal([[:add_value, 12_345.6789, nil]], handler.calls)
|
141
141
|
end
|
142
142
|
|
143
143
|
def test_float_exp
|
@@ -148,7 +148,7 @@ class SajTest < Minitest::Test
|
|
148
148
|
p.parse(json)
|
149
149
|
assert_equal(1, handler.calls.size)
|
150
150
|
assert_equal(:add_value, handler.calls[0][0])
|
151
|
-
assert_equal((
|
151
|
+
assert_equal((12_345.6789e7 * 10_000).to_i, (handler.calls[0][1] * 10_000).to_i)
|
152
152
|
end
|
153
153
|
|
154
154
|
def test_bignum
|
@@ -159,7 +159,7 @@ class SajTest < Minitest::Test
|
|
159
159
|
p.parse(json)
|
160
160
|
assert_equal(1, handler.calls.size)
|
161
161
|
assert_equal(:add_value, handler.calls[0][0])
|
162
|
-
assert_equal(-
|
162
|
+
assert_equal(-118_999, (handler.calls[0][1] * 10_000).to_i)
|
163
163
|
end
|
164
164
|
|
165
165
|
def test_bignum_loc
|
@@ -177,10 +177,10 @@ class SajTest < Minitest::Test
|
|
177
177
|
p.handler = handler
|
178
178
|
p.parse(json)
|
179
179
|
assert_equal(6, handler.calls.size)
|
180
|
-
assert_equal(1_923_380, (handler.calls[1][1] *
|
180
|
+
assert_equal(1_923_380, (handler.calls[1][1] * 10_000).to_i)
|
181
181
|
handler.calls[1][1] = 1_923_380
|
182
182
|
assert_equal([[:hash_start, nil, 1, 1],
|
183
|
-
[:add_value,
|
183
|
+
[:add_value, 1_923_380, 'width', 2, 30],
|
184
184
|
[:hash_start, 'xaxis', 3, 12],
|
185
185
|
[:add_value, 'y', 'anchor', 4, 17],
|
186
186
|
[:hash_end, 'xaxis', 5, 3],
|
@@ -262,13 +262,13 @@ class SajTest < Minitest::Test
|
|
262
262
|
p.handler = handler
|
263
263
|
p.parse(json)
|
264
264
|
assert_equal([
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
265
|
+
[:array_start, nil],
|
266
|
+
[:add_value, true, nil],
|
267
|
+
[:array_end, nil],
|
268
|
+
[:array_start, nil],
|
269
|
+
[:add_value, false, nil],
|
270
|
+
[:array_end, nil],
|
271
|
+
], handler.calls)
|
272
272
|
end
|
273
273
|
|
274
274
|
def test_io
|
@@ -278,11 +278,11 @@ class SajTest < Minitest::Test
|
|
278
278
|
p.handler = handler
|
279
279
|
p.load(StringIO.new(json))
|
280
280
|
assert_equal([
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
281
|
+
[:array_start, nil],
|
282
|
+
[:add_value, true, nil],
|
283
|
+
[:add_value, false, nil],
|
284
|
+
[:array_end, nil],
|
285
|
+
], handler.calls)
|
286
286
|
end
|
287
287
|
|
288
288
|
def test_file
|
@@ -291,11 +291,11 @@ class SajTest < Minitest::Test
|
|
291
291
|
p.handler = handler
|
292
292
|
p.file('saj_test.json')
|
293
293
|
assert_equal([
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
294
|
+
[:array_start, nil],
|
295
|
+
[:add_value, true, nil],
|
296
|
+
[:add_value, false, nil],
|
297
|
+
[:array_end, nil],
|
298
|
+
], handler.calls)
|
299
299
|
end
|
300
300
|
|
301
301
|
def test_default
|
@@ -304,10 +304,10 @@ class SajTest < Minitest::Test
|
|
304
304
|
Oj::Parser.saj.handler = handler
|
305
305
|
Oj::Parser.saj.parse(json)
|
306
306
|
assert_equal([
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
307
|
+
[:array_start, nil],
|
308
|
+
[:add_value, true, nil],
|
309
|
+
[:array_end, nil],
|
310
|
+
], handler.calls)
|
311
311
|
end
|
312
312
|
|
313
313
|
def test_loc
|
data/test/test_parser_usual.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
#
|
2
|
+
# frozen_string_literal: true
|
3
3
|
|
4
|
-
|
4
|
+
$LOAD_PATH << __dir__
|
5
5
|
|
6
6
|
require 'helper'
|
7
7
|
|
@@ -67,7 +67,7 @@ class UsualTest < Minitest::Test
|
|
67
67
|
|
68
68
|
def test_symbol_keys
|
69
69
|
p = Oj::Parser.new(:usual)
|
70
|
-
|
70
|
+
refute(p.symbol_keys)
|
71
71
|
p.symbol_keys = true
|
72
72
|
doc = p.parse('{"a": true, "b": false}')
|
73
73
|
assert_equal({a: true, b: false}, doc)
|