oj 3.13.23 → 3.16.9

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 (158) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +81 -0
  3. data/README.md +2 -2
  4. data/ext/oj/buf.h +7 -6
  5. data/ext/oj/cache.c +29 -26
  6. data/ext/oj/cache.h +3 -2
  7. data/ext/oj/cache8.c +10 -9
  8. data/ext/oj/circarray.c +7 -5
  9. data/ext/oj/circarray.h +2 -2
  10. data/ext/oj/code.c +5 -12
  11. data/ext/oj/code.h +2 -2
  12. data/ext/oj/compat.c +20 -60
  13. data/ext/oj/custom.c +26 -59
  14. data/ext/oj/debug.c +3 -9
  15. data/ext/oj/dump.c +103 -53
  16. data/ext/oj/dump.h +1 -4
  17. data/ext/oj/dump_compat.c +557 -592
  18. data/ext/oj/dump_leaf.c +3 -5
  19. data/ext/oj/dump_object.c +42 -48
  20. data/ext/oj/dump_strict.c +10 -22
  21. data/ext/oj/encoder.c +1 -1
  22. data/ext/oj/err.c +2 -13
  23. data/ext/oj/err.h +9 -12
  24. data/ext/oj/extconf.rb +16 -7
  25. data/ext/oj/fast.c +60 -92
  26. data/ext/oj/intern.c +62 -47
  27. data/ext/oj/intern.h +3 -7
  28. data/ext/oj/mem.c +318 -0
  29. data/ext/oj/mem.h +53 -0
  30. data/ext/oj/mimic_json.c +51 -32
  31. data/ext/oj/object.c +33 -43
  32. data/ext/oj/odd.c +8 -6
  33. data/ext/oj/odd.h +4 -4
  34. data/ext/oj/oj.c +243 -212
  35. data/ext/oj/oj.h +83 -81
  36. data/ext/oj/parse.c +94 -148
  37. data/ext/oj/parse.h +21 -24
  38. data/ext/oj/parser.c +80 -67
  39. data/ext/oj/parser.h +7 -8
  40. data/ext/oj/rails.c +70 -92
  41. data/ext/oj/reader.c +9 -14
  42. data/ext/oj/reader.h +4 -2
  43. data/ext/oj/resolve.c +3 -4
  44. data/ext/oj/rxclass.c +6 -5
  45. data/ext/oj/rxclass.h +1 -1
  46. data/ext/oj/saj.c +10 -9
  47. data/ext/oj/saj2.c +37 -49
  48. data/ext/oj/saj2.h +1 -1
  49. data/ext/oj/scp.c +3 -14
  50. data/ext/oj/sparse.c +22 -70
  51. data/ext/oj/stream_writer.c +45 -41
  52. data/ext/oj/strict.c +20 -52
  53. data/ext/oj/string_writer.c +64 -38
  54. data/ext/oj/trace.h +31 -4
  55. data/ext/oj/usual.c +125 -114
  56. data/ext/oj/usual.h +7 -6
  57. data/ext/oj/util.h +1 -1
  58. data/ext/oj/val_stack.c +13 -2
  59. data/ext/oj/val_stack.h +8 -7
  60. data/ext/oj/wab.c +25 -57
  61. data/lib/oj/active_support_helper.rb +1 -3
  62. data/lib/oj/bag.rb +7 -1
  63. data/lib/oj/easy_hash.rb +4 -5
  64. data/lib/oj/error.rb +0 -1
  65. data/lib/oj/json.rb +162 -150
  66. data/lib/oj/mimic.rb +7 -7
  67. data/lib/oj/schandler.rb +5 -4
  68. data/lib/oj/state.rb +8 -5
  69. data/lib/oj/version.rb +1 -2
  70. data/lib/oj.rb +2 -0
  71. data/pages/InstallOptions.md +20 -0
  72. data/pages/Options.md +4 -0
  73. data/test/_test_active.rb +8 -9
  74. data/test/_test_active_mimic.rb +7 -8
  75. data/test/_test_mimic_rails.rb +17 -20
  76. data/test/activerecord/result_test.rb +5 -6
  77. data/test/activesupport6/encoding_test.rb +63 -28
  78. data/test/activesupport7/abstract_unit.rb +4 -1
  79. data/test/activesupport7/encoding_test.rb +72 -22
  80. data/test/files.rb +15 -15
  81. data/test/foo.rb +18 -69
  82. data/test/helper.rb +5 -8
  83. data/test/isolated/shared.rb +3 -2
  84. data/test/json_gem/json_addition_test.rb +2 -2
  85. data/test/json_gem/json_common_interface_test.rb +8 -6
  86. data/test/json_gem/json_encoding_test.rb +0 -0
  87. data/test/json_gem/json_ext_parser_test.rb +1 -0
  88. data/test/json_gem/json_fixtures_test.rb +3 -2
  89. data/test/json_gem/json_generator_test.rb +50 -33
  90. data/test/json_gem/json_generic_object_test.rb +11 -11
  91. data/test/json_gem/json_parser_test.rb +46 -46
  92. data/test/json_gem/json_string_matching_test.rb +9 -9
  93. data/test/mem.rb +13 -12
  94. data/test/perf.rb +21 -26
  95. data/test/perf_compat.rb +31 -33
  96. data/test/perf_dump.rb +28 -28
  97. data/test/perf_fast.rb +80 -82
  98. data/test/perf_file.rb +27 -29
  99. data/test/perf_object.rb +65 -69
  100. data/test/perf_once.rb +12 -11
  101. data/test/perf_parser.rb +42 -48
  102. data/test/perf_saj.rb +46 -54
  103. data/test/perf_scp.rb +57 -69
  104. data/test/perf_simple.rb +41 -39
  105. data/test/perf_strict.rb +68 -70
  106. data/test/perf_wab.rb +67 -69
  107. data/test/prec.rb +5 -5
  108. data/test/sample/change.rb +0 -1
  109. data/test/sample/dir.rb +0 -1
  110. data/test/sample/doc.rb +0 -1
  111. data/test/sample/file.rb +0 -1
  112. data/test/sample/group.rb +0 -1
  113. data/test/sample/hasprops.rb +0 -1
  114. data/test/sample/layer.rb +0 -1
  115. data/test/sample/rect.rb +0 -1
  116. data/test/sample/shape.rb +0 -1
  117. data/test/sample/text.rb +0 -1
  118. data/test/sample.rb +16 -16
  119. data/test/sample_json.rb +8 -8
  120. data/test/test_compat.rb +81 -54
  121. data/test/test_custom.rb +63 -52
  122. data/test/test_debian.rb +7 -10
  123. data/test/test_fast.rb +86 -90
  124. data/test/test_file.rb +24 -29
  125. data/test/test_gc.rb +5 -5
  126. data/test/test_generate.rb +5 -5
  127. data/test/test_hash.rb +4 -4
  128. data/test/test_integer_range.rb +9 -9
  129. data/test/test_null.rb +20 -20
  130. data/test/test_object.rb +92 -87
  131. data/test/test_parser.rb +4 -4
  132. data/test/test_parser_debug.rb +5 -5
  133. data/test/test_parser_saj.rb +27 -25
  134. data/test/test_parser_usual.rb +44 -6
  135. data/test/test_rails.rb +2 -2
  136. data/test/test_saj.rb +10 -8
  137. data/test/test_scp.rb +35 -35
  138. data/test/test_strict.rb +38 -32
  139. data/test/test_various.rb +146 -97
  140. data/test/test_wab.rb +46 -44
  141. data/test/test_writer.rb +63 -47
  142. data/test/tests.rb +7 -7
  143. data/test/tests_mimic.rb +6 -6
  144. data/test/tests_mimic_addition.rb +6 -6
  145. metadata +46 -26
  146. data/test/activesupport4/decoding_test.rb +0 -108
  147. data/test/activesupport4/encoding_test.rb +0 -531
  148. data/test/activesupport4/test_helper.rb +0 -41
  149. data/test/activesupport5/abstract_unit.rb +0 -45
  150. data/test/activesupport5/decoding_test.rb +0 -133
  151. data/test/activesupport5/encoding_test.rb +0 -500
  152. data/test/activesupport5/encoding_test_cases.rb +0 -98
  153. data/test/activesupport5/test_helper.rb +0 -72
  154. data/test/activesupport5/time_zone_test_helpers.rb +0 -39
  155. data/test/bar.rb +0 -11
  156. data/test/baz.rb +0 -16
  157. data/test/bug.rb +0 -16
  158. data/test/zoo.rb +0 -13
data/test/test_strict.rb CHANGED
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: utf-8
2
+ # frozen_string_literal: true
3
3
 
4
- $: << File.dirname(__FILE__)
5
- $oj_dir = File.dirname(File.expand_path(File.dirname(__FILE__)))
4
+ $LOAD_PATH << __dir__
5
+ @oj_dir = File.dirname(File.expand_path(__dir__))
6
6
  %w(lib ext).each do |dir|
7
- $: << File.join($oj_dir, dir)
7
+ $LOAD_PATH << File.join(@oj_dir, dir)
8
8
  end
9
9
 
10
10
  require 'minitest'
@@ -52,16 +52,16 @@ class StrictJuice < Minitest::Test
52
52
 
53
53
  def test_fixnum
54
54
  dump_and_load(0, false)
55
- dump_and_load(12345, false)
56
- dump_and_load(-54321, false)
55
+ dump_and_load(12_345, false)
56
+ dump_and_load(-54_321, false)
57
57
  dump_and_load(1, false)
58
58
  end
59
59
 
60
60
  def test_float
61
61
  dump_and_load(0.0, false)
62
- dump_and_load(12345.6789, false)
62
+ dump_and_load(12_345.6789, false)
63
63
  dump_and_load(70.35, false)
64
- dump_and_load(-54321.012, false)
64
+ dump_and_load(-54_321.012, false)
65
65
  dump_and_load(1.7775, false)
66
66
  dump_and_load(2.5024, false)
67
67
  dump_and_load(2.48e16, false)
@@ -69,6 +69,16 @@ class StrictJuice < Minitest::Test
69
69
  dump_and_load(-2.48e100 * 1.0e10, false)
70
70
  end
71
71
 
72
+ def test_invalid_float
73
+ begin
74
+ Oj.load("64ecb72d29191067f91ff95b")
75
+ rescue Oj::ParseError => e
76
+ assert(e.message == "Invalid float")
77
+ return
78
+ end
79
+ assert(false, "*** expected an exception")
80
+ end
81
+
72
82
  def test_nan_dump
73
83
  assert_equal('null', Oj.dump(0/0.0, :nan => :null))
74
84
  assert_equal('3.3e14159265358979323846', Oj.dump(0/0.0, :nan => :huge))
@@ -78,7 +88,7 @@ class StrictJuice < Minitest::Test
78
88
  assert(true)
79
89
  return
80
90
  end
81
- assert(false, "*** expected an exception")
91
+ assert(false, '*** expected an exception')
82
92
  end
83
93
 
84
94
  def test_infinity_dump
@@ -90,7 +100,7 @@ class StrictJuice < Minitest::Test
90
100
  assert(true)
91
101
  return
92
102
  end
93
- assert(false, "*** expected an exception")
103
+ assert(false, '*** expected an exception')
94
104
  end
95
105
 
96
106
  def test_neg_infinity_dump
@@ -102,7 +112,7 @@ class StrictJuice < Minitest::Test
102
112
  assert(true)
103
113
  return
104
114
  end
105
- assert(false, "*** expected an exception")
115
+ assert(false, '*** expected an exception')
106
116
  end
107
117
 
108
118
  def test_string
@@ -115,15 +125,11 @@ class StrictJuice < Minitest::Test
115
125
  def test_encode
116
126
  opts = Oj.default_options
117
127
  Oj.default_options = { :ascii_only => false }
118
- unless 'jruby' == $ruby
119
- dump_and_load("ぴーたー", false)
120
- end
128
+ dump_and_load('ぴーたー', false)
121
129
  Oj.default_options = { :ascii_only => true }
122
- json = Oj.dump("ぴーたー")
130
+ json = Oj.dump('ぴーたー')
123
131
  assert_equal(%{"\\u3074\\u30fc\\u305f\\u30fc"}, json)
124
- unless 'jruby' == $ruby
125
- dump_and_load("ぴーたー", false)
126
- end
132
+ dump_and_load('ぴーたー', false)
127
133
  Oj.default_options = opts
128
134
  end
129
135
 
@@ -152,17 +158,17 @@ class StrictJuice < Minitest::Test
152
158
  end
153
159
 
154
160
  def test_array_deep
155
- dump_and_load([1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,[15,[16,[17,[18,[19,[20]]]]]]]]]]]]]]]]]]]], false)
161
+ dump_and_load([1, [2, [3, [4, [5, [6, [7, [8, [9, [10, [11, [12, [13, [14, [15, [16, [17, [18, [19, [20]]]]]]]]]]]]]]]]]]]], false)
156
162
  end
157
163
 
158
164
  def test_deep_nest
159
165
  skip 'TruffleRuby causes SEGV' if RUBY_ENGINE == 'truffleruby'
160
166
 
161
167
  begin
162
- n = 10000
163
- Oj.strict_load('[' * n + ']' * n)
168
+ n = 10_000
169
+ Oj.strict_load(('[' * n) + (']' * n))
164
170
  rescue Exception => e
165
- assert(false, e.message)
171
+ refute(e.message)
166
172
  end
167
173
  end
168
174
 
@@ -209,7 +215,7 @@ class StrictJuice < Minitest::Test
209
215
  assert(true)
210
216
  return
211
217
  end
212
- assert(false, "*** expected an exception")
218
+ assert(false, '*** expected an exception')
213
219
  end
214
220
 
215
221
  def test_bignum_object
@@ -238,7 +244,7 @@ class StrictJuice < Minitest::Test
238
244
  assert(true)
239
245
  return
240
246
  end
241
- assert(false, "*** expected an exception")
247
+ assert(false, '*** expected an exception')
242
248
  end
243
249
 
244
250
  def test_range
@@ -248,7 +254,7 @@ class StrictJuice < Minitest::Test
248
254
  assert(true)
249
255
  return
250
256
  end
251
- assert(false, "*** expected an exception")
257
+ assert(false, '*** expected an exception')
252
258
  end
253
259
 
254
260
  # Stream IO
@@ -265,13 +271,13 @@ class StrictJuice < Minitest::Test
265
271
  end
266
272
 
267
273
  def test_io_file
268
- filename = File.join(File.dirname(__FILE__), 'open_file_test.json')
269
- File.open(filename, 'w') { |f| f.write(%{{
274
+ filename = File.join(__dir__, 'open_file_test.json')
275
+ File.write(filename, %{{
270
276
  "x":true,
271
277
  "y":58,
272
278
  "z": [1,2,3]
273
279
  }
274
- }) }
280
+ })
275
281
  f = File.new(filename)
276
282
  obj = Oj.strict_load(f)
277
283
  f.close()
@@ -291,7 +297,7 @@ class StrictJuice < Minitest::Test
291
297
  assert(true)
292
298
  return
293
299
  end
294
- assert(false, "*** expected an exception")
300
+ assert(false, '*** expected an exception')
295
301
  end
296
302
 
297
303
  def test_class
@@ -301,7 +307,7 @@ class StrictJuice < Minitest::Test
301
307
  assert(true)
302
308
  return
303
309
  end
304
- assert(false, "*** expected an exception")
310
+ assert(false, '*** expected an exception')
305
311
  end
306
312
 
307
313
  def test_module
@@ -311,7 +317,7 @@ class StrictJuice < Minitest::Test
311
317
  assert(true)
312
318
  return
313
319
  end
314
- assert(false, "*** expected an exception")
320
+ assert(false, '*** expected an exception')
315
321
  end
316
322
 
317
323
  # symbol_keys option
@@ -423,7 +429,7 @@ class StrictJuice < Minitest::Test
423
429
  def dump_and_load(obj, trace=false)
424
430
  json = Oj.dump(obj, :indent => 2)
425
431
  puts json if trace
426
- loaded = Oj.strict_load(json);
432
+ loaded = Oj.strict_load(json)
427
433
  if obj.nil?
428
434
  assert_nil(loaded)
429
435
  else