oj 3.13.14 → 3.13.22
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 +32 -0
- data/README.md +2 -0
- data/ext/oj/buf.h +4 -0
- data/ext/oj/compat.c +10 -10
- data/ext/oj/custom.c +34 -53
- data/ext/oj/dump.c +24 -13
- data/ext/oj/dump_compat.c +5 -10
- data/ext/oj/dump_object.c +5 -60
- data/ext/oj/dump_strict.c +5 -5
- data/ext/oj/extconf.rb +5 -4
- data/ext/oj/fast.c +15 -13
- data/ext/oj/intern.c +6 -9
- data/ext/oj/introspect.c +96 -0
- data/ext/oj/mimic_json.c +18 -8
- data/ext/oj/object.c +42 -41
- data/ext/oj/oj.c +27 -4
- data/ext/oj/oj.h +4 -1
- data/ext/oj/parse.c +111 -76
- data/ext/oj/parse.h +2 -0
- data/ext/oj/parser.c +61 -4
- data/ext/oj/parser.h +12 -0
- data/ext/oj/rails.c +5 -10
- data/ext/oj/saj2.c +333 -85
- data/ext/oj/saj2.h +23 -0
- data/ext/oj/sparse.c +4 -0
- data/ext/oj/strict.c +13 -13
- data/ext/oj/usual.c +82 -129
- data/ext/oj/usual.h +68 -0
- data/ext/oj/val_stack.c +1 -1
- data/ext/oj/validate.c +21 -26
- data/ext/oj/wab.c +15 -20
- data/lib/oj/saj.rb +20 -6
- data/lib/oj/state.rb +1 -1
- data/lib/oj/version.rb +1 -1
- data/pages/Compatibility.md +1 -1
- data/test/bar.rb +3 -1
- data/test/helper.rb +8 -2
- data/test/json_gem/json_generator_test.rb +3 -4
- data/test/json_gem/json_parser_test.rb +8 -1
- data/test/json_gem/test_helper.rb +7 -3
- data/test/test_compat.rb +25 -0
- data/test/test_custom.rb +13 -2
- data/test/test_file.rb +23 -7
- data/test/test_gc.rb +11 -0
- data/test/test_object.rb +3 -10
- data/test/test_parser.rb +3 -19
- data/test/test_parser_debug.rb +27 -0
- data/test/test_parser_saj.rb +92 -2
- data/test/test_scp.rb +2 -4
- data/test/test_strict.rb +2 -0
- data/test/test_various.rb +8 -3
- data/test/test_wab.rb +2 -0
- data/test/tests.rb +9 -0
- data/test/tests_mimic.rb +9 -0
- data/test/tests_mimic_addition.rb +9 -0
- metadata +7 -107
@@ -0,0 +1,27 @@
|
|
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 ParserJuice < Minitest::Test
|
18
|
+
|
19
|
+
def test_array
|
20
|
+
p = Oj::Parser.new(:debug)
|
21
|
+
out = p.parse(%|[true, false, null, 123, -1.23, "abc"]|)
|
22
|
+
puts out
|
23
|
+
out = p.parse(%|{"abc": []}|)
|
24
|
+
puts out
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
data/test/test_parser_saj.rb
CHANGED
@@ -5,7 +5,7 @@ $: << File.dirname(__FILE__)
|
|
5
5
|
|
6
6
|
require 'helper'
|
7
7
|
|
8
|
-
$json =
|
8
|
+
$json = %|{
|
9
9
|
"array": [
|
10
10
|
{
|
11
11
|
"num" : 3,
|
@@ -18,7 +18,7 @@ $json = %{{
|
|
18
18
|
}
|
19
19
|
],
|
20
20
|
"boolean" : true
|
21
|
-
}
|
21
|
+
}|
|
22
22
|
|
23
23
|
class AllSaj < Oj::Saj
|
24
24
|
attr_accessor :calls
|
@@ -53,6 +53,35 @@ class AllSaj < Oj::Saj
|
|
53
53
|
|
54
54
|
end # AllSaj
|
55
55
|
|
56
|
+
class LocSaj
|
57
|
+
attr_accessor :calls
|
58
|
+
|
59
|
+
def initialize()
|
60
|
+
@calls = []
|
61
|
+
end
|
62
|
+
|
63
|
+
def hash_start(key, line, column)
|
64
|
+
@calls << [:hash_start, key, line, column]
|
65
|
+
end
|
66
|
+
|
67
|
+
def hash_end(key, line, column)
|
68
|
+
@calls << [:hash_end, key, line, column]
|
69
|
+
end
|
70
|
+
|
71
|
+
def array_start(key, line, column)
|
72
|
+
@calls << [:array_start, key, line, column]
|
73
|
+
end
|
74
|
+
|
75
|
+
def array_end(key, line, column)
|
76
|
+
@calls << [:array_end, key, line, column]
|
77
|
+
end
|
78
|
+
|
79
|
+
def add_value(value, key, line, column)
|
80
|
+
@calls << [:add_value, value, key, line, column]
|
81
|
+
end
|
82
|
+
|
83
|
+
end # LocSaj
|
84
|
+
|
56
85
|
class SajTest < Minitest::Test
|
57
86
|
|
58
87
|
def test_nil
|
@@ -120,6 +149,43 @@ class SajTest < Minitest::Test
|
|
120
149
|
assert_equal((12345.6789e7 * 10000).to_i, (handler.calls[0][1] * 10000).to_i)
|
121
150
|
end
|
122
151
|
|
152
|
+
def test_bignum
|
153
|
+
handler = AllSaj.new()
|
154
|
+
json = %{-11.899999999999999}
|
155
|
+
p = Oj::Parser.new(:saj)
|
156
|
+
p.handler = handler
|
157
|
+
p.parse(json)
|
158
|
+
assert_equal(1, handler.calls.size)
|
159
|
+
assert_equal(:add_value, handler.calls[0][0])
|
160
|
+
assert_equal(-118999, (handler.calls[0][1] * 10000).to_i)
|
161
|
+
end
|
162
|
+
|
163
|
+
def test_bignum_loc
|
164
|
+
handler = LocSaj.new()
|
165
|
+
json = <<~JSON
|
166
|
+
{
|
167
|
+
"width": 192.33800000000002,
|
168
|
+
"xaxis": {
|
169
|
+
"anchor": "y"
|
170
|
+
}
|
171
|
+
}
|
172
|
+
JSON
|
173
|
+
|
174
|
+
p = Oj::Parser.new(:saj)
|
175
|
+
p.handler = handler
|
176
|
+
p.parse(json)
|
177
|
+
assert_equal(6, handler.calls.size)
|
178
|
+
assert_equal(1_923_380, (handler.calls[1][1] * 10000).to_i)
|
179
|
+
handler.calls[1][1] = 1_923_380
|
180
|
+
assert_equal([[:hash_start, nil, 1, 1],
|
181
|
+
[:add_value, 1923380, 'width', 2, 30],
|
182
|
+
[:hash_start, 'xaxis', 3, 12],
|
183
|
+
[:add_value, 'y', 'anchor', 4, 17],
|
184
|
+
[:hash_end, 'xaxis', 5, 3],
|
185
|
+
[:hash_end, nil, 6, 1]],
|
186
|
+
handler.calls)
|
187
|
+
end
|
188
|
+
|
123
189
|
def test_array_empty
|
124
190
|
handler = AllSaj.new()
|
125
191
|
json = %{[]}
|
@@ -242,4 +308,28 @@ class SajTest < Minitest::Test
|
|
242
308
|
], handler.calls)
|
243
309
|
end
|
244
310
|
|
311
|
+
def test_loc
|
312
|
+
handler = LocSaj.new()
|
313
|
+
Oj::Parser.saj.handler = handler
|
314
|
+
Oj::Parser.saj.parse($json)
|
315
|
+
assert_equal([[:hash_start, nil, 1, 1],
|
316
|
+
[:array_start, 'array', 2, 12],
|
317
|
+
[:hash_start, nil, 3, 5],
|
318
|
+
[:add_value, 3, 'num', 4, 18],
|
319
|
+
[:add_value, 'message', 'string', 5, 25],
|
320
|
+
[:hash_start, 'hash', 6, 17],
|
321
|
+
[:hash_start, 'h2', 7, 17],
|
322
|
+
[:array_start, 'a', 8, 17],
|
323
|
+
[:add_value, 1, nil, 8, 20],
|
324
|
+
[:add_value, 2, nil, 8, 23],
|
325
|
+
[:add_value, 3, nil, 8, 26],
|
326
|
+
[:array_end, 'a', 8, 27],
|
327
|
+
[:hash_end, 'h2', 9, 9],
|
328
|
+
[:hash_end, 'hash', 10, 7],
|
329
|
+
[:hash_end, nil, 11, 5],
|
330
|
+
[:array_end, 'array', 12, 3],
|
331
|
+
[:add_value, true, 'boolean', 13, 18],
|
332
|
+
[:hash_end, nil, 14, 1]], handler.calls)
|
333
|
+
end
|
334
|
+
|
245
335
|
end
|
data/test/test_scp.rb
CHANGED
@@ -320,8 +320,7 @@ class ScpTest < Minitest::Test
|
|
320
320
|
end
|
321
321
|
|
322
322
|
def test_pipe
|
323
|
-
|
324
|
-
return if RbConfig::CONFIG['host_os'] =~ /(mingw|mswin)/
|
323
|
+
skip 'needs fork' unless Process.respond_to?(:fork)
|
325
324
|
|
326
325
|
handler = AllHandler.new()
|
327
326
|
json = %{{"one":true,"two":false}}
|
@@ -357,8 +356,7 @@ class ScpTest < Minitest::Test
|
|
357
356
|
end
|
358
357
|
|
359
358
|
def test_pipe_close
|
360
|
-
|
361
|
-
return if RbConfig::CONFIG['host_os'] =~ /(mingw|mswin)/
|
359
|
+
skip 'needs fork' unless Process.respond_to?(:fork)
|
362
360
|
|
363
361
|
json = %{{"one":true,"two":false}}
|
364
362
|
IO.pipe do |read_io, write_io|
|
data/test/test_strict.rb
CHANGED
data/test/test_various.rb
CHANGED
@@ -345,6 +345,12 @@ class Juice < Minitest::Test
|
|
345
345
|
out = Oj.dump hash
|
346
346
|
assert_equal(%{{"key":"I \\u003c3 this"}}, out)
|
347
347
|
end
|
348
|
+
def test_escapes_slashes_by_default_when_configured_to_do_so
|
349
|
+
hash = {'key' => "I <3 this </script>"}
|
350
|
+
Oj.default_options = {:escape_mode => :slash}
|
351
|
+
out = Oj.dump hash
|
352
|
+
assert_equal(%{{"key":"I <3 this <\\/script>"}}, out)
|
353
|
+
end
|
348
354
|
def test_escapes_entities_when_asked_to
|
349
355
|
hash = {'key' => "I <3 this"}
|
350
356
|
out = Oj.dump(hash, :escape_mode => :xss_safe)
|
@@ -553,9 +559,6 @@ class Juice < Minitest::Test
|
|
553
559
|
end
|
554
560
|
|
555
561
|
def test_io_file
|
556
|
-
# Windows does not support fork
|
557
|
-
return if RbConfig::CONFIG['host_os'] =~ /(mingw|mswin)/
|
558
|
-
|
559
562
|
src = { 'x' => true, 'y' => 58, 'z' => [1, 2, 3]}
|
560
563
|
filename = File.join(File.dirname(__FILE__), 'open_file_test.json')
|
561
564
|
File.open(filename, "w") { |f|
|
@@ -568,6 +571,8 @@ class Juice < Minitest::Test
|
|
568
571
|
end
|
569
572
|
|
570
573
|
def test_io_stream
|
574
|
+
skip 'needs fork' unless Process.respond_to?(:fork)
|
575
|
+
|
571
576
|
IO.pipe do |r, w|
|
572
577
|
if fork
|
573
578
|
r.close
|
data/test/test_wab.rb
CHANGED
data/test/tests.rb
CHANGED
@@ -22,3 +22,12 @@ require 'test_rails'
|
|
22
22
|
require 'test_wab'
|
23
23
|
require 'test_writer'
|
24
24
|
require 'test_integer_range'
|
25
|
+
|
26
|
+
at_exit do
|
27
|
+
require 'helper'
|
28
|
+
if '3.1.0' <= RUBY_VERSION && !(RbConfig::CONFIG['host_os'] =~ /(mingw|mswin)/)
|
29
|
+
#Oj::debug_odd("teardown before GC.verify_compaction_references")
|
30
|
+
verify_gc_compaction
|
31
|
+
#Oj::debug_odd("teardown after GC.verify_compaction_references")
|
32
|
+
end
|
33
|
+
end
|
data/test/tests_mimic.rb
CHANGED
@@ -12,3 +12,12 @@ require 'json_generator_test'
|
|
12
12
|
require 'json_generic_object_test'
|
13
13
|
require 'json_parser_test'
|
14
14
|
require 'json_string_matching_test'
|
15
|
+
|
16
|
+
at_exit do
|
17
|
+
require 'helper'
|
18
|
+
if '3.1.0' <= RUBY_VERSION && !(RbConfig::CONFIG['host_os'] =~ /(mingw|mswin)/)
|
19
|
+
#Oj::debug_odd("teardown before GC.verify_compaction_references")
|
20
|
+
verify_gc_compaction
|
21
|
+
#Oj::debug_odd("teardown after GC.verify_compaction_references")
|
22
|
+
end
|
23
|
+
end
|
@@ -5,3 +5,12 @@ $: << File.dirname(__FILE__)
|
|
5
5
|
$: << File.join(File.dirname(__FILE__), 'json_gem')
|
6
6
|
|
7
7
|
require 'json_addition_test'
|
8
|
+
|
9
|
+
at_exit do
|
10
|
+
require 'helper'
|
11
|
+
if '3.1.0' <= RUBY_VERSION && !(RbConfig::CONFIG['host_os'] =~ /(mingw|mswin)/)
|
12
|
+
#Oj::debug_odd("teardown before GC.verify_compaction_references")
|
13
|
+
verify_gc_compaction
|
14
|
+
#Oj::debug_odd("teardown after GC.verify_compaction_references")
|
15
|
+
end
|
16
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oj
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.13.
|
4
|
+
version: 3.13.22
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Ohler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-11-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|
@@ -110,6 +110,7 @@ files:
|
|
110
110
|
- ext/oj/fast.c
|
111
111
|
- ext/oj/intern.c
|
112
112
|
- ext/oj/intern.h
|
113
|
+
- ext/oj/introspect.c
|
113
114
|
- ext/oj/mimic_json.c
|
114
115
|
- ext/oj/object.c
|
115
116
|
- ext/oj/odd.c
|
@@ -130,6 +131,7 @@ files:
|
|
130
131
|
- ext/oj/rxclass.h
|
131
132
|
- ext/oj/saj.c
|
132
133
|
- ext/oj/saj2.c
|
134
|
+
- ext/oj/saj2.h
|
133
135
|
- ext/oj/scp.c
|
134
136
|
- ext/oj/sparse.c
|
135
137
|
- ext/oj/stream_writer.c
|
@@ -138,6 +140,7 @@ files:
|
|
138
140
|
- ext/oj/trace.c
|
139
141
|
- ext/oj/trace.h
|
140
142
|
- ext/oj/usual.c
|
143
|
+
- ext/oj/usual.h
|
141
144
|
- ext/oj/util.c
|
142
145
|
- ext/oj/util.h
|
143
146
|
- ext/oj/val_stack.c
|
@@ -257,6 +260,7 @@ files:
|
|
257
260
|
- test/test_null.rb
|
258
261
|
- test/test_object.rb
|
259
262
|
- test/test_parser.rb
|
263
|
+
- test/test_parser_debug.rb
|
260
264
|
- test/test_parser_saj.rb
|
261
265
|
- test/test_parser_usual.rb
|
262
266
|
- test/test_rails.rb
|
@@ -303,108 +307,4 @@ rubygems_version: 3.3.3
|
|
303
307
|
signing_key:
|
304
308
|
specification_version: 4
|
305
309
|
summary: A fast JSON parser and serializer.
|
306
|
-
test_files:
|
307
|
-
- test/_test_active.rb
|
308
|
-
- test/_test_active_mimic.rb
|
309
|
-
- test/_test_mimic_rails.rb
|
310
|
-
- test/activerecord/result_test.rb
|
311
|
-
- test/activesupport4/decoding_test.rb
|
312
|
-
- test/activesupport4/encoding_test.rb
|
313
|
-
- test/activesupport4/test_helper.rb
|
314
|
-
- test/activesupport5/abstract_unit.rb
|
315
|
-
- test/activesupport5/decoding_test.rb
|
316
|
-
- test/activesupport5/encoding_test.rb
|
317
|
-
- test/activesupport5/encoding_test_cases.rb
|
318
|
-
- test/activesupport5/test_helper.rb
|
319
|
-
- test/activesupport5/time_zone_test_helpers.rb
|
320
|
-
- test/activesupport6/abstract_unit.rb
|
321
|
-
- test/activesupport6/decoding_test.rb
|
322
|
-
- test/activesupport6/encoding_test.rb
|
323
|
-
- test/activesupport6/encoding_test_cases.rb
|
324
|
-
- test/activesupport6/test_common.rb
|
325
|
-
- test/activesupport6/test_helper.rb
|
326
|
-
- test/activesupport6/time_zone_test_helpers.rb
|
327
|
-
- test/activesupport7/abstract_unit.rb
|
328
|
-
- test/activesupport7/decoding_test.rb
|
329
|
-
- test/activesupport7/encoding_test.rb
|
330
|
-
- test/activesupport7/encoding_test_cases.rb
|
331
|
-
- test/activesupport7/time_zone_test_helpers.rb
|
332
|
-
- test/bar.rb
|
333
|
-
- test/baz.rb
|
334
|
-
- test/bug.rb
|
335
|
-
- test/files.rb
|
336
|
-
- test/foo.rb
|
337
|
-
- test/helper.rb
|
338
|
-
- test/isolated/shared.rb
|
339
|
-
- test/isolated/test_mimic_after.rb
|
340
|
-
- test/isolated/test_mimic_alone.rb
|
341
|
-
- test/isolated/test_mimic_as_json.rb
|
342
|
-
- test/isolated/test_mimic_before.rb
|
343
|
-
- test/isolated/test_mimic_define.rb
|
344
|
-
- test/isolated/test_mimic_rails_after.rb
|
345
|
-
- test/isolated/test_mimic_rails_before.rb
|
346
|
-
- test/isolated/test_mimic_redefine.rb
|
347
|
-
- test/json_gem/json_addition_test.rb
|
348
|
-
- test/json_gem/json_common_interface_test.rb
|
349
|
-
- test/json_gem/json_encoding_test.rb
|
350
|
-
- test/json_gem/json_ext_parser_test.rb
|
351
|
-
- test/json_gem/json_fixtures_test.rb
|
352
|
-
- test/json_gem/json_generator_test.rb
|
353
|
-
- test/json_gem/json_generic_object_test.rb
|
354
|
-
- test/json_gem/json_parser_test.rb
|
355
|
-
- test/json_gem/json_string_matching_test.rb
|
356
|
-
- test/json_gem/test_helper.rb
|
357
|
-
- test/mem.rb
|
358
|
-
- test/perf.rb
|
359
|
-
- test/perf_compat.rb
|
360
|
-
- test/perf_dump.rb
|
361
|
-
- test/perf_fast.rb
|
362
|
-
- test/perf_file.rb
|
363
|
-
- test/perf_object.rb
|
364
|
-
- test/perf_once.rb
|
365
|
-
- test/perf_parser.rb
|
366
|
-
- test/perf_saj.rb
|
367
|
-
- test/perf_scp.rb
|
368
|
-
- test/perf_simple.rb
|
369
|
-
- test/perf_strict.rb
|
370
|
-
- test/perf_wab.rb
|
371
|
-
- test/prec.rb
|
372
|
-
- test/sample/change.rb
|
373
|
-
- test/sample/dir.rb
|
374
|
-
- test/sample/doc.rb
|
375
|
-
- test/sample/file.rb
|
376
|
-
- test/sample/group.rb
|
377
|
-
- test/sample/hasprops.rb
|
378
|
-
- test/sample/layer.rb
|
379
|
-
- test/sample/line.rb
|
380
|
-
- test/sample/oval.rb
|
381
|
-
- test/sample/rect.rb
|
382
|
-
- test/sample/shape.rb
|
383
|
-
- test/sample/text.rb
|
384
|
-
- test/sample.rb
|
385
|
-
- test/sample_json.rb
|
386
|
-
- test/test_compat.rb
|
387
|
-
- test/test_custom.rb
|
388
|
-
- test/test_debian.rb
|
389
|
-
- test/test_fast.rb
|
390
|
-
- test/test_file.rb
|
391
|
-
- test/test_gc.rb
|
392
|
-
- test/test_generate.rb
|
393
|
-
- test/test_hash.rb
|
394
|
-
- test/test_integer_range.rb
|
395
|
-
- test/test_null.rb
|
396
|
-
- test/test_object.rb
|
397
|
-
- test/test_parser.rb
|
398
|
-
- test/test_parser_saj.rb
|
399
|
-
- test/test_parser_usual.rb
|
400
|
-
- test/test_rails.rb
|
401
|
-
- test/test_saj.rb
|
402
|
-
- test/test_scp.rb
|
403
|
-
- test/test_strict.rb
|
404
|
-
- test/test_various.rb
|
405
|
-
- test/test_wab.rb
|
406
|
-
- test/test_writer.rb
|
407
|
-
- test/tests.rb
|
408
|
-
- test/tests_mimic.rb
|
409
|
-
- test/tests_mimic_addition.rb
|
410
|
-
- test/zoo.rb
|
310
|
+
test_files: []
|