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_compat.rb DELETED
@@ -1,509 +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 CompatJuice < Minitest::Test
18
-
19
- class Jeez
20
- attr_accessor :x, :y
21
-
22
- def initialize(x, y)
23
- @x = x
24
- @y = y
25
- end
26
-
27
- def eql?(o)
28
- self.class == o.class && @x == o.x && @y == o.y
29
- end
30
- alias == eql?
31
-
32
- def to_json(*a)
33
- %|{"json_class":"#{self.class.to_s}","x":#{@x},"y":#{@y}}|
34
- end
35
-
36
- def self.json_create(h)
37
- self.new(h['x'], h['y'])
38
- end
39
- end # Jeez
40
-
41
- class Argy
42
- def initialize()
43
- end
44
-
45
- def to_json(*a)
46
- %|{"args":"#{a}"}|
47
- end
48
- end # Argy
49
-
50
- class Stringy
51
- def initialize()
52
- end
53
-
54
- def to_s()
55
- %|[1,2]|
56
- end
57
- end # Stringy
58
-
59
- module One
60
- module Two
61
- module Three
62
- class Deep
63
-
64
- def initialize()
65
- end
66
-
67
- def eql?(o)
68
- self.class == o.class
69
- end
70
- alias == eql?
71
-
72
- def to_json(*a)
73
- %|{"json_class":"#{self.class.name}"}|
74
- end
75
-
76
- def self.json_create(h)
77
- self.new()
78
- end
79
- end # Deep
80
- end # Three
81
- end # Two
82
- end # One
83
-
84
- def setup
85
- @default_options = Oj.default_options
86
- # in compat mode other options other than the JSON gem globals and options
87
- # are not used.
88
- Oj.default_options = { :mode => :compat }
89
- end
90
-
91
- def teardown
92
- Oj.default_options = @default_options
93
- end
94
-
95
- def test_nil
96
- dump_and_load(nil, false)
97
- end
98
-
99
- def test_true
100
- dump_and_load(true, false)
101
- end
102
-
103
- def test_false
104
- dump_and_load(false, false)
105
- end
106
-
107
- def test_fixnum
108
- dump_and_load(0, false)
109
- dump_and_load(12345, false)
110
- dump_and_load(-54321, false)
111
- dump_and_load(1, false)
112
- end
113
-
114
- def test_float
115
- dump_and_load(0.0, false)
116
- dump_and_load(0.56, false)
117
- dump_and_load(3.0, false)
118
- dump_and_load(12345.6789, false)
119
- dump_and_load(70.35, false)
120
- dump_and_load(-54321.012, false)
121
- dump_and_load(1.7775, false)
122
- dump_and_load(2.5024, false)
123
- dump_and_load(2.48e16, false)
124
- dump_and_load(2.48e100 * 1.0e10, false)
125
- dump_and_load(-2.48e100 * 1.0e10, false)
126
- dump_and_load(1405460727.723866, false)
127
- dump_and_load(0.5773, false)
128
- dump_and_load(0.6768, false)
129
- dump_and_load(0.685, false)
130
- dump_and_load(0.7032, false)
131
- dump_and_load(0.7051, false)
132
- dump_and_load(0.8274, false)
133
- dump_and_load(0.9149, false)
134
- dump_and_load(64.4, false)
135
- dump_and_load(71.6, false)
136
- dump_and_load(73.4, false)
137
- dump_and_load(80.6, false)
138
- dump_and_load(-95.640172, false)
139
- end
140
-
141
- def test_string
142
- dump_and_load('', false)
143
- dump_and_load('abc', false)
144
- dump_and_load("abc\ndef", false)
145
- dump_and_load("a\u0041", false)
146
- end
147
-
148
- def test_encode
149
- opts = Oj.default_options
150
- Oj.default_options = { :ascii_only => false }
151
- unless 'jruby' == $ruby
152
- dump_and_load("ぴーたー", false)
153
- end
154
- Oj.default_options = { :ascii_only => true }
155
- json = Oj.dump("ぴーたー")
156
- assert_equal(%{"\\u3074\\u30fc\\u305f\\u30fc"}, json)
157
- unless 'jruby' == $ruby
158
- dump_and_load("ぴーたー", false)
159
- end
160
- Oj.default_options = opts
161
- end
162
-
163
- def test_unicode
164
- # hits the 3 normal ranges and one extended surrogate pair
165
- json = %{"\\u019f\\u05e9\\u3074\\ud834\\udd1e"}
166
- obj = Oj.load(json)
167
- json2 = Oj.dump(obj, :ascii_only => true)
168
- assert_equal(json, json2)
169
- end
170
-
171
- def test_array
172
- dump_and_load([], false)
173
- dump_and_load([true, false], false)
174
- dump_and_load(['a', 1, nil], false)
175
- dump_and_load([[nil]], false)
176
- dump_and_load([[nil], 58], false)
177
- end
178
-
179
- def test_array_deep
180
- dump_and_load([1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,[15,[16,[17,[18,[19,[20]]]]]]]]]]]]]]]]]]]], false)
181
- end
182
-
183
- def test_symbol
184
- json = Oj.dump(:abc, :mode => :compat)
185
- assert_equal('"abc"', json)
186
- end
187
-
188
- def test_time
189
- t = Time.xmlschema("2012-01-05T23:58:07.123456000+09:00")
190
- #t = Time.local(2012, 1, 5, 23, 58, 7, 123456)
191
- json = Oj.dump(t, :mode => :compat)
192
- assert_equal(%{"2012-01-05 23:58:07 +0900"}, json)
193
- end
194
-
195
- def test_class
196
- json = Oj.dump(CompatJuice, :mode => :compat)
197
- assert_equal(%{"CompatJuice"}, json)
198
- end
199
-
200
- def test_module
201
- json = Oj.dump(One::Two, :mode => :compat)
202
- assert_equal(%{"CompatJuice::One::Two"}, json)
203
- end
204
-
205
- # Hash
206
- def test_non_str_hash
207
- json = Oj.dump({ 1 => true, 0 => false }, :mode => :compat)
208
- h = Oj.load(json, :mode => :strict)
209
- assert_equal({ "1" => true, "0" => false }, h)
210
- end
211
- def test_hash
212
- dump_and_load({}, false)
213
- dump_and_load({ 'true' => true, 'false' => false}, false)
214
- dump_and_load({ 'true' => true, 'array' => [], 'hash' => { }}, false)
215
- end
216
-
217
- def test_hash_deep
218
- dump_and_load({'1' => {
219
- '2' => {
220
- '3' => {
221
- '4' => {
222
- '5' => {
223
- '6' => {
224
- '7' => {
225
- '8' => {
226
- '9' => {
227
- '10' => {
228
- '11' => {
229
- '12' => {
230
- '13' => {
231
- '14' => {
232
- '15' => {
233
- '16' => {
234
- '17' => {
235
- '18' => {
236
- '19' => {
237
- '20' => {}}}}}}}}}}}}}}}}}}}}}, false)
238
- end
239
-
240
- def test_hash_escaped_key
241
- json = %{{"a\nb":true,"c\td":false}}
242
- obj = Oj.compat_load(json)
243
- assert_equal({"a\nb" => true, "c\td" => false}, obj)
244
- end
245
-
246
- def test_hash_escaping
247
- json = Oj.to_json({'<>' => '<>'}, mode: :compat)
248
- assert_equal(json, '{"<>":"<>"}')
249
- end
250
-
251
- def test_bignum_object
252
- dump_and_load(7 ** 55, false)
253
- end
254
-
255
- def test_json_object
256
- obj = Jeez.new(true, 58)
257
- json = Oj.to_json(obj)
258
- assert(%|{"json_class":"CompatJuice::Jeez","x":true,"y":58}| == json ||
259
- %|{"json_class":"CompatJuice::Jeez","y":58,"x":true}| == json)
260
- dump_to_json_and_load(obj, false)
261
- end
262
-
263
- def test_json_object_create_id
264
- Oj.default_options = { :create_id => 'kson_class', :create_additions => true}
265
- expected = Jeez.new(true, 58)
266
- json = %{{"kson_class":"CompatJuice::Jeez","x":true,"y":58}}
267
- obj = Oj.load(json)
268
- assert_equal(expected, obj)
269
- Oj.default_options = { :create_id => 'json_class' }
270
- end
271
-
272
- def test_bignum_compat
273
- json = Oj.dump(7 ** 55, :mode => :compat)
274
- b = Oj.load(json, :mode => :strict)
275
- assert_equal(30226801971775055948247051683954096612865741943, b)
276
- end
277
-
278
- # BigDecimal
279
- def test_bigdecimal
280
- # BigDecimals are dumped as strings and can not be restored to the
281
- # original value.
282
- json = Oj.dump(BigDecimal('3.14159265358979323846'))
283
- # 2.4.0 changes the exponent to lowercase
284
- assert_equal('"0.314159265358979323846e1"', json.downcase)
285
- end
286
-
287
- def test_infinity
288
- assert_raises(Oj::ParseError) { Oj.load('Infinity', :mode => :strict) }
289
- x = Oj.load('Infinity', :mode => :compat)
290
- assert_equal('Infinity', x.to_s)
291
- end
292
-
293
- # Time
294
- def test_time
295
- t = Time.new(2015, 1, 5, 21, 37, 7.123456, -8 * 3600)
296
- expect = '"' + t.to_s + '"'
297
- json = Oj.dump(t)
298
- assert_equal(expect, json)
299
- end
300
-
301
- def test_date_compat
302
- orig = Date.new(2012, 6, 19)
303
- json = Oj.dump(orig, :mode => :compat)
304
- x = Oj.load(json, :mode => :compat)
305
- # Some Rubies implement Date as data and some as a real Object. Either are
306
- # okay for the test.
307
- if x.is_a?(String)
308
- assert_equal(orig.to_s, x)
309
- else # better be a Hash
310
- assert_equal({"year" => orig.year, "month" => orig.month, "day" => orig.day, "start" => orig.start}, x)
311
- end
312
- end
313
-
314
- def test_datetime_compat
315
- orig = DateTime.new(2012, 6, 19, 20, 19, 27)
316
- json = Oj.dump(orig, :mode => :compat)
317
- x = Oj.load(json, :mode => :compat)
318
- # Some Rubies implement Date as data and some as a real Object. Either are
319
- # okay for the test.
320
- assert_equal(orig.to_s, x)
321
- end
322
-
323
- # Stream IO
324
- def test_io_string
325
- json = %{{
326
- "x":true,
327
- "y":58,
328
- "z": [1,2,3]
329
- }
330
- }
331
- input = StringIO.new(json)
332
- obj = Oj.compat_load(input)
333
- assert_equal({ 'x' => true, 'y' => 58, 'z' => [1, 2, 3]}, obj)
334
- end
335
-
336
- def test_io_file
337
- filename = File.join(File.dirname(__FILE__), 'open_file_test.json')
338
- File.open(filename, 'w') { |f| f.write(%{{
339
- "x":true,
340
- "y":58,
341
- "z": [1,2,3]
342
- }
343
- }) }
344
- f = File.new(filename)
345
- obj = Oj.compat_load(f)
346
- f.close()
347
- assert_equal({ 'x' => true, 'y' => 58, 'z' => [1, 2, 3]}, obj)
348
- end
349
-
350
- # symbol_keys option
351
- def test_symbol_keys
352
- json = %{{
353
- "x":true,
354
- "y":58,
355
- "z": [1,2,3]
356
- }
357
- }
358
- obj = Oj.compat_load(json, :symbol_keys => true)
359
- assert_equal({ :x => true, :y => 58, :z => [1, 2, 3]}, obj)
360
- end
361
-
362
- # comments
363
- def test_comment_slash
364
- json = %{{
365
- "x":true,//three
366
- "y":58,
367
- "z": [1,2,
368
- 3 // six
369
- ]}
370
- }
371
- obj = Oj.compat_load(json)
372
- assert_equal({ 'x' => true, 'y' => 58, 'z' => [1, 2, 3]}, obj)
373
- end
374
-
375
- def test_comment_c
376
- json = %{{
377
- "x"/*one*/:/*two*/true,
378
- "y":58,
379
- "z": [1,2,3]}
380
- }
381
- obj = Oj.compat_load(json)
382
- assert_equal({ 'x' => true, 'y' => 58, 'z' => [1, 2, 3]}, obj)
383
- end
384
-
385
- def test_comment
386
- json = %{{
387
- "x"/*one*/:/*two*/true,//three
388
- "y":58/*four*/,
389
- "z": [1,2/*five*/,
390
- 3 // six
391
- ]
392
- }
393
- }
394
- obj = Oj.compat_load(json)
395
- assert_equal({ 'x' => true, 'y' => 58, 'z' => [1, 2, 3]}, obj)
396
- end
397
-
398
- # If mimic_JSON has not been called then Oj.dump will call to_json on the
399
- # top level object only.
400
- def test_json_object_top
401
- obj = Jeez.new(true, 58)
402
- dump_to_json_and_load(obj, false)
403
- end
404
-
405
- # A child to_json should not be called.
406
- def test_json_object_child
407
- obj = { "child" => Jeez.new(true, 58) }
408
- assert_equal('{"child":{"json_class":"CompatJuice::Jeez","x":true,"y":58}}', Oj.dump(obj))
409
- end
410
-
411
- def test_json_module_object
412
- obj = One::Two::Three::Deep.new()
413
- dump_to_json_and_load(obj, false)
414
- end
415
-
416
- def test_json_object_dump_create_id
417
- expected = Jeez.new(true, 58)
418
- json = Oj.to_json(expected)
419
- obj = Oj.compat_load(json, :create_additions => true)
420
- assert_equal(expected, obj)
421
- end
422
-
423
- def test_json_object_bad
424
- json = %{{"json_class":"CompatJuice::Junk","x":true}}
425
- begin
426
- Oj.compat_load(json, :create_additions => true)
427
- rescue Exception => e
428
- assert_equal("ArgumentError", e.class().name)
429
- return
430
- end
431
- assert(false, "*** expected an exception")
432
- end
433
-
434
- def test_json_object_create_cache
435
- expected = Jeez.new(true, 58)
436
- json = Oj.to_json(expected)
437
- obj = Oj.compat_load(json, :class_cache => true, :create_additions => true)
438
- assert_equal(expected, obj)
439
- obj = Oj.compat_load(json, :class_cache => false, :create_additions => true)
440
- assert_equal(expected, obj)
441
- end
442
-
443
- def test_json_object_create_id_other
444
- expected = Jeez.new(true, 58)
445
- json = Oj.to_json(expected)
446
- json.gsub!('json_class', '_class_')
447
- obj = Oj.compat_load(json, :create_id => "_class_", :create_additions => true)
448
- assert_equal(expected, obj)
449
- end
450
-
451
- def test_json_object_create_deep
452
- expected = One::Two::Three::Deep.new()
453
- json = Oj.to_json(expected)
454
- obj = Oj.compat_load(json, :create_additions => true)
455
- assert_equal(expected, obj)
456
- end
457
-
458
- def test_range
459
- json = Oj.dump(1..7)
460
- assert_equal('"1..7"', json)
461
- end
462
-
463
- def test_arg_passing
464
- json = Oj.to_json(Argy.new(), :max_nesting=> 40)
465
- assert_equal(%|{"args":"[{:max_nesting=>40}]"}|, json)
466
- end
467
-
468
- def test_bad_unicode
469
- assert_raises() { Oj.to_json("\xE4xy") }
470
- end
471
-
472
- def test_bad_unicode_e2
473
- assert_raises() { Oj.to_json("L\xE2m ") }
474
- end
475
-
476
- def test_bad_unicode_start
477
- assert_raises() { Oj.to_json("\x8abc") }
478
- end
479
-
480
- def test_parse_to_s
481
- s = Stringy.new
482
- assert_equal([1,2], Oj.load(s, :mode => :compat))
483
- end
484
-
485
- def dump_and_load(obj, trace=false)
486
- json = Oj.dump(obj)
487
- puts json if trace
488
- loaded = Oj.compat_load(json, :create_additions => true);
489
- if obj.nil?
490
- assert_nil(loaded)
491
- else
492
- assert_equal(obj, loaded)
493
- end
494
- loaded
495
- end
496
-
497
- def dump_to_json_and_load(obj, trace=false)
498
- json = Oj.to_json(obj, :indent => ' ')
499
- puts json if trace
500
- loaded = Oj.compat_load(json, :create_additions => true);
501
- if obj.nil?
502
- assert_nil(loaded)
503
- else
504
- assert_equal(obj, loaded)
505
- end
506
- loaded
507
- end
508
-
509
- end