oj 3.16.0 → 3.17.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +107 -0
  3. data/README.md +0 -16
  4. data/ext/oj/cache.c +4 -2
  5. data/ext/oj/cache.h +3 -2
  6. data/ext/oj/compat.c +3 -3
  7. data/ext/oj/custom.c +17 -11
  8. data/ext/oj/dump.c +624 -90
  9. data/ext/oj/dump.h +9 -2
  10. data/ext/oj/dump_compat.c +15 -9
  11. data/ext/oj/dump_leaf.c +1 -1
  12. data/ext/oj/dump_object.c +32 -17
  13. data/ext/oj/dump_strict.c +20 -14
  14. data/ext/oj/extconf.rb +11 -9
  15. data/ext/oj/fast.c +50 -32
  16. data/ext/oj/intern.c +24 -7
  17. data/ext/oj/mimic_json.c +17 -11
  18. data/ext/oj/object.c +21 -13
  19. data/ext/oj/oj.c +387 -140
  20. data/ext/oj/oj.h +59 -55
  21. data/ext/oj/parse.c +248 -47
  22. data/ext/oj/parser.c +179 -89
  23. data/ext/oj/parser.h +4 -2
  24. data/ext/oj/rails.c +64 -42
  25. data/ext/oj/reader.c +1 -1
  26. data/ext/oj/rxclass.c +1 -1
  27. data/ext/oj/rxclass.h +1 -1
  28. data/ext/oj/safe.c +230 -0
  29. data/ext/oj/safe.h +79 -0
  30. data/ext/oj/saj.c +15 -10
  31. data/ext/oj/scp.c +3 -6
  32. data/ext/oj/simd.h +219 -0
  33. data/ext/oj/sparse.c +6 -3
  34. data/ext/oj/stream_writer.c +38 -28
  35. data/ext/oj/strict.c +2 -4
  36. data/ext/oj/string_writer.c +54 -22
  37. data/ext/oj/usual.c +57 -35
  38. data/ext/oj/usual.h +1 -0
  39. data/ext/oj/val_stack.c +13 -2
  40. data/ext/oj/wab.c +5 -4
  41. data/lib/oj/mimic.rb +1 -5
  42. data/lib/oj/schandler.rb +5 -4
  43. data/lib/oj/version.rb +1 -1
  44. data/pages/Encoding.md +1 -1
  45. metadata +36 -100
  46. data/test/_test_active.rb +0 -75
  47. data/test/_test_active_mimic.rb +0 -95
  48. data/test/_test_mimic_rails.rb +0 -123
  49. data/test/activerecord/result_test.rb +0 -31
  50. data/test/activesupport6/abstract_unit.rb +0 -44
  51. data/test/activesupport6/decoding_test.rb +0 -133
  52. data/test/activesupport6/encoding_test.rb +0 -507
  53. data/test/activesupport6/encoding_test_cases.rb +0 -98
  54. data/test/activesupport6/test_common.rb +0 -17
  55. data/test/activesupport6/test_helper.rb +0 -163
  56. data/test/activesupport6/time_zone_test_helpers.rb +0 -39
  57. data/test/activesupport7/abstract_unit.rb +0 -49
  58. data/test/activesupport7/decoding_test.rb +0 -125
  59. data/test/activesupport7/encoding_test.rb +0 -486
  60. data/test/activesupport7/encoding_test_cases.rb +0 -104
  61. data/test/activesupport7/time_zone_test_helpers.rb +0 -47
  62. data/test/files.rb +0 -29
  63. data/test/foo.rb +0 -14
  64. data/test/helper.rb +0 -39
  65. data/test/isolated/shared.rb +0 -309
  66. data/test/isolated/test_mimic_after.rb +0 -13
  67. data/test/isolated/test_mimic_alone.rb +0 -12
  68. data/test/isolated/test_mimic_as_json.rb +0 -45
  69. data/test/isolated/test_mimic_before.rb +0 -13
  70. data/test/isolated/test_mimic_define.rb +0 -28
  71. data/test/isolated/test_mimic_rails_after.rb +0 -22
  72. data/test/isolated/test_mimic_rails_before.rb +0 -21
  73. data/test/isolated/test_mimic_redefine.rb +0 -15
  74. data/test/json_gem/json_addition_test.rb +0 -216
  75. data/test/json_gem/json_common_interface_test.rb +0 -155
  76. data/test/json_gem/json_encoding_test.rb +0 -107
  77. data/test/json_gem/json_ext_parser_test.rb +0 -21
  78. data/test/json_gem/json_fixtures_test.rb +0 -36
  79. data/test/json_gem/json_generator_test.rb +0 -407
  80. data/test/json_gem/json_generic_object_test.rb +0 -90
  81. data/test/json_gem/json_parser_test.rb +0 -477
  82. data/test/json_gem/json_string_matching_test.rb +0 -42
  83. data/test/json_gem/test_helper.rb +0 -30
  84. data/test/mem.rb +0 -34
  85. data/test/perf.rb +0 -102
  86. data/test/perf_compat.rb +0 -128
  87. data/test/perf_dump.rb +0 -50
  88. data/test/perf_fast.rb +0 -162
  89. data/test/perf_file.rb +0 -62
  90. data/test/perf_object.rb +0 -134
  91. data/test/perf_once.rb +0 -59
  92. data/test/perf_parser.rb +0 -183
  93. data/test/perf_saj.rb +0 -101
  94. data/test/perf_scp.rb +0 -140
  95. data/test/perf_simple.rb +0 -289
  96. data/test/perf_strict.rb +0 -137
  97. data/test/perf_wab.rb +0 -129
  98. data/test/prec.rb +0 -23
  99. data/test/sample/change.rb +0 -13
  100. data/test/sample/dir.rb +0 -18
  101. data/test/sample/doc.rb +0 -35
  102. data/test/sample/file.rb +0 -47
  103. data/test/sample/group.rb +0 -15
  104. data/test/sample/hasprops.rb +0 -15
  105. data/test/sample/layer.rb +0 -11
  106. data/test/sample/line.rb +0 -20
  107. data/test/sample/oval.rb +0 -10
  108. data/test/sample/rect.rb +0 -9
  109. data/test/sample/shape.rb +0 -34
  110. data/test/sample/text.rb +0 -19
  111. data/test/sample.rb +0 -54
  112. data/test/sample_json.rb +0 -37
  113. data/test/test_compat.rb +0 -567
  114. data/test/test_custom.rb +0 -554
  115. data/test/test_debian.rb +0 -50
  116. data/test/test_fast.rb +0 -526
  117. data/test/test_file.rb +0 -250
  118. data/test/test_gc.rb +0 -60
  119. data/test/test_generate.rb +0 -21
  120. data/test/test_hash.rb +0 -39
  121. data/test/test_integer_range.rb +0 -72
  122. data/test/test_null.rb +0 -376
  123. data/test/test_object.rb +0 -1016
  124. data/test/test_parser.rb +0 -11
  125. data/test/test_parser_debug.rb +0 -27
  126. data/test/test_parser_saj.rb +0 -337
  127. data/test/test_parser_usual.rb +0 -217
  128. data/test/test_rails.rb +0 -35
  129. data/test/test_saj.rb +0 -188
  130. data/test/test_scp.rb +0 -431
  131. data/test/test_strict.rb +0 -431
  132. data/test/test_various.rb +0 -801
  133. data/test/test_wab.rb +0 -311
  134. data/test/test_writer.rb +0 -380
  135. data/test/tests.rb +0 -33
  136. data/test/tests_mimic.rb +0 -23
  137. data/test/tests_mimic_addition.rb +0 -16
data/test/test_custom.rb DELETED
@@ -1,554 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- $LOAD_PATH << __dir__
5
- @oj_dir = File.dirname(File.expand_path(__dir__))
6
- %w(lib ext).each do |dir|
7
- $LOAD_PATH << File.join(@oj_dir, dir)
8
- end
9
-
10
- require 'minitest'
11
- require 'minitest/autorun'
12
- require 'stringio'
13
- require 'date'
14
- require 'bigdecimal'
15
- require 'oj'
16
-
17
- class CustomJuice < Minitest::Test
18
-
19
- module TestModule
20
- end
21
-
22
- class Jeez
23
- attr_accessor :x, :y, :_z
24
-
25
- def initialize(x, y)
26
- @x = x
27
- @y = y
28
- @_z = x.to_s
29
- end
30
-
31
- def ==(o)
32
- self.class == o.class && @x == o.x && @y = o.y
33
- end
34
-
35
- def to_json(*_args)
36
- %|{"xx":#{@x},"yy":#{y}}|
37
- end
38
-
39
- def raw_json(_depth, _indent)
40
- %|{"xxx":#{@x},"yyy":#{y}}|
41
- end
42
-
43
- def as_json(*_args)
44
- {'a' => @x, :b => @y }
45
- end
46
-
47
- def to_hash
48
- {'b' => @x, 'n' => @y }
49
- end
50
- end
51
-
52
- class AsJson
53
- attr_accessor :x, :y
54
-
55
- def initialize(x, y)
56
- @x = x
57
- @y = y
58
- end
59
-
60
- def ==(o)
61
- self.class == o.class && @x == o.x && @y = o.y
62
- end
63
-
64
- def as_json(*_args)
65
- {'a' => @x, :b => @y }
66
- end
67
- end
68
-
69
- class AsRails
70
- attr_accessor :x, :y
71
-
72
- def initialize(x, y)
73
- @x = x
74
- @y = y
75
- end
76
-
77
- def ==(o)
78
- self.class == o.class && @x == o.x && @y = o.y
79
- end
80
-
81
- def as_json(*_args)
82
- a = @x
83
- a = a.as_json if a.respond_to?('as_json')
84
- b = @y
85
- b = b.as_json if b.respond_to?('as_json')
86
- {'a' => a, :b => b }
87
- end
88
- end
89
-
90
- def setup
91
- @default_options = Oj.default_options
92
- Oj.default_options = { :mode => :custom }
93
- end
94
-
95
- def teardown
96
- Oj.default_options = @default_options
97
- end
98
-
99
- def test_nil
100
- dump_and_load(nil, false)
101
- end
102
-
103
- def test_true
104
- dump_and_load(true, false)
105
- end
106
-
107
- def test_false
108
- dump_and_load(false, false)
109
- end
110
-
111
- def test_fixnum
112
- dump_and_load(0, false)
113
- dump_and_load(12_345, false)
114
- dump_and_load(-54_321, false)
115
- dump_and_load(1, false)
116
- end
117
-
118
- def test_float
119
- dump_and_load(0.0, false)
120
- dump_and_load(12_345.6789, false)
121
- dump_and_load(70.35, false)
122
- dump_and_load(-54_321.012, false)
123
- dump_and_load(1.7775, false)
124
- dump_and_load(2.5024, false)
125
- dump_and_load(2.48e16, false)
126
- dump_and_load(2.48e100 * 1.0e10, false)
127
- dump_and_load(-2.48e100 * 1.0e10, false)
128
- end
129
-
130
- def test_float_parse
131
- f = Oj.load('12.123456789012345678', mode: :custom, bigdecimal_load: :float)
132
- assert_equal(Float, f.class)
133
- end
134
-
135
- def test_float_parse_fast
136
- f = Oj.load('12.123456789012345678', mode: :custom, bigdecimal_load: :fast)
137
- assert_equal(Float, f.class)
138
- assert(12.12345678901234 <= f && f < 12.12345678901236)
139
- end
140
-
141
- def test_nan_dump
142
- assert_equal('null', Oj.dump(0/0.0, :nan => :null))
143
- assert_equal('3.3e14159265358979323846', Oj.dump(0/0.0, :nan => :huge))
144
- assert_equal('NaN', Oj.dump(0/0.0, :nan => :word))
145
- begin
146
- Oj.dump(0/0.0, :nan => :raise)
147
- rescue Exception
148
- assert(true)
149
- return
150
- end
151
- assert(false, '*** expected an exception')
152
- end
153
-
154
- def test_infinity_dump
155
- assert_equal('null', Oj.dump(1/0.0, :nan => :null))
156
- assert_equal('3.0e14159265358979323846', Oj.dump(1/0.0, :nan => :huge))
157
- assert_equal('Infinity', Oj.dump(1/0.0, :nan => :word))
158
- begin
159
- Oj.dump(1/0.0, :nan => :raise)
160
- rescue Exception
161
- assert(true)
162
- return
163
- end
164
- assert(false, '*** expected an exception')
165
- end
166
-
167
- def test_neg_infinity_dump
168
- assert_equal('null', Oj.dump(-1/0.0, :nan => :null))
169
- assert_equal('-3.0e14159265358979323846', Oj.dump(-1/0.0, :nan => :huge))
170
- assert_equal('-Infinity', Oj.dump(-1/0.0, :nan => :word))
171
- begin
172
- Oj.dump(-1/0.0, :nan => :raise)
173
- rescue Exception
174
- assert(true)
175
- return
176
- end
177
- assert(false, '*** expected an exception')
178
- end
179
-
180
- def test_string
181
- dump_and_load('', false)
182
- dump_and_load('abc', false)
183
- dump_and_load("abc\ndef", false)
184
- dump_and_load("a\u0041", false)
185
- end
186
-
187
- def test_string_ascii
188
- json = Oj.dump('ぴーたー', :escape_mode => :ascii)
189
- assert_equal(%{"\\u3074\\u30fc\\u305f\\u30fc"}, json)
190
- dump_and_load('ぴーたー', false, :escape_mode => :ascii)
191
- end
192
-
193
- def test_string_json
194
- json = Oj.dump('ぴーたー', :escape_mode => :json)
195
- assert_equal(%{"ぴーたー"}, json)
196
- dump_and_load('ぴーたー', false, :escape_mode => :json)
197
- end
198
-
199
- def test_array
200
- dump_and_load([], false)
201
- dump_and_load([true, false], false)
202
- dump_and_load(['a', 1, nil], false)
203
- dump_and_load([[nil]], false)
204
- dump_and_load([[nil], 58], false)
205
- end
206
-
207
- def test_array_deep
208
- dump_and_load([1, [2, [3, [4, [5, [6, [7, [8, [9, [10, [11, [12, [13, [14, [15, [16, [17, [18, [19, [20]]]]]]]]]]]]]]]]]]]], false)
209
- end
210
-
211
- def test_deep_nest
212
- skip 'TruffleRuby causes SEGV' if RUBY_ENGINE == 'truffleruby'
213
-
214
- begin
215
- n = 10_000
216
- Oj.strict_load(('[' * n) + (']' * n))
217
- rescue Exception => e
218
- refute(e.message)
219
- end
220
- end
221
-
222
- def test_hash
223
- dump_and_load({}, false)
224
- dump_and_load({ 'true' => true, 'false' => false}, false)
225
- dump_and_load({ 'true' => true, 'array' => [], 'hash' => { }}, false)
226
- end
227
-
228
- def test_hash_deep
229
- dump_and_load({'1' => {
230
- '2' => {
231
- '3' => {
232
- '4' => {
233
- '5' => {
234
- '6' => {
235
- '7' => {
236
- '8' => {
237
- '9' => {
238
- '10' => {
239
- '11' => {
240
- '12' => {
241
- '13' => {
242
- '14' => {
243
- '15' => {
244
- '16' => {
245
- '17' => {
246
- '18' => {
247
- '19' => {
248
- '20' => {}}}}}}}}}}}}}}}}}}}}}, false)
249
- end
250
-
251
- def test_hash_escaped_key
252
- json = %{{"a\nb":true,"c\td":false}}
253
- obj = Oj.load(json)
254
- assert_equal({"a\nb" => true, "c\td" => false}, obj)
255
- end
256
-
257
- def test_hash_non_string_key
258
- assert_equal(%|{"1":true}|, Oj.dump({ 1 => true }, :indent => 0))
259
- end
260
-
261
- def test_bignum_object
262
- dump_and_load(7 ** 55, false)
263
- end
264
-
265
- def test_bigdecimal
266
- assert_equal('0.314159265358979323846e1', Oj.dump(BigDecimal('3.14159265358979323846'), bigdecimal_as_decimal: true).downcase())
267
- assert_equal('"0.314159265358979323846e1"', Oj.dump(BigDecimal('3.14159265358979323846'), bigdecimal_as_decimal: false).downcase())
268
- dump_and_load(BigDecimal('3.14159265358979323846'), false, :bigdecimal_load => true)
269
- end
270
-
271
- def test_object
272
- obj = Jeez.new(true, 58)
273
- json = Oj.dump(obj, create_id: '^o', use_to_json: false, use_as_json: false, use_to_hash: false)
274
- assert_equal(%|{"x":true,"y":58,"_z":"true"}|, json)
275
- json = Oj.dump(obj, create_id: '^o', use_to_json: false, use_as_json: false, use_to_hash: false, ignore_under: true)
276
- assert_equal(%|{"x":true,"y":58}|, json)
277
- dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
278
- end
279
-
280
- def test_object_to_json
281
- obj = Jeez.new(true, 58)
282
- json = Oj.dump(obj, :use_to_json => true, :use_as_json => false, :use_to_hash => false)
283
- assert_equal(%|{"xx":true,"yy":58}|, json)
284
- end
285
-
286
- def test_object_as_json
287
- obj = Jeez.new(true, 58)
288
- json = Oj.dump(obj, :use_to_json => false, :use_as_json => true, :use_to_hash => false)
289
- assert_equal(%|{"a":true,"b":58}|, json)
290
- end
291
-
292
- def test_object_to_hash
293
- obj = Jeez.new(true, 58)
294
- json = Oj.dump(obj, :use_to_json => false, :use_as_json => false, :use_to_hash => true)
295
- assert_equal(%|{"b":true,"n":58}|, json)
296
- end
297
-
298
- def test_object_raw_json
299
- obj = Jeez.new(true, 58)
300
- json = Oj.dump(obj, :use_to_json => true, :use_as_json => false, :use_raw_json => true, :use_to_hash => false)
301
- assert_equal(%|{"xxx":true,"yyy":58}|, json)
302
- end
303
-
304
- def test_raw_json_stringwriter
305
- obj = Oj::StringWriter.new(:indent => 0)
306
- obj.push_array()
307
- obj.pop()
308
- json = Oj.dump(obj, :use_raw_json => true)
309
- assert_equal(%|[]|, json)
310
- end
311
-
312
- def test_as_raw_json_stringwriter
313
- obj = Oj::StringWriter.new(:indent => 0)
314
- obj.push_array()
315
- obj.push_value(3)
316
- obj.pop()
317
- j = AsJson.new(1, obj)
318
-
319
- json = Oj.dump(j, use_raw_json: true, use_as_json: true, indent: 2)
320
- assert_equal(%|{
321
- "a":1,
322
- "b":[3]
323
- }
324
- |, json)
325
-
326
- json = Oj.dump(j, use_raw_json: false, use_as_json: true, indent: 2)
327
- assert_equal(%|{
328
- "a":1,
329
- "b":{}
330
- }
331
- |, json)
332
- end
333
-
334
- def test_rails_as_raw_json_stringwriter
335
- obj = Oj::StringWriter.new(:indent => 0)
336
- obj.push_array()
337
- obj.push_value(3)
338
- obj.pop()
339
- j = AsRails.new(1, obj)
340
- json = Oj.dump(j, mode: :rails, use_raw_json: true, indent: 2)
341
- assert_equal(%|{
342
- "a":1,
343
- "b":{}
344
- }
345
- |, json)
346
-
347
- Oj::Rails.optimize
348
- json = Oj.dump(j, mode: :rails, use_raw_json: true, indent: 2)
349
- Oj::Rails.deoptimize
350
- assert_equal(%|{
351
- "a":1,
352
- "b":[3]
353
- }
354
- |, json)
355
- end
356
-
357
- def test_symbol
358
- json = Oj.dump(:abc)
359
- assert_equal('"abc"', json)
360
- end
361
-
362
- def test_class
363
- assert_equal(%|"CustomJuice"|, Oj.dump(CustomJuice))
364
- end
365
-
366
- def test_module
367
- assert_equal(%|"CustomJuice::TestModule"|, Oj.dump(TestModule))
368
- end
369
-
370
- def test_symbol_keys
371
- json = %|{
372
- "x":true,
373
- "y":58,
374
- "z": [1,2,3]
375
- }
376
- |
377
- obj = Oj.load(json, :symbol_keys => true)
378
- assert_equal({ :x => true, :y => 58, :z => [1, 2, 3]}, obj)
379
- end
380
-
381
- def test_double
382
- json = %{{ "x": 1}{ "y": 2}}
383
- results = []
384
- Oj.load(json, :mode => :strict) { |x| results << x }
385
-
386
- assert_equal([{ 'x' => 1 }, { 'y' => 2 }], results)
387
- end
388
-
389
- def test_circular_hash
390
- h = { 'a' => 7 }
391
- h['b'] = h
392
- json = Oj.dump(h, :indent => 2, :circular => true)
393
- assert_equal(%|{
394
- "a":7,
395
- "b":null
396
- }
397
- |, json)
398
- end
399
-
400
- def test_omit_nil
401
- json = Oj.dump({'x' => {'a' => 1, 'b' => nil }, 'y' => nil}, :omit_nil => true)
402
- assert_equal(%|{"x":{"a":1}}|, json)
403
- end
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
-
410
- def test_complex
411
- obj = Complex(2, 9)
412
- dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
413
- end
414
-
415
- def test_rational
416
- obj = Rational(2, 9)
417
- dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
418
- end
419
-
420
- def test_range
421
- obj = 3..8
422
- dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
423
- end
424
-
425
- def test_date
426
- obj = Date.new(2017, 1, 5)
427
- dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
428
- end
429
-
430
- def test_date_unix
431
- obj = Date.new(2017, 1, 5)
432
- json = Oj.dump(obj, :indent => 2, time_format: :unix)
433
- assert_equal('1483574400.000000000', json)
434
- end
435
-
436
- def test_date_unix_zone
437
- obj = Date.new(2017, 1, 5)
438
- json = Oj.dump(obj, :indent => 2, time_format: :unix_zone)
439
- assert_equal('1483574400.000000000', json)
440
- end
441
-
442
- def test_date_ruby
443
- obj = Date.new(2017, 1, 5)
444
- json = Oj.dump(obj, :indent => 2, time_format: :ruby)
445
- assert_equal('"2017-01-05"', json)
446
- end
447
-
448
- def test_date_xmlschema
449
- obj = Date.new(2017, 1, 5)
450
- json = Oj.dump(obj, :indent => 2, time_format: :xmlschema)
451
- assert_equal('"2017-01-05"', json)
452
- end
453
-
454
- def test_datetime
455
- obj = DateTime.new(2017, 1, 5, 10, 20, 30)
456
- dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
457
- end
458
-
459
- def test_datetime_unix
460
- obj = DateTime.new(2017, 1, 5, 10, 20, 30, '-0500')
461
- json = Oj.dump(obj, :indent => 2, time_format: :unix)
462
- assert_equal('1483629630.000000000', json)
463
- end
464
-
465
- def test_datetime_unix_zone
466
- obj = DateTime.new(2017, 1, 5, 10, 20, 30, '-0500')
467
- json = Oj.dump(obj, :indent => 2, time_format: :unix_zone)
468
- assert_equal('1483629630.000000000e-18000', json)
469
- end
470
-
471
- def test_datetime_ruby
472
- obj = DateTime.new(2017, 1, 5, 10, 20, 30, '-0500')
473
- json = Oj.dump(obj, :indent => 2, time_format: :ruby)
474
- assert_equal('"2017-01-05T10:20:30-05:00"', json)
475
- end
476
-
477
- def test_datetime_xmlschema
478
- obj = DateTime.new(2017, 1, 5, 10, 20, 30, '-0500')
479
- json = Oj.dump(obj, :indent => 2, time_format: :xmlschema)
480
- assert_equal('"2017-01-05T10:20:30-05:00"', json)
481
- end
482
-
483
- def test_regexp
484
- # this notation must be used to get an == match later
485
- obj = /(?ix-m:^yes$)/
486
- dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
487
- end
488
-
489
- def test_openstruct
490
- obj = OpenStruct.new(:a => 1, 'b' => 2)
491
- dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
492
- end
493
-
494
- def test_time
495
- skip 'TruffleRuby fails this spec' if RUBY_ENGINE == 'truffleruby'
496
-
497
- obj = Time.now()
498
- # These two forms should be able to recreate the time precisely,
499
- # so we check they can load a dumped version and recreate the
500
- # original object correctly.
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)
503
- # These two forms will lose precision while dumping as they don't
504
- # preserve full precision. We check that a dumped version is equal
505
- # to that version loaded and dumped a second time, but don't check
506
- # that the loaded Ruby objects is still the same as the original.
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)
509
- end
510
-
511
- def dump_and_load(obj, trace=false, options={})
512
- options = options.merge(:indent => 2, :mode => :custom)
513
- json = Oj.dump(obj, options)
514
- puts json if trace
515
-
516
- loaded = Oj.load(json, options)
517
- if obj.nil?
518
- assert_nil(loaded)
519
- else
520
- assert_equal(obj, loaded)
521
- end
522
- loaded
523
- end
524
-
525
- def dump_and_load_inspect(obj, trace=false, options={})
526
- options = options.merge(:indent => 2, :mode => :custom)
527
- json = Oj.dump(obj, options)
528
- puts json if trace
529
-
530
- loaded = Oj.load(json, options)
531
- if obj.nil?
532
- assert_nil(loaded)
533
- else
534
- assert_equal(obj.inspect, loaded.inspect)
535
- end
536
- loaded
537
- end
538
-
539
- def dump_load_dump(obj, trace=false, options={})
540
- options = options.merge(:indent => 2, :mode => :custom)
541
- json = Oj.dump(obj, options)
542
- puts json if trace
543
-
544
- loaded = Oj.load(json, options)
545
- if obj.nil?
546
- assert_nil(loaded)
547
- else
548
- json2 = Oj.dump(loaded, options)
549
- assert_equal(json, json2)
550
- end
551
- loaded
552
- end
553
-
554
- end
data/test/test_debian.rb DELETED
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'helper'
4
-
5
- class DebJuice < Minitest::Test
6
- class Jam
7
- attr_accessor :x, :y
8
-
9
- def initialize(x, y)
10
- @x = x
11
- @y = y
12
- end
13
-
14
- def eql?(o)
15
- self.class == o.class && @x == o.x && @y == o.y
16
- end
17
- alias == eql?
18
-
19
- end # Jam
20
-
21
- # contributed by sauliusg to fix as_json
22
- class Orange < Jam
23
-
24
- def as_json
25
- { :json_class => self.class,
26
- :x => @x,
27
- :y => @y }
28
- end
29
-
30
- def self.json_create(h)
31
- new(h['x'], h['y'])
32
- end
33
- end
34
-
35
- def test_as_json_object_compat_hash_cached
36
- Oj.default_options = { :mode => :compat, :class_cache => true, :use_as_json => true }
37
- obj = Orange.new(true, 58)
38
- json = Oj.dump(obj, :indent => 2)
39
- refute_nil(json)
40
- dump_and_load(obj, true)
41
- end
42
-
43
- def dump_and_load(obj, _trace=false)
44
- json = Oj.dump(obj, :indent => 2)
45
- loaded = Oj.load(json)
46
- assert_equal(obj, loaded)
47
- loaded
48
- end
49
-
50
- end