oj 3.16.9 → 3.16.10
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 +5 -0
- data/ext/oj/fast.c +3 -6
- data/ext/oj/mimic_json.c +3 -6
- data/ext/oj/oj.c +2 -4
- data/ext/oj/parse.c +15 -5
- data/ext/oj/parser.c +1 -1
- data/ext/oj/parser.h +2 -0
- data/ext/oj/rails.c +1 -2
- data/ext/oj/saj.c +3 -6
- data/ext/oj/scp.c +3 -6
- data/ext/oj/stream_writer.c +1 -7
- data/ext/oj/strict.c +2 -4
- data/ext/oj/string_writer.c +1 -3
- data/lib/oj/version.rb +1 -1
- metadata +3 -98
- data/test/_test_active.rb +0 -75
- data/test/_test_active_mimic.rb +0 -95
- data/test/_test_mimic_rails.rb +0 -123
- data/test/activerecord/result_test.rb +0 -31
- data/test/activesupport6/abstract_unit.rb +0 -44
- data/test/activesupport6/decoding_test.rb +0 -133
- data/test/activesupport6/encoding_test.rb +0 -542
- data/test/activesupport6/encoding_test_cases.rb +0 -98
- data/test/activesupport6/test_common.rb +0 -17
- data/test/activesupport6/test_helper.rb +0 -163
- data/test/activesupport6/time_zone_test_helpers.rb +0 -39
- data/test/activesupport7/abstract_unit.rb +0 -52
- data/test/activesupport7/decoding_test.rb +0 -125
- data/test/activesupport7/encoding_test.rb +0 -536
- data/test/activesupport7/encoding_test_cases.rb +0 -104
- data/test/activesupport7/time_zone_test_helpers.rb +0 -47
- data/test/files.rb +0 -29
- data/test/foo.rb +0 -26
- data/test/helper.rb +0 -39
- data/test/isolated/shared.rb +0 -309
- data/test/isolated/test_mimic_after.rb +0 -13
- data/test/isolated/test_mimic_alone.rb +0 -12
- data/test/isolated/test_mimic_as_json.rb +0 -45
- data/test/isolated/test_mimic_before.rb +0 -13
- data/test/isolated/test_mimic_define.rb +0 -28
- data/test/isolated/test_mimic_rails_after.rb +0 -22
- data/test/isolated/test_mimic_rails_before.rb +0 -21
- data/test/isolated/test_mimic_redefine.rb +0 -15
- data/test/json_gem/json_addition_test.rb +0 -216
- data/test/json_gem/json_common_interface_test.rb +0 -155
- data/test/json_gem/json_encoding_test.rb +0 -107
- data/test/json_gem/json_ext_parser_test.rb +0 -21
- data/test/json_gem/json_fixtures_test.rb +0 -36
- data/test/json_gem/json_generator_test.rb +0 -413
- data/test/json_gem/json_generic_object_test.rb +0 -90
- data/test/json_gem/json_parser_test.rb +0 -477
- data/test/json_gem/json_string_matching_test.rb +0 -42
- data/test/json_gem/test_helper.rb +0 -30
- data/test/mem.rb +0 -34
- data/test/perf.rb +0 -102
- data/test/perf_compat.rb +0 -128
- data/test/perf_dump.rb +0 -50
- data/test/perf_fast.rb +0 -162
- data/test/perf_file.rb +0 -62
- data/test/perf_object.rb +0 -134
- data/test/perf_once.rb +0 -59
- data/test/perf_parser.rb +0 -183
- data/test/perf_saj.rb +0 -101
- data/test/perf_scp.rb +0 -140
- data/test/perf_simple.rb +0 -289
- data/test/perf_strict.rb +0 -137
- data/test/perf_wab.rb +0 -129
- data/test/prec.rb +0 -23
- data/test/sample/change.rb +0 -13
- data/test/sample/dir.rb +0 -18
- data/test/sample/doc.rb +0 -35
- data/test/sample/file.rb +0 -47
- data/test/sample/group.rb +0 -15
- data/test/sample/hasprops.rb +0 -15
- data/test/sample/layer.rb +0 -11
- data/test/sample/line.rb +0 -20
- data/test/sample/oval.rb +0 -10
- data/test/sample/rect.rb +0 -9
- data/test/sample/shape.rb +0 -34
- data/test/sample/text.rb +0 -19
- data/test/sample.rb +0 -54
- data/test/sample_json.rb +0 -37
- data/test/test_compat.rb +0 -567
- data/test/test_custom.rb +0 -555
- data/test/test_debian.rb +0 -50
- data/test/test_fast.rb +0 -526
- data/test/test_file.rb +0 -250
- data/test/test_gc.rb +0 -60
- data/test/test_generate.rb +0 -21
- data/test/test_hash.rb +0 -39
- data/test/test_integer_range.rb +0 -72
- data/test/test_null.rb +0 -376
- data/test/test_object.rb +0 -1030
- data/test/test_parser.rb +0 -11
- data/test/test_parser_debug.rb +0 -27
- data/test/test_parser_saj.rb +0 -337
- data/test/test_parser_usual.rb +0 -255
- data/test/test_rails.rb +0 -35
- data/test/test_saj.rb +0 -188
- data/test/test_scp.rb +0 -431
- data/test/test_strict.rb +0 -441
- data/test/test_various.rb +0 -801
- data/test/test_wab.rb +0 -311
- data/test/test_writer.rb +0 -396
- data/test/tests.rb +0 -33
- data/test/tests_mimic.rb +0 -23
- data/test/tests_mimic_addition.rb +0 -16
data/test/test_custom.rb
DELETED
@@ -1,555 +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 object 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 => :xmlschema, :create_id => '^o', :create_additions => true, second_precision: 3)
|
509
|
-
dump_load_dump(obj, false, :time_format => :ruby, :create_id => '^o', :create_additions => true)
|
510
|
-
end
|
511
|
-
|
512
|
-
def dump_and_load(obj, trace=false, options={})
|
513
|
-
options = options.merge(:indent => 2, :mode => :custom)
|
514
|
-
json = Oj.dump(obj, options)
|
515
|
-
puts json if trace
|
516
|
-
|
517
|
-
loaded = Oj.load(json, options)
|
518
|
-
if obj.nil?
|
519
|
-
assert_nil(loaded)
|
520
|
-
else
|
521
|
-
assert_equal(obj, loaded)
|
522
|
-
end
|
523
|
-
loaded
|
524
|
-
end
|
525
|
-
|
526
|
-
def dump_and_load_inspect(obj, trace=false, options={})
|
527
|
-
options = options.merge(:indent => 2, :mode => :custom)
|
528
|
-
json = Oj.dump(obj, options)
|
529
|
-
puts json if trace
|
530
|
-
|
531
|
-
loaded = Oj.load(json, options)
|
532
|
-
if obj.nil?
|
533
|
-
assert_nil(loaded)
|
534
|
-
else
|
535
|
-
assert_equal(obj.inspect, loaded.inspect)
|
536
|
-
end
|
537
|
-
loaded
|
538
|
-
end
|
539
|
-
|
540
|
-
def dump_load_dump(obj, trace=false, options={})
|
541
|
-
options = options.merge(:indent => 2, :mode => :custom)
|
542
|
-
json = Oj.dump(obj, options)
|
543
|
-
puts json if trace
|
544
|
-
|
545
|
-
loaded = Oj.load(json, options)
|
546
|
-
if obj.nil?
|
547
|
-
assert_nil(loaded)
|
548
|
-
else
|
549
|
-
json2 = Oj.dump(loaded, options)
|
550
|
-
assert_equal(json, json2)
|
551
|
-
end
|
552
|
-
loaded
|
553
|
-
end
|
554
|
-
|
555
|
-
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
|