oj 3.13.11 → 3.15.0

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 +74 -0
  3. data/README.md +4 -2
  4. data/ext/oj/buf.h +11 -6
  5. data/ext/oj/cache.c +25 -24
  6. data/ext/oj/cache8.c +10 -9
  7. data/ext/oj/circarray.c +8 -6
  8. data/ext/oj/circarray.h +2 -2
  9. data/ext/oj/code.c +17 -24
  10. data/ext/oj/code.h +2 -2
  11. data/ext/oj/compat.c +17 -44
  12. data/ext/oj/custom.c +70 -141
  13. data/ext/oj/debug.c +3 -9
  14. data/ext/oj/dump.c +128 -118
  15. data/ext/oj/dump.h +12 -8
  16. data/ext/oj/dump_compat.c +564 -641
  17. data/ext/oj/dump_leaf.c +17 -63
  18. data/ext/oj/dump_object.c +70 -199
  19. data/ext/oj/dump_strict.c +22 -46
  20. data/ext/oj/encoder.c +1 -1
  21. data/ext/oj/err.c +2 -13
  22. data/ext/oj/err.h +9 -12
  23. data/ext/oj/extconf.rb +14 -5
  24. data/ext/oj/fast.c +75 -103
  25. data/ext/oj/intern.c +52 -50
  26. data/ext/oj/intern.h +4 -8
  27. data/ext/oj/mem.c +318 -0
  28. data/ext/oj/mem.h +53 -0
  29. data/ext/oj/mimic_json.c +75 -47
  30. data/ext/oj/object.c +49 -66
  31. data/ext/oj/odd.c +89 -67
  32. data/ext/oj/odd.h +15 -15
  33. data/ext/oj/oj.c +140 -99
  34. data/ext/oj/oj.h +80 -51
  35. data/ext/oj/parse.c +162 -184
  36. data/ext/oj/parse.h +7 -10
  37. data/ext/oj/parser.c +89 -34
  38. data/ext/oj/parser.h +18 -7
  39. data/ext/oj/rails.c +82 -146
  40. data/ext/oj/rails.h +1 -1
  41. data/ext/oj/reader.c +11 -12
  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 +20 -31
  47. data/ext/oj/saj2.c +329 -93
  48. data/ext/oj/saj2.h +23 -0
  49. data/ext/oj/scp.c +3 -14
  50. data/ext/oj/sparse.c +26 -70
  51. data/ext/oj/stream_writer.c +12 -22
  52. data/ext/oj/strict.c +20 -52
  53. data/ext/oj/string_writer.c +21 -21
  54. data/ext/oj/trace.h +31 -4
  55. data/ext/oj/usual.c +105 -150
  56. data/ext/oj/usual.h +68 -0
  57. data/ext/oj/util.h +1 -1
  58. data/ext/oj/val_stack.c +1 -1
  59. data/ext/oj/val_stack.h +8 -7
  60. data/ext/oj/validate.c +21 -26
  61. data/ext/oj/wab.c +31 -68
  62. data/lib/oj/active_support_helper.rb +0 -1
  63. data/lib/oj/bag.rb +7 -1
  64. data/lib/oj/easy_hash.rb +4 -5
  65. data/lib/oj/error.rb +0 -1
  66. data/lib/oj/json.rb +4 -2
  67. data/lib/oj/mimic.rb +4 -2
  68. data/lib/oj/saj.rb +20 -6
  69. data/lib/oj/state.rb +9 -6
  70. data/lib/oj/version.rb +1 -2
  71. data/lib/oj.rb +2 -0
  72. data/pages/Compatibility.md +1 -1
  73. data/pages/InstallOptions.md +20 -0
  74. data/pages/Options.md +10 -0
  75. data/test/_test_active.rb +8 -9
  76. data/test/_test_active_mimic.rb +7 -8
  77. data/test/_test_mimic_rails.rb +17 -20
  78. data/test/activerecord/result_test.rb +5 -6
  79. data/test/{activesupport5 → activesupport7}/abstract_unit.rb +16 -12
  80. data/test/{activesupport5 → activesupport7}/decoding_test.rb +2 -10
  81. data/test/{activesupport5 → activesupport7}/encoding_test.rb +20 -34
  82. data/test/{activesupport5 → activesupport7}/encoding_test_cases.rb +6 -0
  83. data/test/{activesupport5 → activesupport7}/time_zone_test_helpers.rb +8 -0
  84. data/test/files.rb +15 -15
  85. data/test/foo.rb +9 -71
  86. data/test/helper.rb +11 -8
  87. data/test/isolated/shared.rb +3 -2
  88. data/test/json_gem/json_addition_test.rb +2 -2
  89. data/test/json_gem/json_common_interface_test.rb +4 -4
  90. data/test/json_gem/json_encoding_test.rb +0 -0
  91. data/test/json_gem/json_ext_parser_test.rb +1 -0
  92. data/test/json_gem/json_fixtures_test.rb +3 -2
  93. data/test/json_gem/json_generator_test.rb +48 -36
  94. data/test/json_gem/json_generic_object_test.rb +11 -11
  95. data/test/json_gem/json_parser_test.rb +54 -47
  96. data/test/json_gem/json_string_matching_test.rb +9 -9
  97. data/test/json_gem/test_helper.rb +7 -3
  98. data/test/mem.rb +13 -12
  99. data/test/perf.rb +21 -26
  100. data/test/perf_compat.rb +31 -33
  101. data/test/perf_dump.rb +50 -0
  102. data/test/perf_fast.rb +80 -82
  103. data/test/perf_file.rb +27 -29
  104. data/test/perf_object.rb +65 -69
  105. data/test/perf_once.rb +12 -11
  106. data/test/perf_parser.rb +42 -48
  107. data/test/perf_saj.rb +46 -54
  108. data/test/perf_scp.rb +57 -69
  109. data/test/perf_simple.rb +41 -39
  110. data/test/perf_strict.rb +68 -70
  111. data/test/perf_wab.rb +67 -69
  112. data/test/prec.rb +3 -3
  113. data/test/sample/change.rb +0 -1
  114. data/test/sample/dir.rb +0 -1
  115. data/test/sample/doc.rb +0 -1
  116. data/test/sample/file.rb +0 -1
  117. data/test/sample/group.rb +0 -1
  118. data/test/sample/hasprops.rb +0 -1
  119. data/test/sample/layer.rb +0 -1
  120. data/test/sample/rect.rb +0 -1
  121. data/test/sample/shape.rb +0 -1
  122. data/test/sample/text.rb +0 -1
  123. data/test/sample.rb +16 -16
  124. data/test/sample_json.rb +8 -8
  125. data/test/test_compat.rb +76 -42
  126. data/test/test_custom.rb +72 -51
  127. data/test/test_debian.rb +7 -10
  128. data/test/test_fast.rb +86 -90
  129. data/test/test_file.rb +41 -30
  130. data/test/test_gc.rb +16 -5
  131. data/test/test_generate.rb +5 -5
  132. data/test/test_hash.rb +4 -4
  133. data/test/test_integer_range.rb +9 -9
  134. data/test/test_null.rb +20 -20
  135. data/test/test_object.rb +85 -96
  136. data/test/test_parser.rb +6 -22
  137. data/test/test_parser_debug.rb +27 -0
  138. data/test/test_parser_saj.rb +115 -23
  139. data/test/test_parser_usual.rb +6 -6
  140. data/test/test_rails.rb +2 -2
  141. data/test/test_saj.rb +10 -8
  142. data/test/test_scp.rb +37 -39
  143. data/test/test_strict.rb +30 -32
  144. data/test/test_various.rb +147 -99
  145. data/test/test_wab.rb +48 -44
  146. data/test/test_writer.rb +47 -47
  147. data/test/tests.rb +13 -4
  148. data/test/tests_mimic.rb +12 -3
  149. data/test/tests_mimic_addition.rb +12 -3
  150. metadata +33 -144
  151. data/test/activesupport4/decoding_test.rb +0 -108
  152. data/test/activesupport4/encoding_test.rb +0 -531
  153. data/test/activesupport4/test_helper.rb +0 -41
  154. data/test/activesupport5/test_helper.rb +0 -72
  155. data/test/bar.rb +0 -16
  156. data/test/baz.rb +0 -16
  157. data/test/bug.rb +0 -16
  158. data/test/zoo.rb +0 -13
data/test/test_fast.rb CHANGED
@@ -1,8 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
- # coding: utf-8
3
2
  # frozen_string_literal: true
4
3
 
5
- $: << File.dirname(__FILE__)
4
+ $LOAD_PATH << __dir__
6
5
 
7
6
  require 'helper'
8
7
 
@@ -52,7 +51,7 @@ class DocTest < Minitest::Test
52
51
  json = %{true}
53
52
  Oj::Doc.open(json) do |doc|
54
53
  assert_equal(TrueClass, doc.type)
55
- assert_equal(true, doc.fetch())
54
+ assert(doc.fetch())
56
55
  end
57
56
  end
58
57
 
@@ -60,7 +59,7 @@ class DocTest < Minitest::Test
60
59
  json = %{false}
61
60
  Oj::Doc.open(json) do |doc|
62
61
  assert_equal(FalseClass, doc.type)
63
- assert_equal(false, doc.fetch())
62
+ refute(doc.fetch())
64
63
  end
65
64
  end
66
65
 
@@ -76,7 +75,7 @@ class DocTest < Minitest::Test
76
75
  json = %{"ぴーたー"}
77
76
  Oj::Doc.open(json) do |doc|
78
77
  assert_equal(String, doc.type)
79
- assert_equal("ぴーたー", doc.fetch())
78
+ assert_equal('ぴーたー', doc.fetch())
80
79
  end
81
80
  end
82
81
 
@@ -84,19 +83,15 @@ class DocTest < Minitest::Test
84
83
  json = %{"\\u3074\\u30fc\\u305f\\u30fc"}
85
84
  Oj::Doc.open(json) do |doc|
86
85
  assert_equal(String, doc.type)
87
- assert_equal("ぴーたー", doc.fetch())
86
+ assert_equal('ぴーたー', doc.fetch())
88
87
  end
89
88
  end
90
89
 
91
90
  def test_fixnum
92
91
  json = %{12345}
93
92
  Oj::Doc.open(json) do |doc|
94
- if '2.4.0' <= RUBY_VERSION
95
- assert_equal(Integer, doc.type)
96
- else
97
- assert_equal(Fixnum, doc.type)
98
- end
99
- assert_equal(12345, doc.fetch())
93
+ assert_equal(Integer, doc.type)
94
+ assert_equal(12_345, doc.fetch())
100
95
  end
101
96
  end
102
97
 
@@ -104,7 +99,7 @@ class DocTest < Minitest::Test
104
99
  json = %{12345.6789}
105
100
  Oj::Doc.open(json) do |doc|
106
101
  assert_equal(Float, doc.type)
107
- assert_equal(12345.6789, doc.fetch())
102
+ assert_in_delta(12_345.6789, doc.fetch())
108
103
  end
109
104
  end
110
105
 
@@ -112,8 +107,8 @@ class DocTest < Minitest::Test
112
107
  json = %{12345.6789e7}
113
108
  Oj::Doc.open(json) do |doc|
114
109
  assert_equal(Float, doc.type)
115
- #assert_equal(12345.6789e7, doc.fetch())
116
- assert_equal(12345.6789e7.to_i, doc.fetch().to_i)
110
+ # assert_equal(12345.6789e7, doc.fetch())
111
+ assert_equal(12_345.6789e7.to_i, doc.fetch().to_i)
117
112
  end
118
113
  end
119
114
 
@@ -121,7 +116,7 @@ class DocTest < Minitest::Test
121
116
  json = %{[]}
122
117
  Oj::Doc.open(json) do |doc|
123
118
  assert_equal(Array, doc.type)
124
- assert_equal([], doc.fetch())
119
+ assert_empty(doc.fetch())
125
120
  end
126
121
  end
127
122
 
@@ -137,7 +132,7 @@ class DocTest < Minitest::Test
137
132
  json = %{{}}
138
133
  Oj::Doc.open(json) do |doc|
139
134
  assert_equal(Hash, doc.type)
140
- assert_equal({}, doc.fetch())
135
+ assert_empty(doc.fetch())
141
136
  end
142
137
  end
143
138
 
@@ -172,7 +167,8 @@ class DocTest < Minitest::Test
172
167
 
173
168
  def test_move
174
169
  Oj::Doc.open(@json1) do |doc|
175
- [ '/',
170
+ [
171
+ '/',
176
172
  '/array',
177
173
  '/boolean',
178
174
  '/array/1/hash/h2/a/3',
@@ -205,13 +201,14 @@ class DocTest < Minitest::Test
205
201
 
206
202
  def test_move_relative
207
203
  Oj::Doc.open(@json1) do |doc|
208
- [['/', 'array', '/array'],
209
- ['/array', '1/num', '/array/1/num'],
210
- ['/array/1/hash', 'h2/a', '/array/1/hash/h2/a'],
211
- ['/array/1', 'hash/h2/a/2', '/array/1/hash/h2/a/2'],
212
- ['/array/1/hash', '../string', '/array/1/string'],
213
- ['/array/1/hash', '..', '/array/1'],
214
- ].each do |start,path,where|
204
+ [
205
+ ['/', 'array', '/array'],
206
+ ['/array', '1/num', '/array/1/num'],
207
+ ['/array/1/hash', 'h2/a', '/array/1/hash/h2/a'],
208
+ ['/array/1', 'hash/h2/a/2', '/array/1/hash/h2/a/2'],
209
+ ['/array/1/hash', '../string', '/array/1/string'],
210
+ ['/array/1/hash', '..', '/array/1'],
211
+ ].each do |start, path, where|
215
212
  doc.move(start)
216
213
  doc.move(path)
217
214
  assert_equal(where, doc.where?)
@@ -220,21 +217,17 @@ class DocTest < Minitest::Test
220
217
  end
221
218
 
222
219
  def test_type
223
- if '2.4.0' <= RUBY_VERSION
224
- num_class = Integer
225
- else
226
- num_class = Fixnum
227
- end
228
220
  Oj::Doc.open(@json1) do |doc|
229
- [['/', Hash],
230
- ['/array', Array],
231
- ['/array/1', Hash],
232
- ['/array/1/num', num_class],
233
- ['/array/1/string', String],
234
- ['/array/1/hash/h2/a', Array],
235
- ['/array/1/hash/../num', num_class],
236
- ['/array/1/hash/../..', Array],
237
- ].each do |path,type|
221
+ [
222
+ ['/', Hash],
223
+ ['/array', Array],
224
+ ['/array/1', Hash],
225
+ ['/array/1/num', Integer],
226
+ ['/array/1/string', String],
227
+ ['/array/1/hash/h2/a', Array],
228
+ ['/array/1/hash/../num', Integer],
229
+ ['/array/1/hash/../..', Array],
230
+ ].each do |path, type|
238
231
  assert_equal(type, doc.type(path))
239
232
  end
240
233
  end
@@ -242,16 +235,17 @@ class DocTest < Minitest::Test
242
235
 
243
236
  def test_local_key
244
237
  Oj::Doc.open(@json1) do |doc|
245
- [['/', nil],
246
- ['/array', 'array'],
247
- ['/array/1', 1],
248
- ['/array/1/num', 'num'],
249
- ['/array/1/string', 'string'],
250
- ['/array/1/hash/h2/a', 'a'],
251
- ['/array/1/hash/../num', 'num'],
252
- ['/array/1/hash/..', 1],
253
- ['/array/1/hash/../..', 'array'],
254
- ].each do |path,key|
238
+ [
239
+ ['/', nil],
240
+ ['/array', 'array'],
241
+ ['/array/1', 1],
242
+ ['/array/1/num', 'num'],
243
+ ['/array/1/string', 'string'],
244
+ ['/array/1/hash/h2/a', 'a'],
245
+ ['/array/1/hash/../num', 'num'],
246
+ ['/array/1/hash/..', 1],
247
+ ['/array/1/hash/../..', 'array'],
248
+ ].each do |path, key|
255
249
  doc.move(path)
256
250
  if key.nil?
257
251
  assert_nil(doc.local_key())
@@ -264,16 +258,17 @@ class DocTest < Minitest::Test
264
258
 
265
259
  def test_fetch_move
266
260
  Oj::Doc.open(@json1) do |doc|
267
- [['/array/1/num', 3],
268
- ['/array/1/string', 'message'],
269
- ['/array/1/hash/h2/a', [1, 2, 3]],
270
- ['/array/1/hash/../num', 3],
271
- ['/array/1/hash/..', {'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}],
272
- ['/array/1/hash/../..', [{'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}]],
273
- ['/array/1', {'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}],
274
- ['/array', [{'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}]],
275
- ['/', {'array' => [{'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}], 'boolean' => true}],
276
- ].each do |path,val|
261
+ [
262
+ ['/array/1/num', 3],
263
+ ['/array/1/string', 'message'],
264
+ ['/array/1/hash/h2/a', [1, 2, 3]],
265
+ ['/array/1/hash/../num', 3],
266
+ ['/array/1/hash/..', {'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}],
267
+ ['/array/1/hash/../..', [{'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}]],
268
+ ['/array/1', {'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}],
269
+ ['/array', [{'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}]],
270
+ ['/', {'array' => [{'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}], 'boolean' => true}],
271
+ ].each do |path, val|
277
272
  doc.move(path)
278
273
  assert_equal(val, doc.fetch())
279
274
  end
@@ -282,18 +277,19 @@ class DocTest < Minitest::Test
282
277
 
283
278
  def test_fetch_path
284
279
  Oj::Doc.open(@json1) do |doc|
285
- [['/array/1/num', 3],
286
- ['/array/1/string', 'message'],
287
- ['/array/1/hash/h2/a', [1, 2, 3]],
288
- ['/array/1/hash/../num', 3],
289
- ['/array/1/hash/..', {'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}],
290
- ['/array/1/hash/../..', [{'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}]],
291
- ['/array/1', {'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}],
292
- ['/array', [{'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}]],
293
- ['/', {'array' => [{'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}], 'boolean' => true}],
294
- ['/nothing', nil],
295
- ['/array/10', nil],
296
- ].each do |path,val|
280
+ [
281
+ ['/array/1/num', 3],
282
+ ['/array/1/string', 'message'],
283
+ ['/array/1/hash/h2/a', [1, 2, 3]],
284
+ ['/array/1/hash/../num', 3],
285
+ ['/array/1/hash/..', {'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}],
286
+ ['/array/1/hash/../..', [{'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}]],
287
+ ['/array/1', {'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}],
288
+ ['/array', [{'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}]],
289
+ ['/', {'array' => [{'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}], 'boolean' => true}],
290
+ ['/nothing', nil],
291
+ ['/array/10', nil],
292
+ ].each do |path, val|
297
293
  if val.nil?
298
294
  assert_nil(doc.fetch(path))
299
295
  else
@@ -310,15 +306,15 @@ class DocTest < Minitest::Test
310
306
  assert_nil(doc.fetch('/x'))
311
307
  assert_nil(doc.fetch('/0'))
312
308
  end
313
-
314
309
  end
315
310
 
316
311
  def test_move_fetch_path
317
312
  Oj::Doc.open(@json1) do |doc|
318
- [['/array/1', 'num', 3],
319
- ['/array/1', 'string', 'message'],
320
- ['/array/1/hash', 'h2/a', [1, 2, 3]],
321
- ].each do |path,fetch_path,val|
313
+ [
314
+ ['/array/1', 'num', 3],
315
+ ['/array/1', 'string', 'message'],
316
+ ['/array/1/hash', 'h2/a', [1, 2, 3]],
317
+ ].each do |path, fetch_path, val|
322
318
  doc.move(path)
323
319
  assert_equal(val, doc.fetch(fetch_path))
324
320
  end
@@ -327,13 +323,14 @@ class DocTest < Minitest::Test
327
323
 
328
324
  def test_exists
329
325
  Oj::Doc.open(@json1) do |doc|
330
- [['/array/1', true],
331
- ['/array/1', true],
332
- ['/array/1/hash', true],
333
- ['/array/1/dash', false],
334
- ['/array/3', false],
335
- ['/nothing', false],
336
- ].each do |path,val|
326
+ [
327
+ ['/array/1', true],
328
+ ['/array/1', true],
329
+ ['/array/1/hash', true],
330
+ ['/array/1/dash', false],
331
+ ['/array/3', false],
332
+ ['/nothing', false],
333
+ ].each do |path, val|
337
334
  assert_equal(val, doc.exists?(path), "failed for #{path.inspect}")
338
335
  end
339
336
  end
@@ -406,7 +403,7 @@ class DocTest < Minitest::Test
406
403
  end
407
404
  end
408
405
  end
409
- assert_equal({"/a"=>1, "/c"=>[2], "/c/1"=>2, "/d"=>3}, h)
406
+ assert_equal({'/a'=>1, '/c'=>[2], '/c/1'=>2, '/d'=>3}, h)
410
407
  end
411
408
 
412
409
  def test_size
@@ -419,8 +416,8 @@ class DocTest < Minitest::Test
419
416
  end
420
417
 
421
418
  def test_open_file
422
- filename = File.join(File.dirname(__FILE__), 'open_file_test.json')
423
- File.open(filename, 'w') { |f| f.write('{"a":[1,2,3]}') }
419
+ filename = File.join(__dir__, 'open_file_test.json')
420
+ File.write(filename, '{"a":[1,2,3]}')
424
421
  Oj::Doc.open_file(filename) do |doc|
425
422
  assert_equal(5, doc.size)
426
423
  end
@@ -445,8 +442,8 @@ class DocTest < Minitest::Test
445
442
  end
446
443
 
447
444
  def test_file_open_close
448
- filename = File.join(File.dirname(__FILE__), 'open_file_test.json')
449
- File.open(filename, 'w') { |f| f.write('{"a":[1,2,3]}') }
445
+ filename = File.join(__dir__, 'open_file_test.json')
446
+ File.write(filename, '{"a":[1,2,3]}')
450
447
  doc = Oj::Doc.open_file(filename)
451
448
  assert_equal(Oj::Doc, doc.class)
452
449
  assert_equal(5, doc.size)
@@ -473,7 +470,6 @@ class DocTest < Minitest::Test
473
470
  doc.home()
474
471
  assert_equal(2, doc.fetch('/a/2'))
475
472
  assert_equal(2, doc.fetch('a/2'))
476
- doc = nil
477
473
  GC.start
478
474
  # a print statement confirms close is called
479
475
  end
@@ -506,7 +502,7 @@ class DocTest < Minitest::Test
506
502
  end
507
503
 
508
504
  def test_doc_empty
509
- result = Oj::Doc.open("") { |doc| doc.each_child {} }
505
+ result = Oj::Doc.open('') { |doc| doc.each_child {} }
510
506
  assert_nil(result)
511
507
  end
512
508
 
data/test/test_file.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: UTF-8
2
+ # frozen_string_literal: true
3
3
 
4
- $: << File.dirname(__FILE__)
4
+ $LOAD_PATH << __dir__
5
5
 
6
6
  require 'helper'
7
7
 
@@ -19,35 +19,29 @@ class FileJuice < Minitest::Test
19
19
  end
20
20
  alias == eql?
21
21
 
22
- end# Jam
22
+ end # Jam
23
23
 
24
24
  class Jeez < Jam
25
- def initialize(x, y)
26
- super
27
- end
28
25
 
29
- def to_json()
26
+ def to_json(*_args)
30
27
  %{{"json_class":"#{self.class}","x":#{@x},"y":#{@y}}}
31
28
  end
32
29
 
33
30
  def self.json_create(h)
34
- self.new(h['x'], h['y'])
31
+ new(h['x'], h['y'])
35
32
  end
36
- end# Jeez
33
+ end # Jeez
37
34
 
38
35
  class Orange < Jam
39
- def initialize(x, y)
40
- super
41
- end
42
36
 
43
- def as_json()
37
+ def as_json
44
38
  { :json_class => self.class,
45
39
  :x => @x,
46
40
  :y => @y }
47
41
  end
48
42
 
49
43
  def self.json_create(h)
50
- self.new(h['x'], h['y'])
44
+ new(h['x'], h['y'])
51
45
  end
52
46
  end
53
47
 
@@ -73,8 +67,8 @@ class FileJuice < Minitest::Test
73
67
 
74
68
  def test_fixnum
75
69
  dump_and_load(0, false)
76
- dump_and_load(12345, false)
77
- dump_and_load(-54321, false)
70
+ dump_and_load(12_345, false)
71
+ dump_and_load(-54_321, false)
78
72
  dump_and_load(1, false)
79
73
  end
80
74
 
@@ -82,9 +76,9 @@ class FileJuice < Minitest::Test
82
76
  mode = Oj.default_options()[:mode]
83
77
  Oj.default_options = {:mode => :object}
84
78
  dump_and_load(0.0, false)
85
- dump_and_load(12345.6789, false)
79
+ dump_and_load(12_345.6789, false)
86
80
  dump_and_load(70.35, false)
87
- dump_and_load(-54321.012, false)
81
+ dump_and_load(-54_321.012, false)
88
82
  dump_and_load(1.7775, false)
89
83
  dump_and_load(2.5024, false)
90
84
  dump_and_load(2.48e16, false)
@@ -118,9 +112,9 @@ class FileJuice < Minitest::Test
118
112
  # Symbol
119
113
  def test_symbol_object
120
114
  Oj.default_options = { :mode => :object }
121
- #dump_and_load(''.to_sym, false)
115
+ # dump_and_load(''.to_sym, false)
122
116
  dump_and_load(:abc, false)
123
- dump_and_load(':xyz'.to_sym, false)
117
+ dump_and_load(:":xyz", false)
124
118
  end
125
119
 
126
120
  # Time
@@ -129,10 +123,11 @@ class FileJuice < Minitest::Test
129
123
  Oj.default_options = { :mode => :object, :time_format => :unix_zone }
130
124
  dump_and_load(t, false)
131
125
  end
126
+
132
127
  def test_time_object_early
133
- # Windows does not support dates before 1970.
134
- return if RbConfig::CONFIG['host_os'] =~ /(mingw|mswin)/
135
- t = Time.xmlschema("1954-01-05T00:00:00.123456")
128
+ skip 'Windows does not support dates before 1970.' if RbConfig::CONFIG['host_os'] =~ /(mingw|mswin)/
129
+
130
+ t = Time.xmlschema('1954-01-05T00:00:00.123456')
136
131
  Oj.default_options = { :mode => :object, :time_format => :unix_zone }
137
132
  dump_and_load(t, false)
138
133
  end
@@ -162,12 +157,10 @@ class FileJuice < Minitest::Test
162
157
  def test_range_object
163
158
  Oj.default_options = { :mode => :object }
164
159
  json = Oj.dump(1..7, :mode => :object, :indent => 0)
165
- if 'rubinius' == $ruby
166
- assert(%{{"^O":"Range","begin":1,"end":7,"exclude_end?":false}} == json)
167
- elsif 'jruby' == $ruby
168
- assert(%{{"^O":"Range","begin":1,"end":7,"exclude_end?":false}} == json)
169
- else
160
+ if $ruby == 'ruby'
170
161
  assert_equal(%{{"^u":["Range",1,7,false]}}, json)
162
+ else
163
+ assert_equal(%{{"^O":"Range","begin":1,"end":7,"exclude_end?":false}}, json)
171
164
  end
172
165
  dump_and_load(1..7, false)
173
166
  dump_and_load(1..1, false)
@@ -212,9 +205,27 @@ class FileJuice < Minitest::Test
212
205
  dump_and_load(DateTime.new(2012, 6, 19), false)
213
206
  end
214
207
 
208
+ def test_load_unicode_path
209
+ json =<<~JSON
210
+ {
211
+ "x":true,
212
+ "y":58,
213
+ "z": [1,2,3]
214
+ }
215
+ JSON
216
+
217
+ Tempfile.create('file_test_conceição1.json') do |f|
218
+ f.write(json)
219
+ f.close
220
+
221
+ objects = Oj.load_file(f.path)
222
+ assert_equal(Oj.load(json), objects)
223
+ end
224
+ end
225
+
215
226
  def dump_and_load(obj, trace=false)
216
- filename = File.join(File.dirname(__FILE__), 'file_test.json')
217
- File.open(filename, "w") { |f|
227
+ filename = File.join(__dir__, 'file_test.json')
228
+ File.open(filename, 'w') { |f|
218
229
  Oj.to_stream(f, obj, :indent => 2)
219
230
  }
220
231
  puts "\n*** file: '#{File.read(filename)}'" if trace
data/test/test_gc.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: UTF-8
2
+ # frozen_string_literal: true
3
3
 
4
- $: << File.dirname(__FILE__)
4
+ $LOAD_PATH << __dir__
5
5
 
6
6
  require 'helper'
7
7
 
@@ -14,22 +14,24 @@ class GCTest < Minitest::Test
14
14
  @child = child
15
15
  end
16
16
 
17
- def to_hash()
18
- { 'json_class' => "#{self.class}", 'x' => x, 'child' => child }
17
+ def to_hash
18
+ { 'json_class' => self.class.to_s, 'x' => x, 'child' => child }
19
19
  end
20
20
 
21
21
  def self.json_create(h)
22
22
  GC.start
23
- self.new(h['x'], h['child'])
23
+ new(h['x'], h['child'])
24
24
  end
25
25
  end # Goo
26
26
 
27
27
  def setup
28
28
  @default_options = Oj.default_options
29
+ GC.stress = true
29
30
  end
30
31
 
31
32
  def teardown
32
33
  Oj.default_options = @default_options
34
+ GC.stress = false
33
35
  end
34
36
 
35
37
  # if no crash then the GC marking is working
@@ -46,4 +48,13 @@ class GCTest < Minitest::Test
46
48
  json = Oj.dump(g, :mode => :object)
47
49
  Oj.object_load(json)
48
50
  end
51
+
52
+ def test_parse_gc
53
+ json = '{"a":"Alpha","b":true,"c":12345,"d":[true,[false,[-123456789,null],3.9676,["Something else.",false],null]],"e":{"zero":null,"one":1,"two":2,"three":[3],"four":[0,1,2,3,4]},"f":null,"h":{"a":{"b":{"c":{"d":{"e":{"f":{"g":null}}}}}}},"i":[[[[[[[null]]]]]]]}'
54
+
55
+ 50.times do
56
+ data = Oj.load(json)
57
+ assert_equal(json, Oj.dump(data))
58
+ end
59
+ end
49
60
  end
@@ -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'
@@ -15,7 +15,7 @@ class Generator < Minitest::Test
15
15
 
16
16
  def test_before
17
17
  json = Oj.generate({})
18
- assert_equal("{}", json)
18
+ assert_equal('{}', json)
19
19
  end
20
20
 
21
21
  end
data/test/test_hash.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: UTF-8
2
+ # frozen_string_literal: true
3
3
 
4
- $: << File.dirname(__FILE__)
4
+ $LOAD_PATH << __dir__
5
5
 
6
6
  require 'helper'
7
7
 
@@ -19,7 +19,7 @@ class HashTest < Minitest::Test
19
19
 
20
20
  def test_load
21
21
  obj = Oj.load(%|{"abc":3}|, :mode => :compat, :hash_class => Oj::EasyHash)
22
-
22
+
23
23
  assert_equal(Oj::EasyHash, obj.class)
24
24
  assert_equal(3, obj['abc'])
25
25
  assert_equal(3, obj[:abc])
@@ -35,5 +35,5 @@ class HashTest < Minitest::Test
35
35
  assert_equal(Oj::EasyHash, obj.class)
36
36
  assert_equal(3, obj[:abc])
37
37
  end
38
-
38
+
39
39
  end # HashTest
@@ -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'
@@ -23,19 +23,19 @@ class IntegerRangeTest < Minitest::Test
23
23
  end
24
24
 
25
25
  def test_range
26
- test = {s: 0, s2: -1, s3: 1, u: -2, u2: 2, u3: 9007199254740993}
26
+ test = {s: 0, s2: -1, s3: 1, u: -2, u2: 2, u3: 9_007_199_254_740_993}
27
27
  exp = '{"s":0,"s2":-1,"s3":1,"u":"-2","u2":"2","u3":"9007199254740993"}'
28
28
  assert_equal(exp, Oj.dump(test, integer_range: (-1..1)))
29
29
  end
30
30
 
31
31
  def test_bignum
32
- test = {u: -10000000000000000000, u2: 10000000000000000000}
32
+ test = {u: -10_000_000_000_000_000_000, u2: 10_000_000_000_000_000_000}
33
33
  exp = '{"u":"-10000000000000000000","u2":"10000000000000000000"}'
34
34
  assert_equal(exp, Oj.dump(test, integer_range: (-1..1)))
35
35
  end
36
36
 
37
37
  def test_valid_modes
38
- test = {safe: 0, unsafe: 9007199254740993}
38
+ test = {safe: 0, unsafe: 9_007_199_254_740_993}
39
39
  exp = '{"safe":0,"unsafe":"9007199254740993"}'
40
40
 
41
41
  [:strict, :null, :compat, :rails, :custom].each do |mode|
@@ -49,7 +49,7 @@ class IntegerRangeTest < Minitest::Test
49
49
  end
50
50
 
51
51
  def test_modes_without_opt
52
- test = {safe:0, unsafe: 10000000000000000000}
52
+ test = {safe: 0, unsafe: 10_000_000_000_000_000_000}
53
53
  exp = '{"safe":0,"unsafe":10000000000000000000}'
54
54
 
55
55
  [:strict, :null, :compat, :rails, :custom].each do |mode|
@@ -63,7 +63,7 @@ class IntegerRangeTest < Minitest::Test
63
63
  end
64
64
 
65
65
  def test_accept_nil_and_false
66
- test = {safe:0, unsafe: 10000000000000000000}
66
+ test = {safe: 0, unsafe: 10_000_000_000_000_000_000}
67
67
  exp = '{"safe":0,"unsafe":10000000000000000000}'
68
68
 
69
69
  assert_equal(exp, Oj.dump(test, integer_range: nil))