oj 2.18.5 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +33 -226
- data/ext/oj/circarray.c +0 -25
- data/ext/oj/circarray.h +0 -25
- data/ext/oj/code.c +227 -0
- data/ext/oj/code.h +40 -0
- data/ext/oj/compat.c +126 -38
- data/ext/oj/custom.c +1097 -0
- data/ext/oj/dump.c +658 -2376
- data/ext/oj/dump.h +92 -0
- data/ext/oj/dump_compat.c +937 -0
- data/ext/oj/dump_leaf.c +254 -0
- data/ext/oj/dump_object.c +810 -0
- data/ext/oj/dump_rails.c +329 -0
- data/ext/oj/dump_strict.c +416 -0
- data/ext/oj/err.c +0 -25
- data/ext/oj/err.h +8 -2
- data/ext/oj/fast.c +24 -24
- data/ext/oj/mimic_json.c +817 -0
- data/ext/oj/mimic_rails.c +806 -0
- data/ext/oj/mimic_rails.h +17 -0
- data/ext/oj/object.c +18 -72
- data/ext/oj/odd.c +0 -25
- data/ext/oj/odd.h +2 -27
- data/ext/oj/oj.c +655 -1503
- data/ext/oj/oj.h +93 -40
- data/ext/oj/parse.c +99 -46
- data/ext/oj/parse.h +12 -26
- data/ext/oj/reader.c +1 -25
- data/ext/oj/reader.h +3 -25
- data/ext/oj/resolve.c +9 -11
- data/ext/oj/resolve.h +2 -2
- data/ext/oj/rxclass.c +133 -0
- data/ext/oj/rxclass.h +27 -0
- data/ext/oj/saj.c +4 -25
- data/ext/oj/scp.c +3 -25
- data/ext/oj/sparse.c +89 -13
- data/ext/oj/stream_writer.c +301 -0
- data/ext/oj/strict.c +4 -27
- data/ext/oj/string_writer.c +480 -0
- data/ext/oj/val_stack.h +6 -2
- data/lib/oj.rb +1 -23
- data/lib/oj/easy_hash.rb +12 -4
- data/lib/oj/json.rb +172 -0
- data/lib/oj/mimic.rb +123 -18
- data/lib/oj/state.rb +131 -0
- data/lib/oj/version.rb +1 -1
- 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 +79 -0
- data/pages/Modes.md +140 -0
- data/pages/Options.md +250 -0
- data/pages/Rails.md +60 -0
- data/pages/Security.md +20 -0
- data/test/activesupport4/decoding_test.rb +105 -0
- data/test/activesupport4/encoding_test.rb +531 -0
- data/test/activesupport4/test_helper.rb +41 -0
- data/test/activesupport5/decoding_test.rb +125 -0
- data/test/activesupport5/encoding_test.rb +483 -0
- data/test/activesupport5/encoding_test_cases.rb +90 -0
- data/test/activesupport5/test_helper.rb +50 -0
- data/test/activesupport5/time_zone_test_helpers.rb +24 -0
- data/test/json_gem/json_addition_test.rb +216 -0
- data/test/json_gem/json_common_interface_test.rb +143 -0
- data/test/json_gem/json_encoding_test.rb +109 -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 +383 -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 +18 -0
- data/test/perf_compat.rb +30 -28
- data/test/perf_object.rb +1 -1
- data/test/perf_strict.rb +18 -1
- data/test/sample.rb +0 -1
- data/test/test_compat.rb +169 -93
- data/test/test_custom.rb +355 -0
- data/test/test_file.rb +0 -8
- data/test/test_null.rb +376 -0
- data/test/test_object.rb +268 -3
- data/test/test_scp.rb +22 -1
- data/test/test_strict.rb +160 -4
- data/test/test_various.rb +52 -620
- data/test/tests.rb +14 -0
- data/test/tests_mimic.rb +14 -0
- data/test/tests_mimic_addition.rb +7 -0
- metadata +89 -47
- data/test/activesupport_datetime_test.rb +0 -23
- data/test/bug.rb +0 -51
- 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/foo.rb +0 -24
- 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_various.rb
CHANGED
@@ -132,6 +132,7 @@ class Juice < Minitest::Test
|
|
132
132
|
:symbol_keys=>true,
|
133
133
|
:bigdecimal_as_decimal=>false,
|
134
134
|
:use_to_json=>false,
|
135
|
+
:use_to_hash=>false,
|
135
136
|
:use_as_json=>false,
|
136
137
|
:nilnil=>true,
|
137
138
|
:empty_string=>true,
|
@@ -151,8 +152,12 @@ class Juice < Minitest::Test
|
|
151
152
|
:nan=>:huge,
|
152
153
|
:hash_class=>Hash,
|
153
154
|
:omit_nil=>false,
|
155
|
+
:allow_nan=>true,
|
156
|
+
:array_class=>Array,
|
154
157
|
}
|
155
158
|
Oj.default_options = alt
|
159
|
+
#keys = alt.keys
|
160
|
+
#Oj.default_options.keys.each { |k| puts k unless keys.include? k}
|
156
161
|
opts = Oj.default_options()
|
157
162
|
assert_equal(alt, opts);
|
158
163
|
|
@@ -193,14 +198,16 @@ class Juice < Minitest::Test
|
|
193
198
|
|
194
199
|
n = Oj.load('1000.0000123456789')
|
195
200
|
assert_equal(BigDecimal, n.class)
|
196
|
-
assert_equal('0.10000000123456789E4', n.to_s)
|
201
|
+
assert_equal('0.10000000123456789E4', n.to_s.upcase)
|
197
202
|
|
198
203
|
n = Oj.load('-0.000012345678901234567')
|
199
204
|
assert_equal(BigDecimal, n.class)
|
200
|
-
assert_equal('-0.12345678901234567E-4', n.to_s)
|
205
|
+
assert_equal('-0.12345678901234567E-4', n.to_s.upcase)
|
201
206
|
|
202
207
|
end
|
203
208
|
|
209
|
+
=begin
|
210
|
+
# TBD move to custom
|
204
211
|
def test_float_dump
|
205
212
|
Oj.default_options = { :float_precision => 16 }
|
206
213
|
assert_equal('1405460727.723866', Oj.dump(1405460727.723866))
|
@@ -227,45 +234,7 @@ class Juice < Minitest::Test
|
|
227
234
|
assert_equal('80.6', Oj.dump(80.6))
|
228
235
|
assert_equal('-95.640172', Oj.dump(-95.640172))
|
229
236
|
end
|
230
|
-
|
231
|
-
def test_nan_dump
|
232
|
-
assert_equal('null', Oj.dump(0/0.0, :mode => :strict, :nan => :null))
|
233
|
-
assert_equal('NaN', Oj.dump(0/0.0, :mode => :strict, :nan => :word))
|
234
|
-
assert_equal('3.3e14159265358979323846', Oj.dump(0/0.0, :mode => :strict, :nan => :huge))
|
235
|
-
end
|
236
|
-
|
237
|
-
def test_infinity_dump
|
238
|
-
assert_equal('null', Oj.dump(1/0.0, :mode => :strict, :nan => :null))
|
239
|
-
assert_equal('Infinity', Oj.dump(1/0.0, :mode => :strict, :nan => :word))
|
240
|
-
assert_equal('3.0e14159265358979323846', Oj.dump(1/0.0, :mode => :strict, :nan => :huge))
|
241
|
-
end
|
242
|
-
|
243
|
-
def test_neg_infinity_dump
|
244
|
-
assert_equal('null', Oj.dump(-1/0.0, :mode => :strict, :nan => :null))
|
245
|
-
assert_equal('-Infinity', Oj.dump(-1/0.0, :mode => :strict, :nan => :word))
|
246
|
-
assert_equal('-3.0e14159265358979323846', Oj.dump(-1/0.0, :mode => :strict, :nan => :huge))
|
247
|
-
end
|
248
|
-
|
249
|
-
def test_float
|
250
|
-
mode = Oj.default_options()[:mode]
|
251
|
-
Oj.default_options = {:mode => :object}
|
252
|
-
dump_and_load(0.0, false)
|
253
|
-
dump_and_load(12345.6789, false)
|
254
|
-
dump_and_load(70.35, false)
|
255
|
-
dump_and_load(-54321.012, false)
|
256
|
-
dump_and_load(1.7775, false)
|
257
|
-
dump_and_load(2.5024, false)
|
258
|
-
dump_and_load(2.48e16, false)
|
259
|
-
dump_and_load(2.48e100 * 1.0e10, false)
|
260
|
-
dump_and_load(-2.48e100 * 1.0e10, false)
|
261
|
-
dump_and_load(1/0.0, false)
|
262
|
-
# NaN does not always == NaN
|
263
|
-
json = Oj.dump(0/0.0)
|
264
|
-
assert_equal('3.3e14159265358979323846', json)
|
265
|
-
loaded = Oj.load(json);
|
266
|
-
assert_equal(true, loaded.nan?)
|
267
|
-
Oj.default_options = {:mode => mode}
|
268
|
-
end
|
237
|
+
=end
|
269
238
|
|
270
239
|
def test_string
|
271
240
|
dump_and_load('', false)
|
@@ -275,12 +244,6 @@ class Juice < Minitest::Test
|
|
275
244
|
assert_equal("a\u0000a", dump_and_load("a\u0000a", false))
|
276
245
|
end
|
277
246
|
|
278
|
-
def test_string_object
|
279
|
-
Oj.default_options = {:mode => :object}
|
280
|
-
dump_and_load('abc', false)
|
281
|
-
dump_and_load(':abc', false)
|
282
|
-
end
|
283
|
-
|
284
247
|
def test_encode
|
285
248
|
opts = Oj.default_options
|
286
249
|
Oj.default_options = { :ascii_only => false }
|
@@ -375,8 +338,8 @@ class Juice < Minitest::Test
|
|
375
338
|
{"b":2}
|
376
339
|
}
|
377
340
|
results = []
|
378
|
-
Oj.load(json) { |x| results << x }
|
379
|
-
assert_equal([{"a"=>1}, [1,2], [3,4], {"b"=>2}], results)
|
341
|
+
Oj.load(json, :mode => :strict) { |x, start, len| results << [x, start, len] }
|
342
|
+
assert_equal([[{"a"=>1}, 0, 7], [[1,2], 7, 6], [[3,4], 13, 5], [{"b"=>2}, 18, 8]], results)
|
380
343
|
end
|
381
344
|
|
382
345
|
def test_multiple_json_no_callback
|
@@ -433,86 +396,60 @@ class Juice < Minitest::Test
|
|
433
396
|
end
|
434
397
|
|
435
398
|
# Symbol
|
436
|
-
def test_symbol_strict
|
437
|
-
begin
|
438
|
-
Oj.dump(:abc, :mode => :strict)
|
439
|
-
rescue Exception
|
440
|
-
assert(true)
|
441
|
-
return
|
442
|
-
end
|
443
|
-
assert(false, "*** expected an exception")
|
444
|
-
end
|
445
399
|
def test_symbol_null
|
446
400
|
json = Oj.dump(:abc, :mode => :null)
|
447
|
-
assert_equal('null', json)
|
448
|
-
end
|
449
|
-
def test_symbol_compat
|
450
|
-
json = Oj.dump(:abc, :mode => :compat)
|
451
401
|
assert_equal('"abc"', json)
|
452
402
|
end
|
453
|
-
def test_symbol_object
|
454
|
-
Oj.default_options = { :mode => :object }
|
455
|
-
#dump_and_load(''.to_sym, false)
|
456
|
-
dump_and_load(:abc, false)
|
457
|
-
dump_and_load(':xyz'.to_sym, false)
|
458
|
-
end
|
459
403
|
|
460
404
|
# Time
|
461
|
-
def test_time_strict
|
462
|
-
t = Time.local(2012, 1, 5, 23, 58, 7)
|
463
|
-
begin
|
464
|
-
Oj.dump(t, :mode => :strict)
|
465
|
-
rescue Exception
|
466
|
-
assert(true)
|
467
|
-
return
|
468
|
-
end
|
469
|
-
assert(false, "*** expected an exception")
|
470
|
-
end
|
471
405
|
def test_time_null
|
472
406
|
t = Time.local(2012, 1, 5, 23, 58, 7)
|
473
407
|
json = Oj.dump(t, :mode => :null)
|
474
408
|
assert_equal('null', json)
|
475
409
|
end
|
476
|
-
|
410
|
+
|
411
|
+
=begin
|
412
|
+
# TBD make thse tests for cusom mode
|
413
|
+
def test_unix_time_custom
|
477
414
|
t = Time.xmlschema("2012-01-05T23:58:07.123456000+09:00")
|
478
415
|
#t = Time.local(2012, 1, 5, 23, 58, 7, 123456)
|
479
|
-
json = Oj.dump(t, :mode => :
|
416
|
+
json = Oj.dump(t, :mode => :custom, :time_format => :unix)
|
480
417
|
assert_equal(%{1325775487.123456000}, json)
|
481
418
|
end
|
482
|
-
def
|
419
|
+
def test_unix_time_custom_precision
|
483
420
|
t = Time.xmlschema("2012-01-05T23:58:07.123456789+09:00")
|
484
421
|
#t = Time.local(2012, 1, 5, 23, 58, 7, 123456)
|
485
|
-
json = Oj.dump(t, :mode => :
|
422
|
+
json = Oj.dump(t, :mode => :custom, :second_precision => 5, :time_format => :unix)
|
486
423
|
assert_equal(%{1325775487.12346}, json)
|
487
424
|
t = Time.xmlschema("2012-01-05T23:58:07.999600+09:00")
|
488
|
-
json = Oj.dump(t, :mode => :
|
425
|
+
json = Oj.dump(t, :mode => :custom, :second_precision => 3, :time_format => :unix)
|
489
426
|
assert_equal(%{1325775488.000}, json)
|
490
427
|
end
|
491
|
-
def
|
428
|
+
def test_unix_time_custom_early
|
492
429
|
t = Time.xmlschema("1954-01-05T00:00:00.123456789+00:00")
|
493
|
-
json = Oj.dump(t, :mode => :
|
430
|
+
json = Oj.dump(t, :mode => :custom, :second_precision => 5, :time_format => :unix)
|
494
431
|
assert_equal(%{-504575999.87654}, json)
|
495
432
|
end
|
496
|
-
def
|
433
|
+
def test_unix_time_custom_1970
|
497
434
|
t = Time.xmlschema("1970-01-01T00:00:00.123456789+00:00")
|
498
|
-
json = Oj.dump(t, :mode => :
|
435
|
+
json = Oj.dump(t, :mode => :custom, :second_precision => 5, :time_format => :unix)
|
499
436
|
assert_equal(%{0.12346}, json)
|
500
437
|
end
|
501
|
-
def
|
438
|
+
def test_ruby_time_custom
|
502
439
|
t = Time.xmlschema("2012-01-05T23:58:07.123456000+09:00")
|
503
|
-
json = Oj.dump(t, :mode => :
|
440
|
+
json = Oj.dump(t, :mode => :custom, :time_format => :ruby)
|
504
441
|
#assert_equal(%{"2012-01-05 23:58:07 +0900"}, json)
|
505
442
|
assert_equal(%{"#{t.to_s}"}, json)
|
506
443
|
end
|
507
|
-
def
|
444
|
+
def test_xml_time_custom
|
508
445
|
begin
|
509
446
|
t = Time.new(2012, 1, 5, 23, 58, 7.123456000, 34200)
|
510
|
-
json = Oj.dump(t, :mode => :
|
447
|
+
json = Oj.dump(t, :mode => :custom, :time_format => :xmlschema)
|
511
448
|
assert_equal(%{"2012-01-05T23:58:07.123456000+09:30"}, json)
|
512
449
|
rescue Exception
|
513
450
|
# some Rubies (1.8.7) do not allow the timezome to be set
|
514
451
|
t = Time.local(2012, 1, 5, 23, 58, 7, 123456)
|
515
|
-
json = Oj.dump(t, :mode => :
|
452
|
+
json = Oj.dump(t, :mode => :custom, :time_format => :xmlschema)
|
516
453
|
tz = t.utc_offset
|
517
454
|
# Ruby does not handle a %+02d properly so...
|
518
455
|
sign = '+'
|
@@ -523,15 +460,15 @@ class Juice < Minitest::Test
|
|
523
460
|
assert_equal(%{"2012-01-05T23:58:07.123456000%s%02d:%02d"} % [sign, tz / 3600, tz / 60 % 60], json)
|
524
461
|
end
|
525
462
|
end
|
526
|
-
def
|
463
|
+
def test_xml_time_custom_no_secs
|
527
464
|
begin
|
528
465
|
t = Time.new(2012, 1, 5, 23, 58, 7.0, 34200)
|
529
|
-
json = Oj.dump(t, :mode => :
|
466
|
+
json = Oj.dump(t, :mode => :custom, :time_format => :xmlschema)
|
530
467
|
assert_equal(%{"2012-01-05T23:58:07+09:30"}, json)
|
531
468
|
rescue Exception
|
532
469
|
# some Rubies (1.8.7) do not allow the timezome to be set
|
533
470
|
t = Time.local(2012, 1, 5, 23, 58, 7, 0)
|
534
|
-
json = Oj.dump(t, :mode => :
|
471
|
+
json = Oj.dump(t, :mode => :custom, :time_format => :xmlschema)
|
535
472
|
tz = t.utc_offset
|
536
473
|
# Ruby does not handle a %+02d properly so...
|
537
474
|
sign = '+'
|
@@ -542,15 +479,15 @@ class Juice < Minitest::Test
|
|
542
479
|
assert_equal(%{"2012-01-05T23:58:07%s%02d:%02d"} % [sign, tz / 3600, tz / 60 % 60], json)
|
543
480
|
end
|
544
481
|
end
|
545
|
-
def
|
482
|
+
def test_xml_time_custom_precision
|
546
483
|
begin
|
547
484
|
t = Time.new(2012, 1, 5, 23, 58, 7.123456789, 32400)
|
548
|
-
json = Oj.dump(t, :mode => :
|
485
|
+
json = Oj.dump(t, :mode => :custom, :time_format => :xmlschema, :second_precision => 5)
|
549
486
|
assert_equal(%{"2012-01-05T23:58:07.12346+09:00"}, json)
|
550
487
|
rescue Exception
|
551
488
|
# some Rubies (1.8.7) do not allow the timezome to be set
|
552
489
|
t = Time.local(2012, 1, 5, 23, 58, 7, 123456)
|
553
|
-
json = Oj.dump(t, :mode => :
|
490
|
+
json = Oj.dump(t, :mode => :custom, :time_format => :xmlschema, :second_precision => 5)
|
554
491
|
tz = t.utc_offset
|
555
492
|
# Ruby does not handle a %+02d properly so...
|
556
493
|
sign = '+'
|
@@ -561,15 +498,15 @@ class Juice < Minitest::Test
|
|
561
498
|
assert_equal(%{"2012-01-05T23:58:07.12346%s%02d:%02d"} % [sign, tz / 3600, tz / 60 % 60], json)
|
562
499
|
end
|
563
500
|
end
|
564
|
-
def
|
501
|
+
def test_xml_time_custom_precision_round
|
565
502
|
begin
|
566
|
-
t = Time.new(2012, 1, 5, 23, 58, 7.
|
567
|
-
json = Oj.dump(t, :mode => :
|
503
|
+
t = Time.new(2012, 1, 5, 23, 58, 7.99996, 32400)
|
504
|
+
json = Oj.dump(t, :mode => :custom, :time_format => :xmlschema, :second_precision => 4)
|
568
505
|
assert_equal(%{"2012-01-05T23:58:08+09:00"}, json)
|
569
506
|
rescue Exception
|
570
507
|
# some Rubies (1.8.7) do not allow the timezome to be set
|
571
508
|
t = Time.local(2012, 1, 5, 23, 58, 7, 999600)
|
572
|
-
json = Oj.dump(t, :mode => :
|
509
|
+
json = Oj.dump(t, :mode => :custom, :time_format => :xmlschema, :second_precision => 3)
|
573
510
|
tz = t.utc_offset
|
574
511
|
# Ruby does not handle a %+02d properly so...
|
575
512
|
sign = '+'
|
@@ -580,82 +517,34 @@ class Juice < Minitest::Test
|
|
580
517
|
assert_equal(%{"2012-01-05T23:58:08%s%02d:%02d"} % [sign, tz / 3600, tz / 60 % 60], json)
|
581
518
|
end
|
582
519
|
end
|
583
|
-
def
|
520
|
+
def test_xml_time_custom_zulu
|
584
521
|
begin
|
585
522
|
t = Time.new(2012, 1, 5, 23, 58, 7.0, 0)
|
586
|
-
json = Oj.dump(t, :mode => :
|
523
|
+
json = Oj.dump(t, :mode => :custom, :time_format => :xmlschema)
|
587
524
|
assert_equal(%{"2012-01-05T23:58:07Z"}, json)
|
588
525
|
rescue Exception
|
589
526
|
# some Rubies (1.8.7) do not allow the timezome to be set
|
590
527
|
t = Time.utc(2012, 1, 5, 23, 58, 7, 0)
|
591
|
-
json = Oj.dump(t, :mode => :
|
528
|
+
json = Oj.dump(t, :mode => :custom, :time_format => :xmlschema)
|
592
529
|
#tz = t.utc_offset
|
593
530
|
assert_equal(%{"2012-01-05T23:58:07Z"}, json)
|
594
531
|
end
|
595
532
|
end
|
533
|
+
=end
|
596
534
|
|
597
535
|
# Class
|
598
|
-
def test_class_strict
|
599
|
-
begin
|
600
|
-
Oj.dump(Juice, :mode => :strict)
|
601
|
-
rescue Exception
|
602
|
-
assert(true)
|
603
|
-
return
|
604
|
-
end
|
605
|
-
assert(false, "*** expected an exception")
|
606
|
-
end
|
607
536
|
def test_class_null
|
608
537
|
json = Oj.dump(Juice, :mode => :null)
|
609
538
|
assert_equal('null', json)
|
610
539
|
end
|
611
|
-
def test_class_compat
|
612
|
-
json = Oj.dump(Juice, :mode => :compat)
|
613
|
-
assert_equal(%{"Juice"}, json)
|
614
|
-
end
|
615
|
-
def test_class_object
|
616
|
-
Oj.default_options = { :mode => :object }
|
617
|
-
dump_and_load(Juice, false)
|
618
|
-
end
|
619
540
|
|
620
541
|
# Module
|
621
|
-
def test_module_strict
|
622
|
-
begin
|
623
|
-
Oj.dump(TestModule, :mode => :strict)
|
624
|
-
rescue Exception
|
625
|
-
assert(true)
|
626
|
-
return
|
627
|
-
end
|
628
|
-
assert(false, "*** expected an exception")
|
629
|
-
end
|
630
542
|
def test_module_null
|
631
543
|
json = Oj.dump(TestModule, :mode => :null)
|
632
544
|
assert_equal('null', json)
|
633
545
|
end
|
634
|
-
def test_module_compat
|
635
|
-
json = Oj.dump(TestModule, :mode => :compat)
|
636
|
-
assert_equal(%{"Juice::TestModule"}, json)
|
637
|
-
end
|
638
|
-
def test_module_object
|
639
|
-
Oj.default_options = { :mode => :object }
|
640
|
-
dump_and_load(TestModule, false)
|
641
|
-
end
|
642
546
|
|
643
547
|
# Hash
|
644
|
-
def test_hash
|
645
|
-
Oj.default_options = { :mode => :strict }
|
646
|
-
dump_and_load({}, false)
|
647
|
-
dump_and_load({ 'true' => true, 'false' => false}, false)
|
648
|
-
dump_and_load({ 'true' => true, 'array' => [], 'hash' => { }}, false)
|
649
|
-
end
|
650
|
-
def test_non_str_hash_strict
|
651
|
-
begin
|
652
|
-
Oj.dump({ 1 => true, 0 => false }, :mode => :strict)
|
653
|
-
rescue Exception
|
654
|
-
assert(true)
|
655
|
-
return
|
656
|
-
end
|
657
|
-
assert(false, "*** expected an exception")
|
658
|
-
end
|
659
548
|
def test_non_str_hash_null
|
660
549
|
begin
|
661
550
|
Oj.dump({ 1 => true, 0 => false }, :mode => :null)
|
@@ -665,27 +554,7 @@ class Juice < Minitest::Test
|
|
665
554
|
end
|
666
555
|
assert(false, "*** expected an exception")
|
667
556
|
end
|
668
|
-
|
669
|
-
json = Oj.dump({ 1 => true, 0 => false }, :mode => :compat)
|
670
|
-
h = Oj.load(json, :mode => :strict)
|
671
|
-
assert_equal({ "1" => true, "0" => false }, h)
|
672
|
-
end
|
673
|
-
def test_non_str_hash_object
|
674
|
-
Oj.default_options = { :mode => :object }
|
675
|
-
json = Oj.dump({ 1 => true, :sim => nil })
|
676
|
-
h = Oj.load(json, :mode => :strict)
|
677
|
-
assert_equal({"^#1" => [1, true], ":sim" => nil}, h)
|
678
|
-
h = Oj.load(json)
|
679
|
-
assert_equal({ 1 => true, :sim => nil }, h)
|
680
|
-
end
|
681
|
-
def test_mixed_hash_object
|
682
|
-
Oj.default_options = { :mode => :object }
|
683
|
-
json = Oj.dump({ 1 => true, 'nil' => nil, :sim => 4 })
|
684
|
-
h = Oj.load(json, :mode => :strict)
|
685
|
-
assert_equal({"^#1" => [1, true], "nil" => nil, ":sim" => 4}, h)
|
686
|
-
h = Oj.load(json)
|
687
|
-
assert_equal({ 1 => true, 'nil' => nil, :sim => 4 }, h)
|
688
|
-
end
|
557
|
+
|
689
558
|
def test_hash_not_closed
|
690
559
|
begin
|
691
560
|
Oj.load('{')
|
@@ -697,297 +566,44 @@ class Juice < Minitest::Test
|
|
697
566
|
end
|
698
567
|
|
699
568
|
# Object with to_json()
|
700
|
-
def test_json_object_strict
|
701
|
-
obj = Jeez.new(true, 58)
|
702
|
-
begin
|
703
|
-
Oj.dump(obj, :mode => :strict)
|
704
|
-
rescue Exception
|
705
|
-
assert(true)
|
706
|
-
return
|
707
|
-
end
|
708
|
-
assert(false, "*** expected an exception")
|
709
|
-
end
|
710
569
|
def test_json_object_null
|
711
570
|
obj = Jeez.new(true, 58)
|
712
571
|
json = Oj.dump(obj, :mode => :null)
|
713
572
|
assert_equal('null', json)
|
714
573
|
end
|
715
|
-
def test_json_object_compat
|
716
|
-
Oj.default_options = { :mode => :compat, :use_to_json => true }
|
717
|
-
obj = Jeez.new(true, 58)
|
718
|
-
json = Oj.dump(obj, :indent => 2)
|
719
|
-
assert(%{{"json_class":"Juice::Jeez","x":true,"y":58}
|
720
|
-
} == json ||
|
721
|
-
%{{"json_class":"Juice::Jeez","y":58,"x":true}
|
722
|
-
} == json)
|
723
|
-
dump_and_load(obj, false)
|
724
|
-
Oj.default_options = { :mode => :compat, :use_to_json => false }
|
725
|
-
end
|
726
|
-
def test_json_object_create_id
|
727
|
-
Oj.default_options = { :mode => :compat, :create_id => 'kson_class' }
|
728
|
-
expected = Jeez.new(true, 58)
|
729
|
-
json = %{{"kson_class":"Juice::Jeez","x":true,"y":58}}
|
730
|
-
obj = Oj.load(json)
|
731
|
-
assert_equal(expected, obj)
|
732
|
-
Oj.default_options = { :create_id => 'json_class' }
|
733
|
-
end
|
734
|
-
def test_json_object_object
|
735
|
-
obj = Jeez.new(true, 58)
|
736
|
-
json = Oj.dump(obj, :mode => :object, :indent => 2)
|
737
|
-
assert(%{{
|
738
|
-
"^o":"Juice::Jeez",
|
739
|
-
"x":true,
|
740
|
-
"y":58
|
741
|
-
}
|
742
|
-
} == json ||
|
743
|
-
%{{
|
744
|
-
"^o":"Juice::Jeez",
|
745
|
-
"y":58,
|
746
|
-
"x":true
|
747
|
-
}
|
748
|
-
} == json)
|
749
|
-
obj2 = Oj.load(json, :mode => :object)
|
750
|
-
assert_equal(obj, obj2)
|
751
|
-
end
|
752
574
|
|
753
575
|
# Object with to_hash()
|
754
|
-
def test_to_hash_object_strict
|
755
|
-
obj = Jazz.new(true, 58)
|
756
|
-
begin
|
757
|
-
Oj.dump(obj, :mode => :strict)
|
758
|
-
rescue Exception
|
759
|
-
assert(true)
|
760
|
-
return
|
761
|
-
end
|
762
|
-
assert(false, "*** expected an exception")
|
763
|
-
end
|
764
576
|
def test_to_hash_object_null
|
765
577
|
obj = Jazz.new(true, 58)
|
766
578
|
json = Oj.dump(obj, :mode => :null)
|
767
579
|
assert_equal('null', json)
|
768
580
|
end
|
769
|
-
def test_to_hash_object_compat
|
770
|
-
Oj.default_options = { :use_to_json => true }
|
771
|
-
obj = Jazz.new(true, 58)
|
772
|
-
json = Oj.dump(obj, :mode => :compat, :indent => 2)
|
773
|
-
h = Oj.load(json, :mode => :strict)
|
774
|
-
assert_equal(obj.to_hash, h)
|
775
|
-
end
|
776
|
-
def test_to_hash_object_object
|
777
|
-
obj = Jazz.new(true, 58)
|
778
|
-
json = Oj.dump(obj, :mode => :object, :indent => 2)
|
779
|
-
assert(%{{
|
780
|
-
"^o":"Juice::Jazz",
|
781
|
-
"x":true,
|
782
|
-
"y":58
|
783
|
-
}
|
784
|
-
} == json ||
|
785
|
-
%{{
|
786
|
-
"^o":"Juice::Jazz",
|
787
|
-
"y":58,
|
788
|
-
"x":true
|
789
|
-
}
|
790
|
-
} == json)
|
791
|
-
obj2 = Oj.load(json, :mode => :object)
|
792
|
-
assert_equal(obj, obj2)
|
793
|
-
end
|
794
581
|
|
795
582
|
# Object with as_json() # contributed by sauliusg
|
796
|
-
def test_as_json_object_strict
|
797
|
-
obj = Orange.new(true, 58)
|
798
|
-
begin
|
799
|
-
Oj.dump(obj, :mode => :strict)
|
800
|
-
rescue Exception
|
801
|
-
assert(true)
|
802
|
-
return
|
803
|
-
end
|
804
|
-
assert(false, "*** expected an exception")
|
805
|
-
end
|
806
|
-
|
807
583
|
def test_as_json_object_null
|
808
584
|
obj = Orange.new(true, 58)
|
809
585
|
json = Oj.dump(obj, :mode => :null)
|
810
586
|
assert_equal('null', json)
|
811
587
|
end
|
812
588
|
|
813
|
-
def test_as_json_object_compat_hash
|
814
|
-
Oj.default_options = { :mode => :compat, :use_as_json => true }
|
815
|
-
obj = Orange.new(true, 58)
|
816
|
-
json = Oj.dump(obj, :indent => 2)
|
817
|
-
assert(!json.nil?)
|
818
|
-
dump_and_load(obj, false)
|
819
|
-
end
|
820
|
-
|
821
|
-
def test_as_json_object_compat_non_hash
|
822
|
-
Oj.default_options = { :mode => :compat, :use_as_json => true }
|
823
|
-
obj = Melon.new(true, 58)
|
824
|
-
json = Oj.dump(obj, :indent => 2)
|
825
|
-
assert_equal(%{"true 58"}, json)
|
826
|
-
end
|
827
|
-
|
828
|
-
def test_as_json_object_object
|
829
|
-
obj = Orange.new(true, 58)
|
830
|
-
json = Oj.dump(obj, :mode => :object, :indent => 2)
|
831
|
-
assert(%{{
|
832
|
-
"^o":"Juice::Orange",
|
833
|
-
"x":true,
|
834
|
-
"y":58
|
835
|
-
}
|
836
|
-
} == json ||
|
837
|
-
%{{
|
838
|
-
"^o":"Juice::Orange",
|
839
|
-
"y":58,
|
840
|
-
"x":true
|
841
|
-
}
|
842
|
-
} == json)
|
843
|
-
obj2 = Oj.load(json, :mode => :object)
|
844
|
-
assert_equal(obj, obj2)
|
845
|
-
end
|
846
|
-
|
847
589
|
# Object without to_json() or to_hash()
|
848
|
-
def test_object_strict
|
849
|
-
obj = Jam.new(true, 58)
|
850
|
-
begin
|
851
|
-
Oj.dump(obj, :mode => :strict)
|
852
|
-
rescue Exception
|
853
|
-
assert(true)
|
854
|
-
return
|
855
|
-
end
|
856
|
-
assert(false, "*** expected an exception")
|
857
|
-
end
|
858
590
|
def test_object_null
|
859
591
|
obj = Jam.new(true, 58)
|
860
592
|
json = Oj.dump(obj, :mode => :null)
|
861
593
|
assert_equal('null', json)
|
862
594
|
end
|
863
|
-
def test_object_compat
|
864
|
-
obj = Jam.new(true, 58)
|
865
|
-
json = Oj.dump(obj, :mode => :compat, :indent => 2)
|
866
|
-
assert(%{{
|
867
|
-
"x":true,
|
868
|
-
"y":58
|
869
|
-
}
|
870
|
-
} == json ||
|
871
|
-
%{{
|
872
|
-
"y":58,
|
873
|
-
"x":true
|
874
|
-
}
|
875
|
-
} == json)
|
876
|
-
end
|
877
|
-
def test_object_object
|
878
|
-
obj = Jam.new(true, 58)
|
879
|
-
json = Oj.dump(obj, :mode => :object, :indent => 2)
|
880
|
-
assert(%{{
|
881
|
-
"^o":"Juice::Jam",
|
882
|
-
"x":true,
|
883
|
-
"y":58
|
884
|
-
}
|
885
|
-
} == json ||
|
886
|
-
%{{
|
887
|
-
"^o":"Juice::Jam",
|
888
|
-
"y":58,
|
889
|
-
"x":true
|
890
|
-
}
|
891
|
-
} == json)
|
892
|
-
obj2 = Oj.load(json, :mode => :object)
|
893
|
-
assert_equal(obj, obj2)
|
894
|
-
end
|
895
|
-
|
896
|
-
def test_object_object_no_cache
|
897
|
-
obj = Jam.new(true, 58)
|
898
|
-
json = Oj.dump(obj, :mode => :object, :indent => 2)
|
899
|
-
assert(%{{
|
900
|
-
"^o":"Juice::Jam",
|
901
|
-
"x":true,
|
902
|
-
"y":58
|
903
|
-
}
|
904
|
-
} == json ||
|
905
|
-
%{{
|
906
|
-
"^o":"Juice::Jam",
|
907
|
-
"y":58,
|
908
|
-
"x":true
|
909
|
-
}
|
910
|
-
} == json)
|
911
|
-
obj2 = Oj.load(json, :mode => :object, :class_cache => false)
|
912
|
-
assert_equal(obj, obj2)
|
913
|
-
end
|
914
|
-
|
915
|
-
# Exception
|
916
|
-
def test_exception
|
917
|
-
err = nil
|
918
|
-
begin
|
919
|
-
raise StandardError.new('A Message')
|
920
|
-
rescue Exception => e
|
921
|
-
err = e
|
922
|
-
end
|
923
|
-
json = Oj.dump(err, :mode => :object, :indent => 2)
|
924
|
-
#puts "*** #{json}"
|
925
|
-
e2 = Oj.load(json, :mode => :strict)
|
926
|
-
assert_equal(err.class.to_s, e2['^o'])
|
927
|
-
assert_equal(err.message, e2['~mesg'])
|
928
|
-
assert_equal(err.backtrace, e2['~bt'])
|
929
|
-
e2 = Oj.load(json, :mode => :object)
|
930
|
-
if RUBY_VERSION.start_with?('1.8') || 'rubinius' == $ruby
|
931
|
-
assert_equal(e.class, e2.class);
|
932
|
-
assert_equal(e.message, e2.message);
|
933
|
-
assert_equal(e.backtrace, e2.backtrace);
|
934
|
-
else
|
935
|
-
assert_equal(e, e2);
|
936
|
-
end
|
937
|
-
end
|
938
595
|
|
939
596
|
# Range
|
940
|
-
def test_range_strict
|
941
|
-
begin
|
942
|
-
Oj.dump(1..7, :mode => :strict)
|
943
|
-
rescue Exception
|
944
|
-
assert(true)
|
945
|
-
return
|
946
|
-
end
|
947
|
-
assert(false, "*** expected an exception")
|
948
|
-
end
|
949
597
|
def test_range_null
|
950
598
|
json = Oj.dump(1..7, :mode => :null)
|
951
599
|
assert_equal('null', json)
|
952
600
|
end
|
953
|
-
def test_range_compat
|
954
|
-
Oj.default_options = { :use_to_json => true }
|
955
|
-
json = Oj.dump(1..7, :mode => :compat)
|
956
|
-
h = Oj.load(json, :mode => :strict)
|
957
|
-
assert_equal({'begin' => 1, 'end' => 7, 'exclude_end' => false}, h)
|
958
|
-
json = Oj.dump(1...7, :mode => :compat)
|
959
|
-
h = Oj.load(json, :mode => :strict)
|
960
|
-
assert_equal({'begin' => 1, 'end' => 7, 'exclude_end' => true}, h)
|
961
|
-
end
|
962
|
-
def test_range_object
|
963
|
-
unless RUBY_VERSION.start_with?('1.8')
|
964
|
-
Oj.default_options = { :mode => :object }
|
965
|
-
json = Oj.dump(1..7, :mode => :object, :indent => 0)
|
966
|
-
if 'rubinius' == $ruby
|
967
|
-
assert(%{{"^O":"Range","begin":1,"end":7,"exclude_end?":false}} == json)
|
968
|
-
else
|
969
|
-
assert_equal(%{{"^u":["Range",1,7,false]}}, json)
|
970
|
-
end
|
971
|
-
dump_and_load(1..7, false)
|
972
|
-
dump_and_load(1..1, false)
|
973
|
-
dump_and_load(1...7, false)
|
974
|
-
end
|
975
|
-
end
|
976
601
|
|
977
602
|
# BigNum
|
978
|
-
def test_bignum_strict
|
979
|
-
json = Oj.dump(7 ** 55, :mode => :strict)
|
980
|
-
assert_equal('30226801971775055948247051683954096612865741943', json)
|
981
|
-
end
|
982
603
|
def test_bignum_null
|
983
604
|
json = Oj.dump(7 ** 55, :mode => :null)
|
984
605
|
assert_equal('30226801971775055948247051683954096612865741943', json)
|
985
606
|
end
|
986
|
-
def test_bignum_compat
|
987
|
-
json = Oj.dump(7 ** 55, :mode => :compat)
|
988
|
-
b = Oj.load(json, :mode => :strict)
|
989
|
-
assert_equal(30226801971775055948247051683954096612865741943, b)
|
990
|
-
end
|
991
607
|
|
992
608
|
def test_bignum_object
|
993
609
|
dump_and_load(7 ** 55, false)
|
@@ -995,136 +611,31 @@ class Juice < Minitest::Test
|
|
995
611
|
end
|
996
612
|
|
997
613
|
# BigDecimal
|
998
|
-
def test_bigdecimal_strict
|
999
|
-
mode = Oj.default_options[:mode]
|
1000
|
-
Oj.default_options = {:mode => :strict}
|
1001
|
-
dump_and_load(BigDecimal.new('3.14159265358979323846'), false)
|
1002
|
-
Oj.default_options = {:mode => mode}
|
1003
|
-
end
|
1004
614
|
def test_bigdecimal_null
|
1005
615
|
mode = Oj.default_options[:mode]
|
1006
616
|
Oj.default_options = {:mode => :null}
|
1007
617
|
dump_and_load(BigDecimal.new('3.14159265358979323846'), false)
|
1008
618
|
Oj.default_options = {:mode => mode}
|
1009
619
|
end
|
1010
|
-
def test_bigdecimal_compat
|
1011
|
-
orig = BigDecimal.new('80.51')
|
1012
|
-
json = Oj.dump(orig, :mode => :compat, :bigdecimal_as_decimal => false)
|
1013
|
-
bg = Oj.load(json, :mode => :compat)
|
1014
|
-
assert_equal(orig.to_s, bg)
|
1015
|
-
orig = BigDecimal.new('3.14159265358979323846')
|
1016
|
-
json = Oj.dump(orig, :mode => :compat, :bigdecimal_as_decimal => false)
|
1017
|
-
bg = Oj.load(json, :mode => :compat)
|
1018
|
-
assert_equal(orig.to_s, bg)
|
1019
|
-
end
|
1020
|
-
def test_bigdecimal_load
|
1021
|
-
orig = BigDecimal.new('80.51')
|
1022
|
-
json = Oj.dump(orig, :mode => :compat, :bigdecimal_as_decimal => true)
|
1023
|
-
bg = Oj.load(json, :mode => :compat, :bigdecimal_load => true)
|
1024
|
-
assert_equal(BigDecimal, bg.class)
|
1025
|
-
assert_equal(orig, bg)
|
1026
|
-
end
|
1027
|
-
def test_float_load
|
1028
|
-
orig = BigDecimal.new('80.51')
|
1029
|
-
json = Oj.dump(orig, :mode => :compat, :bigdecimal_as_decimal => true)
|
1030
|
-
bg = Oj.load(json, :mode => :compat, :bigdecimal_load => :float)
|
1031
|
-
assert_equal(Float, bg.class)
|
1032
|
-
assert_equal(orig.to_f, bg)
|
1033
|
-
end
|
1034
|
-
def test_bigdecimal_compat_as_json
|
1035
|
-
Oj.default_options = { :use_as_json => true }
|
1036
|
-
orig = BigDecimal.new('80.51')
|
1037
|
-
BigDecimal.send(:define_method, :as_json) do
|
1038
|
-
%{this is big}
|
1039
|
-
end
|
1040
|
-
json = Oj.dump(orig, :mode => :compat, :bigdecimal_as_decimal => false)
|
1041
|
-
bg = Oj.load(json, :mode => :compat)
|
1042
|
-
assert_equal("this is big", bg)
|
1043
|
-
BigDecimal.send(:remove_method, :as_json) # cleanup
|
1044
|
-
end
|
1045
|
-
def test_bigdecimal_object
|
1046
|
-
mode = Oj.default_options[:mode]
|
1047
|
-
Oj.default_options = {:mode => :object}
|
1048
|
-
dump_and_load(BigDecimal.new('3.14159265358979323846'), false)
|
1049
|
-
Oj.default_options = {:mode => mode}
|
1050
|
-
# Infinity is the same for Float and BigDecimal
|
1051
|
-
json = Oj.dump(BigDecimal.new('Infinity'), :mode => :object)
|
1052
|
-
assert_equal('Infinity', json)
|
1053
|
-
json = Oj.dump(BigDecimal.new('-Infinity'), :mode => :object)
|
1054
|
-
assert_equal('-Infinity', json)
|
1055
|
-
end
|
1056
620
|
|
1057
621
|
def test_infinity
|
1058
622
|
n = Oj.load('Infinity', :mode => :object)
|
1059
623
|
assert_equal(BigDecimal.new('Infinity').to_f, n);
|
1060
|
-
begin
|
1061
|
-
Oj.load('Infinity', :mode => :strict)
|
1062
|
-
fail()
|
1063
|
-
rescue Oj::ParseError
|
1064
|
-
assert(true)
|
1065
|
-
end
|
1066
624
|
x = Oj.load('Infinity', :mode => :compat)
|
1067
625
|
assert_equal('Infinity', x.to_s)
|
1068
|
-
|
1069
626
|
end
|
1070
627
|
|
1071
628
|
# Date
|
1072
|
-
def test_date_strict
|
1073
|
-
begin
|
1074
|
-
Oj.dump(Date.new(2012, 6, 19), :mode => :strict)
|
1075
|
-
rescue Exception
|
1076
|
-
assert(true)
|
1077
|
-
return
|
1078
|
-
end
|
1079
|
-
assert(false, "*** expected an exception")
|
1080
|
-
end
|
1081
629
|
def test_date_null
|
1082
630
|
json = Oj.dump(Date.new(2012, 6, 19), :mode => :null)
|
1083
631
|
assert_equal('null', json)
|
1084
632
|
end
|
1085
|
-
def test_date_compat
|
1086
|
-
orig = Date.new(2012, 6, 19)
|
1087
|
-
json = Oj.dump(orig, :mode => :compat)
|
1088
|
-
x = Oj.load(json, :mode => :compat)
|
1089
|
-
# Some Rubies implement Date as data and some as a real Object. Either are
|
1090
|
-
# okay for the test.
|
1091
|
-
if x.is_a?(String)
|
1092
|
-
assert_equal(orig.to_s, x)
|
1093
|
-
else # better be a Hash
|
1094
|
-
assert_equal({"year" => orig.year, "month" => orig.month, "day" => orig.day, "start" => orig.start}, x)
|
1095
|
-
end
|
1096
|
-
end
|
1097
|
-
def test_date_object
|
1098
|
-
Oj.default_options = {:mode => :object}
|
1099
|
-
dump_and_load(Date.new(2012, 6, 19), false)
|
1100
|
-
end
|
1101
633
|
|
1102
634
|
# DateTime
|
1103
|
-
def test_datetime_strict
|
1104
|
-
begin
|
1105
|
-
Oj.dump(DateTime.new(2012, 6, 19, 20, 19, 27), :mode => :strict)
|
1106
|
-
rescue Exception
|
1107
|
-
assert(true)
|
1108
|
-
return
|
1109
|
-
end
|
1110
|
-
assert(false, "*** expected an exception")
|
1111
|
-
end
|
1112
635
|
def test_datetime_null
|
1113
636
|
json = Oj.dump(DateTime.new(2012, 6, 19, 20, 19, 27), :mode => :null)
|
1114
637
|
assert_equal('null', json)
|
1115
638
|
end
|
1116
|
-
def test_datetime_compat
|
1117
|
-
orig = DateTime.new(2012, 6, 19, 20, 19, 27)
|
1118
|
-
json = Oj.dump(orig, :mode => :compat)
|
1119
|
-
x = Oj.load(json, :mode => :compat)
|
1120
|
-
# Some Rubies implement Date as data and some as a real Object. Either are
|
1121
|
-
# okay for the test.
|
1122
|
-
assert_equal(orig.to_s, x)
|
1123
|
-
end
|
1124
|
-
def test_datetime_object
|
1125
|
-
Oj.default_options = {:mode => :object}
|
1126
|
-
dump_and_load(DateTime.new(2012, 6, 19), false)
|
1127
|
-
end
|
1128
639
|
|
1129
640
|
# autodefine Oj::Bag
|
1130
641
|
def test_bag
|
@@ -1138,75 +649,7 @@ class Juice < Minitest::Test
|
|
1138
649
|
assert_equal(58, obj.y)
|
1139
650
|
end
|
1140
651
|
|
1141
|
-
# Circular
|
1142
|
-
def test_circular_object
|
1143
|
-
obj = Jam.new(nil, 58)
|
1144
|
-
obj.x = obj
|
1145
|
-
json = Oj.dump(obj, :mode => :object, :indent => 2, :circular => true)
|
1146
|
-
assert(%{{
|
1147
|
-
"^o":"Juice::Jam",
|
1148
|
-
"^i":1,
|
1149
|
-
"x":"^r1",
|
1150
|
-
"y":58
|
1151
|
-
}
|
1152
|
-
} == json ||
|
1153
|
-
%{{
|
1154
|
-
"^o":"Juice::Jam",
|
1155
|
-
"^i":1,
|
1156
|
-
"y":58,
|
1157
|
-
"x":"^r1"
|
1158
|
-
}
|
1159
|
-
} == json)
|
1160
|
-
obj2 = Oj.load(json, :mode => :object, :circular => true)
|
1161
|
-
assert_equal(obj2.x.__id__, obj2.__id__)
|
1162
|
-
end
|
1163
|
-
|
1164
|
-
def test_circular_hash
|
1165
|
-
h = { 'a' => 7 }
|
1166
|
-
h['b'] = h
|
1167
|
-
json = Oj.dump(h, :mode => :object, :indent => 2, :circular => true)
|
1168
|
-
ha = Oj.load(json, :mode => :strict)
|
1169
|
-
assert_equal({'^i' => 1, 'a' => 7, 'b' => '^r1'}, ha)
|
1170
|
-
Oj.load(json, :mode => :object, :circular => true)
|
1171
|
-
assert_equal(h['b'].__id__, h.__id__)
|
1172
|
-
end
|
1173
|
-
|
1174
|
-
def test_circular_array
|
1175
|
-
a = [7]
|
1176
|
-
a << a
|
1177
|
-
json = Oj.dump(a, :mode => :object, :indent => 2, :circular => true)
|
1178
|
-
assert_equal(%{[
|
1179
|
-
"^i1",
|
1180
|
-
7,
|
1181
|
-
"^r1"
|
1182
|
-
]
|
1183
|
-
}, json)
|
1184
|
-
a2 = Oj.load(json, :mode => :object, :circular => true)
|
1185
|
-
assert_equal(a2[1].__id__, a2.__id__)
|
1186
|
-
end
|
1187
|
-
|
1188
|
-
def test_circular
|
1189
|
-
h = { 'a' => 7 }
|
1190
|
-
obj = Jam.new(h, 58)
|
1191
|
-
obj.x['b'] = obj
|
1192
|
-
json = Oj.dump(obj, :mode => :object, :indent => 2, :circular => true)
|
1193
|
-
ha = Oj.load(json, :mode => :strict)
|
1194
|
-
assert_equal({'^o' => 'Juice::Jam', '^i' => 1, 'x' => { '^i' => 2, 'a' => 7, 'b' => '^r1' }, 'y' => 58 }, ha)
|
1195
|
-
Oj.load(json, :mode => :object, :circular => true)
|
1196
|
-
assert_equal(obj.x.__id__, h.__id__)
|
1197
|
-
assert_equal(h['b'].__id__, obj.__id__)
|
1198
|
-
end
|
1199
|
-
|
1200
652
|
# Stream Deeply Nested
|
1201
|
-
def test_deep_nest
|
1202
|
-
begin
|
1203
|
-
n = 10000
|
1204
|
-
Oj.strict_load('[' * n + ']' * n)
|
1205
|
-
rescue Exception => e
|
1206
|
-
assert(false, e.message)
|
1207
|
-
end
|
1208
|
-
end
|
1209
|
-
|
1210
653
|
def test_deep_nest_dump
|
1211
654
|
begin
|
1212
655
|
a = []
|
@@ -1242,18 +685,6 @@ class Juice < Minitest::Test
|
|
1242
685
|
assert_equal(src, obj)
|
1243
686
|
end
|
1244
687
|
|
1245
|
-
# symbol_keys option
|
1246
|
-
def test_symbol_keys
|
1247
|
-
json = %{{
|
1248
|
-
"x":true,
|
1249
|
-
"y":58,
|
1250
|
-
"z": [1,2,3]
|
1251
|
-
}
|
1252
|
-
}
|
1253
|
-
obj = Oj.load(json, :mode => :strict, :symbol_keys => true)
|
1254
|
-
assert_equal({ :x => true, :y => 58, :z => [1, 2, 3]}, obj)
|
1255
|
-
end
|
1256
|
-
|
1257
688
|
# comments
|
1258
689
|
def test_comment_slash
|
1259
690
|
json = %{{
|
@@ -1293,7 +724,7 @@ class Juice < Minitest::Test
|
|
1293
724
|
|
1294
725
|
def test_nilnil_false
|
1295
726
|
begin
|
1296
|
-
Oj.load(nil)
|
727
|
+
Oj.load(nil, :nilnil => false)
|
1297
728
|
rescue Exception
|
1298
729
|
assert(true)
|
1299
730
|
return
|
@@ -1303,7 +734,7 @@ class Juice < Minitest::Test
|
|
1303
734
|
|
1304
735
|
def test_nilnil_true
|
1305
736
|
obj = Oj.load(nil, :nilnil => true)
|
1306
|
-
|
737
|
+
assert_nil(obj)
|
1307
738
|
end
|
1308
739
|
|
1309
740
|
def test_empty_string_true
|
@@ -1323,7 +754,7 @@ class Juice < Minitest::Test
|
|
1323
754
|
|
1324
755
|
def test_quirks_null_mode
|
1325
756
|
assert_raises(Oj::ParseError) { Oj.load("null", :quirks_mode => false) }
|
1326
|
-
|
757
|
+
assert_nil(Oj.load("null", :quirks_mode => true))
|
1327
758
|
end
|
1328
759
|
|
1329
760
|
def test_quirks_bool_mode
|
@@ -1362,9 +793,6 @@ class Juice < Minitest::Test
|
|
1362
793
|
json = Oj.dump(jam, :omit_nil => true, :mode => :object)
|
1363
794
|
assert_equal(%|{"^o":"Juice::Jam","x":{"a":1}}|, json)
|
1364
795
|
|
1365
|
-
json = Oj.dump(jam, :omit_nil => true, :mode => :compat)
|
1366
|
-
assert_equal(%|{"x":{"a":1}}|, json)
|
1367
|
-
|
1368
796
|
json = Oj.dump({'x' => {'a' => 1, 'b' => nil }, 'y' => nil}, :omit_nil => true, :mode => :strict)
|
1369
797
|
assert_equal(%|{"x":{"a":1}}|, json)
|
1370
798
|
|
@@ -1376,7 +804,11 @@ class Juice < Minitest::Test
|
|
1376
804
|
json = Oj.dump(obj, :indent => 2)
|
1377
805
|
puts json if trace
|
1378
806
|
loaded = Oj.load(json)
|
1379
|
-
|
807
|
+
if obj.nil?
|
808
|
+
assert_nil(loaded)
|
809
|
+
else
|
810
|
+
assert_equal(obj, loaded)
|
811
|
+
end
|
1380
812
|
loaded
|
1381
813
|
end
|
1382
814
|
|