oj 3.9.1 → 3.16.11

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 (171) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1452 -0
  3. data/README.md +21 -6
  4. data/RELEASE_NOTES.md +61 -0
  5. data/ext/oj/buf.h +50 -68
  6. data/ext/oj/cache.c +329 -0
  7. data/ext/oj/cache.h +22 -0
  8. data/ext/oj/cache8.c +60 -62
  9. data/ext/oj/cache8.h +9 -36
  10. data/ext/oj/circarray.c +38 -42
  11. data/ext/oj/circarray.h +12 -13
  12. data/ext/oj/code.c +158 -179
  13. data/ext/oj/code.h +20 -22
  14. data/ext/oj/compat.c +145 -205
  15. data/ext/oj/custom.c +740 -880
  16. data/ext/oj/debug.c +126 -0
  17. data/ext/oj/dump.c +1145 -844
  18. data/ext/oj/dump.h +71 -57
  19. data/ext/oj/dump_compat.c +575 -655
  20. data/ext/oj/dump_leaf.c +96 -186
  21. data/ext/oj/dump_object.c +533 -660
  22. data/ext/oj/dump_strict.c +306 -340
  23. data/ext/oj/encode.h +4 -33
  24. data/ext/oj/encoder.c +43 -0
  25. data/ext/oj/err.c +28 -28
  26. data/ext/oj/err.h +39 -42
  27. data/ext/oj/extconf.rb +28 -7
  28. data/ext/oj/fast.c +1052 -1113
  29. data/ext/oj/intern.c +313 -0
  30. data/ext/oj/intern.h +22 -0
  31. data/ext/oj/mem.c +318 -0
  32. data/ext/oj/mem.h +53 -0
  33. data/ext/oj/mimic_json.c +471 -430
  34. data/ext/oj/object.c +532 -580
  35. data/ext/oj/odd.c +156 -142
  36. data/ext/oj/odd.h +25 -26
  37. data/ext/oj/oj.c +1346 -961
  38. data/ext/oj/oj.h +307 -290
  39. data/ext/oj/parse.c +954 -858
  40. data/ext/oj/parse.h +74 -72
  41. data/ext/oj/parser.c +1600 -0
  42. data/ext/oj/parser.h +103 -0
  43. data/ext/oj/rails.c +819 -836
  44. data/ext/oj/rails.h +8 -11
  45. data/ext/oj/reader.c +136 -147
  46. data/ext/oj/reader.h +69 -83
  47. data/ext/oj/resolve.c +41 -63
  48. data/ext/oj/resolve.h +4 -6
  49. data/ext/oj/rxclass.c +69 -72
  50. data/ext/oj/rxclass.h +12 -13
  51. data/ext/oj/saj.c +440 -485
  52. data/ext/oj/saj2.c +584 -0
  53. data/ext/oj/saj2.h +23 -0
  54. data/ext/oj/scp.c +79 -118
  55. data/ext/oj/simd.h +10 -0
  56. data/ext/oj/sparse.c +739 -709
  57. data/ext/oj/stream_writer.c +141 -175
  58. data/ext/oj/strict.c +103 -128
  59. data/ext/oj/string_writer.c +244 -261
  60. data/ext/oj/trace.c +34 -41
  61. data/ext/oj/trace.h +42 -15
  62. data/ext/oj/usual.c +1218 -0
  63. data/ext/oj/usual.h +69 -0
  64. data/ext/oj/util.c +107 -107
  65. data/ext/oj/util.h +4 -3
  66. data/ext/oj/val_stack.c +61 -78
  67. data/ext/oj/val_stack.h +80 -114
  68. data/ext/oj/validate.c +46 -0
  69. data/ext/oj/wab.c +316 -361
  70. data/lib/oj/active_support_helper.rb +1 -3
  71. data/lib/oj/bag.rb +8 -1
  72. data/lib/oj/easy_hash.rb +9 -9
  73. data/lib/oj/error.rb +1 -2
  74. data/lib/oj/json.rb +162 -150
  75. data/lib/oj/mimic.rb +54 -20
  76. data/lib/oj/saj.rb +20 -6
  77. data/lib/oj/schandler.rb +5 -4
  78. data/lib/oj/state.rb +12 -8
  79. data/lib/oj/version.rb +1 -2
  80. data/lib/oj.rb +2 -8
  81. data/pages/Compatibility.md +1 -1
  82. data/pages/Encoding.md +1 -1
  83. data/pages/InstallOptions.md +20 -0
  84. data/pages/JsonGem.md +15 -0
  85. data/pages/Modes.md +9 -3
  86. data/pages/Options.md +62 -12
  87. data/pages/Parser.md +309 -0
  88. data/pages/Rails.md +73 -22
  89. metadata +68 -192
  90. data/ext/oj/hash.c +0 -163
  91. data/ext/oj/hash.h +0 -46
  92. data/ext/oj/hash_test.c +0 -512
  93. data/test/_test_active.rb +0 -76
  94. data/test/_test_active_mimic.rb +0 -96
  95. data/test/_test_mimic_rails.rb +0 -126
  96. data/test/activerecord/result_test.rb +0 -27
  97. data/test/activesupport4/decoding_test.rb +0 -108
  98. data/test/activesupport4/encoding_test.rb +0 -531
  99. data/test/activesupport4/test_helper.rb +0 -41
  100. data/test/activesupport5/decoding_test.rb +0 -125
  101. data/test/activesupport5/encoding_test.rb +0 -485
  102. data/test/activesupport5/encoding_test_cases.rb +0 -90
  103. data/test/activesupport5/test_helper.rb +0 -50
  104. data/test/activesupport5/time_zone_test_helpers.rb +0 -24
  105. data/test/bar.rb +0 -25
  106. data/test/files.rb +0 -29
  107. data/test/foo.rb +0 -21
  108. data/test/helper.rb +0 -26
  109. data/test/isolated/shared.rb +0 -308
  110. data/test/isolated/test_mimic_after.rb +0 -13
  111. data/test/isolated/test_mimic_alone.rb +0 -12
  112. data/test/isolated/test_mimic_as_json.rb +0 -45
  113. data/test/isolated/test_mimic_before.rb +0 -13
  114. data/test/isolated/test_mimic_define.rb +0 -28
  115. data/test/isolated/test_mimic_rails_after.rb +0 -22
  116. data/test/isolated/test_mimic_rails_before.rb +0 -21
  117. data/test/isolated/test_mimic_redefine.rb +0 -15
  118. data/test/json_gem/json_addition_test.rb +0 -216
  119. data/test/json_gem/json_common_interface_test.rb +0 -148
  120. data/test/json_gem/json_encoding_test.rb +0 -107
  121. data/test/json_gem/json_ext_parser_test.rb +0 -20
  122. data/test/json_gem/json_fixtures_test.rb +0 -35
  123. data/test/json_gem/json_generator_test.rb +0 -383
  124. data/test/json_gem/json_generic_object_test.rb +0 -90
  125. data/test/json_gem/json_parser_test.rb +0 -470
  126. data/test/json_gem/json_string_matching_test.rb +0 -42
  127. data/test/json_gem/test_helper.rb +0 -18
  128. data/test/perf.rb +0 -107
  129. data/test/perf_compat.rb +0 -130
  130. data/test/perf_fast.rb +0 -164
  131. data/test/perf_file.rb +0 -64
  132. data/test/perf_object.rb +0 -138
  133. data/test/perf_saj.rb +0 -109
  134. data/test/perf_scp.rb +0 -151
  135. data/test/perf_simple.rb +0 -287
  136. data/test/perf_strict.rb +0 -145
  137. data/test/perf_wab.rb +0 -131
  138. data/test/sample/change.rb +0 -14
  139. data/test/sample/dir.rb +0 -19
  140. data/test/sample/doc.rb +0 -36
  141. data/test/sample/file.rb +0 -48
  142. data/test/sample/group.rb +0 -16
  143. data/test/sample/hasprops.rb +0 -16
  144. data/test/sample/layer.rb +0 -12
  145. data/test/sample/line.rb +0 -20
  146. data/test/sample/oval.rb +0 -10
  147. data/test/sample/rect.rb +0 -10
  148. data/test/sample/shape.rb +0 -35
  149. data/test/sample/text.rb +0 -20
  150. data/test/sample.rb +0 -54
  151. data/test/sample_json.rb +0 -37
  152. data/test/test_compat.rb +0 -509
  153. data/test/test_custom.rb +0 -503
  154. data/test/test_debian.rb +0 -53
  155. data/test/test_fast.rb +0 -470
  156. data/test/test_file.rb +0 -239
  157. data/test/test_gc.rb +0 -49
  158. data/test/test_hash.rb +0 -29
  159. data/test/test_integer_range.rb +0 -73
  160. data/test/test_null.rb +0 -376
  161. data/test/test_object.rb +0 -1018
  162. data/test/test_saj.rb +0 -186
  163. data/test/test_scp.rb +0 -433
  164. data/test/test_strict.rb +0 -410
  165. data/test/test_various.rb +0 -741
  166. data/test/test_wab.rb +0 -307
  167. data/test/test_writer.rb +0 -380
  168. data/test/tests.rb +0 -24
  169. data/test/tests_mimic.rb +0 -14
  170. data/test/tests_mimic_addition.rb +0 -7
  171. data/test/zoo.rb +0 -13
data/test/test_custom.rb DELETED
@@ -1,503 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # encoding: utf-8
3
-
4
- $: << File.dirname(__FILE__)
5
- $oj_dir = File.dirname(File.expand_path(File.dirname(__FILE__)))
6
- %w(lib ext).each do |dir|
7
- $: << 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
24
-
25
- def initialize(x, y)
26
- @x = x
27
- @y = y
28
- end
29
- def ==(o)
30
- self.class == o.class && @x == o.x && @y = o.y
31
- end
32
- def to_json(*args)
33
- %|{"xx":#{@x},"yy":#{y}}|
34
- end
35
- def raw_json(depth, indent)
36
- %|{"xxx":#{@x},"yyy":#{y}}|
37
- end
38
- def as_json(*args)
39
- {'a' => @x, :b => @y }
40
- end
41
- def to_hash()
42
- {'b' => @x, 'n' => @y }
43
- end
44
- end
45
-
46
- class AsJson
47
- attr_accessor :x, :y
48
-
49
- def initialize(x, y)
50
- @x = x
51
- @y = y
52
- end
53
- def ==(o)
54
- self.class == o.class && @x == o.x && @y = o.y
55
- end
56
- def as_json(*args)
57
- {'a' => @x, :b => @y }
58
- end
59
- end
60
-
61
- class AsRails
62
- attr_accessor :x, :y
63
-
64
- def initialize(x, y)
65
- @x = x
66
- @y = y
67
- end
68
- def ==(o)
69
- self.class == o.class && @x == o.x && @y = o.y
70
- end
71
- def as_json(*args)
72
- a = @x
73
- a = a.as_json if a.respond_to?('as_json')
74
- b = @y
75
- b = b.as_json if b.respond_to?('as_json')
76
- {'a' => a, :b => b }
77
- end
78
- end
79
-
80
- def setup
81
- @default_options = Oj.default_options
82
- Oj.default_options = { :mode => :custom }
83
- end
84
-
85
- def teardown
86
- Oj.default_options = @default_options
87
- end
88
-
89
- def test_nil
90
- dump_and_load(nil, false)
91
- end
92
-
93
- def test_true
94
- dump_and_load(true, false)
95
- end
96
-
97
- def test_false
98
- dump_and_load(false, false)
99
- end
100
-
101
- def test_fixnum
102
- dump_and_load(0, false)
103
- dump_and_load(12345, false)
104
- dump_and_load(-54321, false)
105
- dump_and_load(1, false)
106
- end
107
-
108
- def test_float
109
- dump_and_load(0.0, false)
110
- dump_and_load(12345.6789, false)
111
- dump_and_load(70.35, false)
112
- dump_and_load(-54321.012, false)
113
- dump_and_load(1.7775, false)
114
- dump_and_load(2.5024, false)
115
- dump_and_load(2.48e16, false)
116
- dump_and_load(2.48e100 * 1.0e10, false)
117
- dump_and_load(-2.48e100 * 1.0e10, false)
118
- end
119
-
120
- def test_nan_dump
121
- assert_equal('null', Oj.dump(0/0.0, :nan => :null))
122
- assert_equal('3.3e14159265358979323846', Oj.dump(0/0.0, :nan => :huge))
123
- assert_equal('NaN', Oj.dump(0/0.0, :nan => :word))
124
- begin
125
- Oj.dump(0/0.0, :nan => :raise)
126
- rescue Exception
127
- assert(true)
128
- return
129
- end
130
- assert(false, "*** expected an exception")
131
- end
132
-
133
- def test_infinity_dump
134
- assert_equal('null', Oj.dump(1/0.0, :nan => :null))
135
- assert_equal('3.0e14159265358979323846', Oj.dump(1/0.0, :nan => :huge))
136
- assert_equal('Infinity', Oj.dump(1/0.0, :nan => :word))
137
- begin
138
- Oj.dump(1/0.0, :nan => :raise)
139
- rescue Exception
140
- assert(true)
141
- return
142
- end
143
- assert(false, "*** expected an exception")
144
- end
145
-
146
- def test_neg_infinity_dump
147
- assert_equal('null', Oj.dump(-1/0.0, :nan => :null))
148
- assert_equal('-3.0e14159265358979323846', Oj.dump(-1/0.0, :nan => :huge))
149
- assert_equal('-Infinity', Oj.dump(-1/0.0, :nan => :word))
150
- begin
151
- Oj.dump(-1/0.0, :nan => :raise)
152
- rescue Exception
153
- assert(true)
154
- return
155
- end
156
- assert(false, "*** expected an exception")
157
- end
158
-
159
- def test_string
160
- dump_and_load('', false)
161
- dump_and_load('abc', false)
162
- dump_and_load("abc\ndef", false)
163
- dump_and_load("a\u0041", false)
164
- end
165
-
166
- def test_string_ascii
167
- json = Oj.dump("ぴーたー", :escape_mode => :ascii)
168
- assert_equal(%{"\\u3074\\u30fc\\u305f\\u30fc"}, json)
169
- dump_and_load("ぴーたー", false, :escape_mode => :ascii)
170
- end
171
-
172
- def test_string_json
173
- json = Oj.dump("ぴーたー", :escape_mode => :json)
174
- assert_equal(%{"ぴーたー"}, json)
175
- dump_and_load("ぴーたー", false, :escape_mode => :json)
176
- end
177
-
178
- def test_array
179
- dump_and_load([], false)
180
- dump_and_load([true, false], false)
181
- dump_and_load(['a', 1, nil], false)
182
- dump_and_load([[nil]], false)
183
- dump_and_load([[nil], 58], false)
184
- end
185
-
186
- def test_array_deep
187
- dump_and_load([1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,[15,[16,[17,[18,[19,[20]]]]]]]]]]]]]]]]]]]], false)
188
- end
189
-
190
- def test_deep_nest
191
- begin
192
- n = 10000
193
- Oj.strict_load('[' * n + ']' * n)
194
- rescue Exception => e
195
- assert(false, e.message)
196
- end
197
- end
198
-
199
- def test_hash
200
- dump_and_load({}, false)
201
- dump_and_load({ 'true' => true, 'false' => false}, false)
202
- dump_and_load({ 'true' => true, 'array' => [], 'hash' => { }}, false)
203
- end
204
-
205
- def test_hash_deep
206
- dump_and_load({'1' => {
207
- '2' => {
208
- '3' => {
209
- '4' => {
210
- '5' => {
211
- '6' => {
212
- '7' => {
213
- '8' => {
214
- '9' => {
215
- '10' => {
216
- '11' => {
217
- '12' => {
218
- '13' => {
219
- '14' => {
220
- '15' => {
221
- '16' => {
222
- '17' => {
223
- '18' => {
224
- '19' => {
225
- '20' => {}}}}}}}}}}}}}}}}}}}}}, false)
226
- end
227
-
228
- def test_hash_escaped_key
229
- json = %{{"a\nb":true,"c\td":false}}
230
- obj = Oj.load(json)
231
- assert_equal({"a\nb" => true, "c\td" => false}, obj)
232
- end
233
-
234
- def test_hash_non_string_key
235
- assert_equal(%|{"1":true}|, Oj.dump({ 1 => true }, :indent => 0))
236
- end
237
-
238
- def test_bignum_object
239
- dump_and_load(7 ** 55, false)
240
- end
241
-
242
- def test_bigdecimal
243
- assert_equal('0.314159265358979323846e1', Oj.dump(BigDecimal('3.14159265358979323846'), bigdecimal_as_decimal: true).downcase())
244
- assert_equal('"0.314159265358979323846e1"', Oj.dump(BigDecimal('3.14159265358979323846'), bigdecimal_as_decimal: false).downcase())
245
- dump_and_load(BigDecimal('3.14159265358979323846'), false, :bigdecimal_load => true)
246
- end
247
-
248
- def test_object
249
- obj = Jeez.new(true, 58)
250
- Oj.dump(obj, :create_id => "^o", :use_to_json => false, :use_as_json => false, :use_to_hash => false)
251
- dump_and_load(obj, false, :create_id => "^o", :create_additions => true)
252
- end
253
-
254
- def test_object_to_json
255
- obj = Jeez.new(true, 58)
256
- json = Oj.dump(obj, :use_to_json => true, :use_as_json => false, :use_to_hash => false)
257
- assert_equal(%|{"xx":true,"yy":58}|, json)
258
- end
259
-
260
- def test_object_as_json
261
- obj = Jeez.new(true, 58)
262
- json = Oj.dump(obj, :use_to_json => false, :use_as_json => true, :use_to_hash => false)
263
- assert_equal(%|{"a":true,"b":58}|, json)
264
- end
265
-
266
- def test_object_to_hash
267
- obj = Jeez.new(true, 58)
268
- json = Oj.dump(obj, :use_to_json => false, :use_as_json => false, :use_to_hash => true)
269
- assert_equal(%|{"b":true,"n":58}|, json)
270
- end
271
-
272
- def test_object_raw_json
273
- obj = Jeez.new(true, 58)
274
- json = Oj.dump(obj, :use_to_json => true, :use_as_json => false, :use_raw_json => true, :use_to_hash => false)
275
- assert_equal(%|{"xxx":true,"yyy":58}|, json)
276
- end
277
-
278
- def test_raw_json_stringwriter
279
- obj = Oj::StringWriter.new(:indent => 0)
280
- obj.push_array()
281
- obj.pop()
282
- json = Oj.dump(obj, :use_raw_json => true)
283
- assert_equal(%|[]|, json)
284
- end
285
-
286
- def test_as_raw_json_stringwriter
287
- obj = Oj::StringWriter.new(:indent => 0)
288
- obj.push_array()
289
- obj.push_value(3)
290
- obj.pop()
291
- j = AsJson.new(1, obj)
292
-
293
- json = Oj.dump(j, use_raw_json: true, use_as_json: true, indent: 2)
294
- assert_equal(%|{
295
- "a":1,
296
- "b":[3]
297
- }
298
- |, json)
299
-
300
- json = Oj.dump(j, use_raw_json: false, use_as_json: true, indent: 2)
301
- assert_equal(%|{
302
- "a":1,
303
- "b":{}
304
- }
305
- |, json)
306
- end
307
-
308
- def test_rails_as_raw_json_stringwriter
309
- obj = Oj::StringWriter.new(:indent => 0)
310
- obj.push_array()
311
- obj.push_value(3)
312
- obj.pop()
313
- j = AsRails.new(1, obj)
314
- json = Oj.dump(j, mode: :rails, use_raw_json: true, indent: 2)
315
- assert_equal(%|{
316
- "a":1,
317
- "b":{}
318
- }
319
- |, json)
320
-
321
- Oj::Rails.optimize
322
- json = Oj.dump(j, mode: :rails, use_raw_json: true, indent: 2)
323
- Oj::Rails.deoptimize
324
- assert_equal(%|{
325
- "a":1,
326
- "b":[3]
327
- }
328
- |, json)
329
-
330
- end
331
-
332
- def test_symbol
333
- json = Oj.dump(:abc)
334
- assert_equal('"abc"', json)
335
- end
336
-
337
- def test_class
338
- assert_equal(%|"CustomJuice"|, Oj.dump(CustomJuice))
339
- end
340
-
341
- def test_module
342
- assert_equal(%|"CustomJuice::TestModule"|, Oj.dump(TestModule))
343
- end
344
-
345
- def test_symbol_keys
346
- json = %|{
347
- "x":true,
348
- "y":58,
349
- "z": [1,2,3]
350
- }
351
- |
352
- obj = Oj.load(json, :symbol_keys => true)
353
- assert_equal({ :x => true, :y => 58, :z => [1, 2, 3]}, obj)
354
- end
355
-
356
- def test_double
357
- json = %{{ "x": 1}{ "y": 2}}
358
- results = []
359
- Oj.load(json, :mode => :strict) { |x| results << x }
360
-
361
- assert_equal([{ 'x' => 1 }, { 'y' => 2 }], results)
362
- end
363
-
364
- def test_circular_hash
365
- h = { 'a' => 7 }
366
- h['b'] = h
367
- json = Oj.dump(h, :indent => 2, :circular => true)
368
- assert_equal(%|{
369
- "a":7,
370
- "b":null
371
- }
372
- |, json)
373
- end
374
-
375
- def test_omit_nil
376
- json = Oj.dump({'x' => {'a' => 1, 'b' => nil }, 'y' => nil}, :omit_nil => true)
377
- assert_equal(%|{"x":{"a":1}}|, json)
378
- end
379
-
380
- def test_complex
381
- obj = Complex(2, 9)
382
- dump_and_load(obj, false, :create_id => "^o", :create_additions => true)
383
- end
384
-
385
- def test_rational
386
- obj = Rational(2, 9)
387
- dump_and_load(obj, false, :create_id => "^o", :create_additions => true)
388
- end
389
-
390
- def test_range
391
- obj = 3..8
392
- dump_and_load(obj, false, :create_id => "^o", :create_additions => true)
393
- end
394
-
395
- def test_date
396
- obj = Date.new(2017, 1, 5)
397
- dump_and_load(obj, false, :create_id => "^o", :create_additions => true)
398
- end
399
-
400
- def test_date_unix
401
- obj = Date.new(2017, 1, 5)
402
- json = Oj.dump(obj, :indent => 2, time_format: :unix)
403
- assert_equal('1483574400.000000000', json)
404
- end
405
-
406
- def test_date_unix_zone
407
- obj = Date.new(2017, 1, 5)
408
- json = Oj.dump(obj, :indent => 2, time_format: :unix_zone)
409
- assert_equal('1483574400.000000000', json)
410
- end
411
-
412
- def test_date_ruby
413
- obj = Date.new(2017, 1, 5)
414
- json = Oj.dump(obj, :indent => 2, time_format: :ruby)
415
- assert_equal('"2017-01-05"', json)
416
- end
417
-
418
- def test_date_xmlschema
419
- obj = Date.new(2017, 1, 5)
420
- json = Oj.dump(obj, :indent => 2, time_format: :xmlschema)
421
- assert_equal('"2017-01-05"', json)
422
- end
423
-
424
- def test_datetime
425
- obj = DateTime.new(2017, 1, 5, 10, 20, 30)
426
- dump_and_load(obj, false, :create_id => "^o", :create_additions => true)
427
- end
428
-
429
- def test_datetime_unix
430
- obj = DateTime.new(2017, 1, 5, 10, 20, 30, '-0500')
431
- json = Oj.dump(obj, :indent => 2, time_format: :unix)
432
- assert_equal('1483629630.000000000', json)
433
- end
434
-
435
- def test_datetime_unix_zone
436
- # older versions seems to have issues getting the utc offset.
437
- if '2.4' <= RUBY_VERSION
438
- obj = DateTime.new(2017, 1, 5, 10, 20, 30, '-0500')
439
- json = Oj.dump(obj, :indent => 2, time_format: :unix_zone)
440
- assert_equal('1483629630.000000000e-18000', json)
441
- end
442
- end
443
-
444
- def test_datetime_ruby
445
- obj = DateTime.new(2017, 1, 5, 10, 20, 30, '-0500')
446
- json = Oj.dump(obj, :indent => 2, time_format: :ruby)
447
- assert_equal('"2017-01-05T10:20:30-05:00"', json)
448
- end
449
-
450
- def test_datetime_xmlschema
451
- obj = DateTime.new(2017, 1, 5, 10, 20, 30, '-0500')
452
- json = Oj.dump(obj, :indent => 2, time_format: :xmlschema)
453
- assert_equal('"2017-01-05T10:20:30-05:00"', json)
454
- end
455
-
456
- def test_regexp
457
- # this notation must be used to get an == match later
458
- obj = /(?ix-m:^yes$)/
459
- dump_and_load(obj, false, :create_id => "^o", :create_additions => true)
460
- end
461
-
462
- def test_openstruct
463
- obj = OpenStruct.new(:a => 1, 'b' => 2)
464
- dump_and_load(obj, false, :create_id => "^o", :create_additions => true)
465
- end
466
-
467
- def test_time
468
- obj = Time.now()
469
- dump_and_load(obj, false, :time_format => :unix, :create_id => "^o", :create_additions => true)
470
- dump_and_load_inspect(obj, false, :time_format => :unix_zone, :create_id => "^o", :create_additions => true)
471
- dump_and_load_inspect(obj, false, :time_format => :xmlschema, :create_id => "^o", :create_additions => true)
472
- dump_and_load_inspect(obj, false, :time_format => :ruby, :create_id => "^o", :create_additions => true)
473
- end
474
-
475
- def dump_and_load(obj, trace=false, options={})
476
- options = options.merge(:indent => 2, :mode => :custom)
477
- json = Oj.dump(obj, options)
478
- puts json if trace
479
-
480
- loaded = Oj.load(json, options);
481
- if obj.nil?
482
- assert_nil(loaded)
483
- else
484
- assert_equal(obj, loaded)
485
- end
486
- loaded
487
- end
488
-
489
- def dump_and_load_inspect(obj, trace=false, options={})
490
- options = options.merge(:indent => 2, :mode => :custom)
491
- json = Oj.dump(obj, options)
492
- puts json if trace
493
-
494
- loaded = Oj.load(json, options);
495
- if obj.nil?
496
- assert_nil(loaded)
497
- else
498
- assert_equal(obj.inspect, loaded.inspect)
499
- end
500
- loaded
501
- end
502
-
503
- end
data/test/test_debian.rb DELETED
@@ -1,53 +0,0 @@
1
- # encoding: UTF-8
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
- def initialize(x, y)
24
- super
25
- end
26
-
27
- def as_json()
28
- { :json_class => self.class,
29
- :x => @x,
30
- :y => @y }
31
- end
32
-
33
- def self.json_create(h)
34
- self.new(h['x'], h['y'])
35
- end
36
- end
37
-
38
- def test_as_json_object_compat_hash_cached
39
- Oj.default_options = { :mode => :compat, :class_cache => true, :use_as_json => true }
40
- obj = Orange.new(true, 58)
41
- json = Oj.dump(obj, :indent => 2)
42
- assert(!json.nil?)
43
- dump_and_load(obj, true)
44
- end
45
-
46
- def dump_and_load(obj, trace=false)
47
- json = Oj.dump(obj, :indent => 2)
48
- loaded = Oj.load(json);
49
- assert_equal(obj, loaded)
50
- loaded
51
- end
52
-
53
- end