oj 3.14.2 → 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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -1
- data/README.md +0 -1
- data/ext/oj/buf.h +2 -2
- data/ext/oj/cache.c +16 -16
- data/ext/oj/cache8.c +7 -7
- data/ext/oj/circarray.c +2 -1
- data/ext/oj/circarray.h +2 -2
- data/ext/oj/code.c +2 -2
- data/ext/oj/code.h +2 -2
- data/ext/oj/compat.c +6 -14
- data/ext/oj/custom.c +6 -16
- data/ext/oj/debug.c +3 -9
- data/ext/oj/dump.c +43 -18
- data/ext/oj/dump_compat.c +551 -576
- data/ext/oj/dump_leaf.c +3 -5
- data/ext/oj/dump_object.c +35 -36
- data/ext/oj/dump_strict.c +2 -4
- data/ext/oj/encoder.c +1 -1
- data/ext/oj/err.c +2 -13
- data/ext/oj/err.h +9 -12
- data/ext/oj/extconf.rb +1 -1
- data/ext/oj/fast.c +24 -38
- data/ext/oj/intern.c +38 -42
- data/ext/oj/intern.h +3 -7
- data/ext/oj/mem.c +211 -217
- data/ext/oj/mem.h +10 -10
- data/ext/oj/mimic_json.c +39 -24
- data/ext/oj/object.c +12 -26
- data/ext/oj/odd.c +2 -1
- data/ext/oj/odd.h +4 -4
- data/ext/oj/oj.c +80 -81
- data/ext/oj/oj.h +56 -54
- data/ext/oj/parse.c +55 -118
- data/ext/oj/parse.h +5 -10
- data/ext/oj/parser.c +7 -8
- data/ext/oj/parser.h +7 -8
- data/ext/oj/rails.c +28 -59
- data/ext/oj/reader.c +5 -9
- data/ext/oj/reader.h +1 -1
- data/ext/oj/resolve.c +3 -4
- data/ext/oj/rxclass.c +1 -1
- data/ext/oj/rxclass.h +1 -1
- data/ext/oj/saj.c +4 -4
- data/ext/oj/saj2.c +32 -49
- data/ext/oj/saj2.h +1 -1
- data/ext/oj/scp.c +3 -14
- data/ext/oj/sparse.c +18 -67
- data/ext/oj/stream_writer.c +5 -18
- data/ext/oj/strict.c +16 -40
- data/ext/oj/string_writer.c +6 -14
- data/ext/oj/trace.h +27 -16
- data/ext/oj/usual.c +62 -61
- data/ext/oj/usual.h +6 -6
- data/ext/oj/util.h +1 -1
- data/ext/oj/val_stack.h +4 -4
- data/ext/oj/wab.c +16 -36
- data/lib/oj/active_support_helper.rb +0 -1
- data/lib/oj/bag.rb +7 -1
- data/lib/oj/easy_hash.rb +4 -5
- data/lib/oj/error.rb +0 -1
- data/lib/oj/json.rb +4 -2
- data/lib/oj/mimic.rb +4 -2
- data/lib/oj/state.rb +8 -5
- data/lib/oj/version.rb +1 -2
- data/lib/oj.rb +2 -0
- data/pages/Options.md +4 -0
- data/test/_test_active.rb +8 -9
- data/test/_test_active_mimic.rb +7 -8
- data/test/_test_mimic_rails.rb +17 -20
- data/test/activerecord/result_test.rb +5 -6
- data/test/files.rb +15 -15
- data/test/foo.rb +9 -52
- data/test/helper.rb +5 -8
- data/test/isolated/shared.rb +3 -2
- data/test/json_gem/json_addition_test.rb +2 -2
- data/test/json_gem/json_common_interface_test.rb +4 -4
- data/test/json_gem/json_encoding_test.rb +0 -0
- data/test/json_gem/json_ext_parser_test.rb +1 -0
- data/test/json_gem/json_fixtures_test.rb +3 -2
- data/test/json_gem/json_generator_test.rb +43 -32
- data/test/json_gem/json_generic_object_test.rb +11 -11
- data/test/json_gem/json_parser_test.rb +46 -46
- data/test/json_gem/json_string_matching_test.rb +9 -9
- data/test/mem.rb +13 -12
- data/test/perf.rb +21 -26
- data/test/perf_compat.rb +31 -33
- data/test/perf_dump.rb +25 -25
- data/test/perf_fast.rb +80 -82
- data/test/perf_file.rb +27 -29
- data/test/perf_object.rb +65 -69
- data/test/perf_once.rb +12 -11
- data/test/perf_parser.rb +41 -48
- data/test/perf_saj.rb +46 -54
- data/test/perf_scp.rb +57 -69
- data/test/perf_simple.rb +41 -39
- data/test/perf_strict.rb +68 -70
- data/test/perf_wab.rb +67 -69
- data/test/prec.rb +3 -3
- data/test/sample/change.rb +0 -1
- data/test/sample/dir.rb +0 -1
- data/test/sample/doc.rb +0 -1
- data/test/sample/file.rb +0 -1
- data/test/sample/group.rb +0 -1
- data/test/sample/hasprops.rb +0 -1
- data/test/sample/layer.rb +0 -1
- data/test/sample/rect.rb +0 -1
- data/test/sample/shape.rb +0 -1
- data/test/sample/text.rb +0 -1
- data/test/sample.rb +16 -16
- data/test/sample_json.rb +8 -8
- data/test/test_compat.rb +52 -52
- data/test/test_custom.rb +61 -51
- data/test/test_debian.rb +7 -10
- data/test/test_fast.rb +86 -90
- data/test/test_file.rb +24 -29
- data/test/test_gc.rb +5 -5
- data/test/test_generate.rb +5 -5
- data/test/test_hash.rb +4 -4
- data/test/test_integer_range.rb +9 -9
- data/test/test_null.rb +20 -20
- data/test/test_object.rb +78 -87
- data/test/test_parser.rb +4 -4
- data/test/test_parser_debug.rb +4 -4
- data/test/test_parser_saj.rb +27 -25
- data/test/test_parser_usual.rb +6 -6
- data/test/test_rails.rb +2 -2
- data/test/test_saj.rb +10 -8
- data/test/test_scp.rb +35 -35
- data/test/test_strict.rb +28 -32
- data/test/test_various.rb +140 -97
- data/test/test_wab.rb +46 -44
- data/test/test_writer.rb +47 -47
- data/test/tests.rb +7 -7
- data/test/tests_mimic.rb +6 -6
- data/test/tests_mimic_addition.rb +6 -6
- metadata +18 -30
- data/test/activesupport4/decoding_test.rb +0 -108
- data/test/activesupport4/encoding_test.rb +0 -531
- data/test/activesupport4/test_helper.rb +0 -41
- data/test/activesupport5/abstract_unit.rb +0 -45
- data/test/activesupport5/decoding_test.rb +0 -133
- data/test/activesupport5/encoding_test.rb +0 -500
- data/test/activesupport5/encoding_test_cases.rb +0 -98
- data/test/activesupport5/test_helper.rb +0 -72
- data/test/activesupport5/time_zone_test_helpers.rb +0 -39
- data/test/bar.rb +0 -11
- data/test/baz.rb +0 -16
- data/test/bug.rb +0 -16
- data/test/zoo.rb +0 -13
data/test/test_parser_saj.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
#
|
2
|
+
# frozen_string_literal: true
|
3
3
|
|
4
|
-
|
4
|
+
$LOAD_PATH << __dir__
|
5
5
|
|
6
6
|
require 'helper'
|
7
7
|
|
@@ -23,8 +23,10 @@ $json = %|{
|
|
23
23
|
class AllSaj < Oj::Saj
|
24
24
|
attr_accessor :calls
|
25
25
|
|
26
|
-
def initialize
|
26
|
+
def initialize
|
27
27
|
@calls = []
|
28
|
+
|
29
|
+
super
|
28
30
|
end
|
29
31
|
|
30
32
|
def hash_start(key)
|
@@ -56,7 +58,7 @@ end # AllSaj
|
|
56
58
|
class LocSaj
|
57
59
|
attr_accessor :calls
|
58
60
|
|
59
|
-
def initialize
|
61
|
+
def initialize
|
60
62
|
@calls = []
|
61
63
|
end
|
62
64
|
|
@@ -126,7 +128,7 @@ class SajTest < Minitest::Test
|
|
126
128
|
p = Oj::Parser.new(:saj)
|
127
129
|
p.handler = handler
|
128
130
|
p.parse(json)
|
129
|
-
assert_equal([[:add_value,
|
131
|
+
assert_equal([[:add_value, 12_345, nil]], handler.calls)
|
130
132
|
end
|
131
133
|
|
132
134
|
def test_float
|
@@ -135,7 +137,7 @@ class SajTest < Minitest::Test
|
|
135
137
|
p = Oj::Parser.new(:saj)
|
136
138
|
p.handler = handler
|
137
139
|
p.parse(json)
|
138
|
-
assert_equal([[:add_value,
|
140
|
+
assert_equal([[:add_value, 12_345.6789, nil]], handler.calls)
|
139
141
|
end
|
140
142
|
|
141
143
|
def test_float_exp
|
@@ -146,7 +148,7 @@ class SajTest < Minitest::Test
|
|
146
148
|
p.parse(json)
|
147
149
|
assert_equal(1, handler.calls.size)
|
148
150
|
assert_equal(:add_value, handler.calls[0][0])
|
149
|
-
assert_equal((
|
151
|
+
assert_equal((12_345.6789e7 * 10_000).to_i, (handler.calls[0][1] * 10_000).to_i)
|
150
152
|
end
|
151
153
|
|
152
154
|
def test_bignum
|
@@ -157,7 +159,7 @@ class SajTest < Minitest::Test
|
|
157
159
|
p.parse(json)
|
158
160
|
assert_equal(1, handler.calls.size)
|
159
161
|
assert_equal(:add_value, handler.calls[0][0])
|
160
|
-
assert_equal(-
|
162
|
+
assert_equal(-118_999, (handler.calls[0][1] * 10_000).to_i)
|
161
163
|
end
|
162
164
|
|
163
165
|
def test_bignum_loc
|
@@ -175,10 +177,10 @@ class SajTest < Minitest::Test
|
|
175
177
|
p.handler = handler
|
176
178
|
p.parse(json)
|
177
179
|
assert_equal(6, handler.calls.size)
|
178
|
-
assert_equal(1_923_380, (handler.calls[1][1] *
|
180
|
+
assert_equal(1_923_380, (handler.calls[1][1] * 10_000).to_i)
|
179
181
|
handler.calls[1][1] = 1_923_380
|
180
182
|
assert_equal([[:hash_start, nil, 1, 1],
|
181
|
-
[:add_value,
|
183
|
+
[:add_value, 1_923_380, 'width', 2, 30],
|
182
184
|
[:hash_start, 'xaxis', 3, 12],
|
183
185
|
[:add_value, 'y', 'anchor', 4, 17],
|
184
186
|
[:hash_end, 'xaxis', 5, 3],
|
@@ -260,13 +262,13 @@ class SajTest < Minitest::Test
|
|
260
262
|
p.handler = handler
|
261
263
|
p.parse(json)
|
262
264
|
assert_equal([
|
263
|
-
|
265
|
+
[:array_start, nil],
|
264
266
|
[:add_value, true, nil],
|
265
267
|
[:array_end, nil],
|
266
|
-
|
268
|
+
[:array_start, nil],
|
267
269
|
[:add_value, false, nil],
|
268
270
|
[:array_end, nil],
|
269
|
-
|
271
|
+
], handler.calls)
|
270
272
|
end
|
271
273
|
|
272
274
|
def test_io
|
@@ -276,11 +278,11 @@ class SajTest < Minitest::Test
|
|
276
278
|
p.handler = handler
|
277
279
|
p.load(StringIO.new(json))
|
278
280
|
assert_equal([
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
281
|
+
[:array_start, nil],
|
282
|
+
[:add_value, true, nil],
|
283
|
+
[:add_value, false, nil],
|
284
|
+
[:array_end, nil],
|
285
|
+
], handler.calls)
|
284
286
|
end
|
285
287
|
|
286
288
|
def test_file
|
@@ -289,11 +291,11 @@ class SajTest < Minitest::Test
|
|
289
291
|
p.handler = handler
|
290
292
|
p.file('saj_test.json')
|
291
293
|
assert_equal([
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
294
|
+
[:array_start, nil],
|
295
|
+
[:add_value, true, nil],
|
296
|
+
[:add_value, false, nil],
|
297
|
+
[:array_end, nil],
|
298
|
+
], handler.calls)
|
297
299
|
end
|
298
300
|
|
299
301
|
def test_default
|
@@ -302,10 +304,10 @@ class SajTest < Minitest::Test
|
|
302
304
|
Oj::Parser.saj.handler = handler
|
303
305
|
Oj::Parser.saj.parse(json)
|
304
306
|
assert_equal([
|
305
|
-
|
307
|
+
[:array_start, nil],
|
306
308
|
[:add_value, true, nil],
|
307
309
|
[:array_end, nil],
|
308
|
-
|
310
|
+
], handler.calls)
|
309
311
|
end
|
310
312
|
|
311
313
|
def test_loc
|
data/test/test_parser_usual.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
#
|
2
|
+
# frozen_string_literal: true
|
3
3
|
|
4
|
-
|
4
|
+
$LOAD_PATH << __dir__
|
5
5
|
|
6
6
|
require 'helper'
|
7
7
|
|
@@ -40,10 +40,10 @@ class UsualTest < Minitest::Test
|
|
40
40
|
[
|
41
41
|
['[]', []],
|
42
42
|
['[false]', [false]],
|
43
|
-
['[true,false]', [true,false]],
|
43
|
+
['[true,false]', [true, false]],
|
44
44
|
['[[]]', [[]]],
|
45
|
-
['[true,[],false]', [true,[],false]],
|
46
|
-
['[true,[true],false]', [true,[true],false]],
|
45
|
+
['[true,[],false]', [true, [], false]],
|
46
|
+
['[true,[true],false]', [true, [true], false]],
|
47
47
|
].each { |x|
|
48
48
|
doc = p.parse(x[0])
|
49
49
|
assert_equal(x[1], doc)
|
@@ -67,7 +67,7 @@ class UsualTest < Minitest::Test
|
|
67
67
|
|
68
68
|
def test_symbol_keys
|
69
69
|
p = Oj::Parser.new(:usual)
|
70
|
-
|
70
|
+
refute(p.symbol_keys)
|
71
71
|
p.symbol_keys = true
|
72
72
|
doc = p.parse('{"a": true, "b": false}')
|
73
73
|
assert_equal({a: true, b: false}, doc)
|
data/test/test_rails.rb
CHANGED
data/test/test_saj.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
#
|
2
|
+
# frozen_string_literal: true
|
3
3
|
|
4
|
-
|
4
|
+
$LOAD_PATH << __dir__
|
5
5
|
|
6
6
|
require 'helper'
|
7
7
|
|
@@ -23,8 +23,10 @@ $json = %{{
|
|
23
23
|
class AllSaj < Oj::Saj
|
24
24
|
attr_accessor :calls
|
25
25
|
|
26
|
-
def initialize
|
26
|
+
def initialize
|
27
27
|
@calls = []
|
28
|
+
|
29
|
+
super
|
28
30
|
end
|
29
31
|
|
30
32
|
def hash_start(key)
|
@@ -95,14 +97,14 @@ class SajTest < Minitest::Test
|
|
95
97
|
handler = AllSaj.new()
|
96
98
|
json = %{12345}
|
97
99
|
Oj.saj_parse(handler, json)
|
98
|
-
assert_equal([[:add_value,
|
100
|
+
assert_equal([[:add_value, 12_345, nil]], handler.calls)
|
99
101
|
end
|
100
102
|
|
101
103
|
def test_float
|
102
104
|
handler = AllSaj.new()
|
103
105
|
json = %{12345.6789}
|
104
106
|
Oj.saj_parse(handler, json)
|
105
|
-
assert_equal([[:add_value,
|
107
|
+
assert_equal([[:add_value, 12_345.6789, nil]], handler.calls)
|
106
108
|
end
|
107
109
|
|
108
110
|
def test_float_exp
|
@@ -111,7 +113,7 @@ class SajTest < Minitest::Test
|
|
111
113
|
Oj.saj_parse(handler, json)
|
112
114
|
assert_equal(1, handler.calls.size)
|
113
115
|
assert_equal(:add_value, handler.calls[0][0])
|
114
|
-
assert_equal((
|
116
|
+
assert_equal((12_345.6789e7 * 10_000).to_i, (handler.calls[0][1] * 10_000).to_i)
|
115
117
|
end
|
116
118
|
|
117
119
|
def test_array_empty
|
@@ -177,10 +179,10 @@ class SajTest < Minitest::Test
|
|
177
179
|
handler = AllSaj.new()
|
178
180
|
json = %{12345xyz}
|
179
181
|
Oj.saj_parse(handler, json)
|
180
|
-
assert_equal([:add_value,
|
182
|
+
assert_equal([:add_value, 12_345, nil], handler.calls.first)
|
181
183
|
type, message, line, column = handler.calls.last
|
182
184
|
assert_equal([:error, 1, 6], [type, line, column])
|
183
|
-
assert_match(%r{invalid format, extra characters at line 1, column 6 \[(?:[A-Za-z]
|
185
|
+
assert_match(%r{invalid format, extra characters at line 1, column 6 \[(?:[A-Za-z]:/)?(?:[a-z.]+/)*saj\.c:\d+\]}, message)
|
184
186
|
end
|
185
187
|
|
186
188
|
end
|
data/test/test_scp.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
#
|
2
|
+
# frozen_string_literal: true
|
3
3
|
|
4
|
-
|
4
|
+
$LOAD_PATH << __dir__
|
5
5
|
|
6
6
|
require 'helper'
|
7
7
|
require 'socket'
|
@@ -23,23 +23,22 @@ $json = %{{
|
|
23
23
|
}}
|
24
24
|
|
25
25
|
class NoHandler < Oj::ScHandler
|
26
|
-
def initialize()
|
27
|
-
end
|
28
26
|
end
|
29
27
|
|
30
28
|
class AllHandler < Oj::ScHandler
|
31
29
|
attr_accessor :calls
|
32
30
|
|
33
|
-
def initialize
|
31
|
+
def initialize
|
32
|
+
super
|
34
33
|
@calls = []
|
35
34
|
end
|
36
35
|
|
37
|
-
def hash_start
|
36
|
+
def hash_start
|
38
37
|
@calls << [:hash_start]
|
39
38
|
{}
|
40
39
|
end
|
41
40
|
|
42
|
-
def hash_end
|
41
|
+
def hash_end
|
43
42
|
@calls << [:hash_end]
|
44
43
|
end
|
45
44
|
|
@@ -47,15 +46,16 @@ class AllHandler < Oj::ScHandler
|
|
47
46
|
@calls << [:hash_key, key]
|
48
47
|
return 'too' if 'two' == key
|
49
48
|
return :symbol if 'symbol' == key
|
49
|
+
|
50
50
|
key
|
51
51
|
end
|
52
52
|
|
53
|
-
def array_start
|
53
|
+
def array_start
|
54
54
|
@calls << [:array_start]
|
55
55
|
[]
|
56
56
|
end
|
57
57
|
|
58
|
-
def array_end
|
58
|
+
def array_end
|
59
59
|
@calls << [:array_end]
|
60
60
|
end
|
61
61
|
|
@@ -63,11 +63,11 @@ class AllHandler < Oj::ScHandler
|
|
63
63
|
@calls << [:add_value, value]
|
64
64
|
end
|
65
65
|
|
66
|
-
def hash_set(
|
66
|
+
def hash_set(_h, key, value)
|
67
67
|
@calls << [:hash_set, key, value]
|
68
68
|
end
|
69
69
|
|
70
|
-
def array_append(
|
70
|
+
def array_append(_a, value)
|
71
71
|
@calls << [:array_append, value]
|
72
72
|
end
|
73
73
|
|
@@ -75,18 +75,19 @@ end # AllHandler
|
|
75
75
|
|
76
76
|
class Closer < AllHandler
|
77
77
|
attr_accessor :io
|
78
|
+
|
78
79
|
def initialize(io)
|
79
80
|
super()
|
80
81
|
@io = io
|
81
82
|
end
|
82
83
|
|
83
|
-
def hash_start
|
84
|
+
def hash_start
|
84
85
|
@calls << [:hash_start]
|
85
86
|
@io.close
|
86
87
|
{}
|
87
88
|
end
|
88
89
|
|
89
|
-
def hash_set(
|
90
|
+
def hash_set(_h, key, value)
|
90
91
|
@calls << [:hash_set, key, value]
|
91
92
|
@io.close
|
92
93
|
end
|
@@ -135,14 +136,14 @@ class ScpTest < Minitest::Test
|
|
135
136
|
handler = AllHandler.new()
|
136
137
|
json = %{12345}
|
137
138
|
Oj.sc_parse(handler, json)
|
138
|
-
assert_equal([[:add_value,
|
139
|
+
assert_equal([[:add_value, 12_345]], handler.calls)
|
139
140
|
end
|
140
141
|
|
141
142
|
def test_float
|
142
143
|
handler = AllHandler.new()
|
143
144
|
json = %{12345.6789}
|
144
145
|
Oj.sc_parse(handler, json)
|
145
|
-
assert_equal([[:add_value,
|
146
|
+
assert_equal([[:add_value, 12_345.6789]], handler.calls)
|
146
147
|
end
|
147
148
|
|
148
149
|
def test_float_exp
|
@@ -151,7 +152,7 @@ class ScpTest < Minitest::Test
|
|
151
152
|
Oj.sc_parse(handler, json)
|
152
153
|
assert_equal(1, handler.calls.size)
|
153
154
|
assert_equal(:add_value, handler.calls[0][0])
|
154
|
-
assert_equal((
|
155
|
+
assert_equal((12_345.6789e7 * 10_000).to_i, (handler.calls[0][1] * 10_000).to_i)
|
155
156
|
end
|
156
157
|
|
157
158
|
def test_array_empty
|
@@ -230,9 +231,9 @@ class ScpTest < Minitest::Test
|
|
230
231
|
[:array_start],
|
231
232
|
[:hash_start],
|
232
233
|
[:hash_key, 'num'],
|
233
|
-
[:hash_set,
|
234
|
+
[:hash_set, 'num', 3],
|
234
235
|
[:hash_key, 'string'],
|
235
|
-
[:hash_set,
|
236
|
+
[:hash_set, 'string', 'message'],
|
236
237
|
[:hash_key, 'hash'],
|
237
238
|
[:hash_start],
|
238
239
|
[:hash_key, 'h2'],
|
@@ -243,17 +244,17 @@ class ScpTest < Minitest::Test
|
|
243
244
|
[:array_append, 2],
|
244
245
|
[:array_append, 3],
|
245
246
|
[:array_end],
|
246
|
-
[:hash_set,
|
247
|
+
[:hash_set, 'a', []],
|
247
248
|
[:hash_end],
|
248
|
-
[:hash_set,
|
249
|
+
[:hash_set, 'h2', {}],
|
249
250
|
[:hash_end],
|
250
|
-
[:hash_set,
|
251
|
+
[:hash_set, 'hash', {}],
|
251
252
|
[:hash_end],
|
252
253
|
[:array_append, {}],
|
253
254
|
[:array_end],
|
254
|
-
[:hash_set,
|
255
|
+
[:hash_set, 'array', []],
|
255
256
|
[:hash_key, 'boolean'],
|
256
|
-
[:hash_set,
|
257
|
+
[:hash_set, 'boolean', true],
|
257
258
|
[:hash_end],
|
258
259
|
[:add_value, {}]], handler.calls)
|
259
260
|
end
|
@@ -346,12 +347,10 @@ class ScpTest < Minitest::Test
|
|
346
347
|
end
|
347
348
|
|
348
349
|
def test_bad_bignum
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
Oj.sc_parse(handler, json)
|
354
|
-
end
|
350
|
+
handler = AllHandler.new()
|
351
|
+
json = %|{"big":-e123456789}|
|
352
|
+
assert_raises Exception do # Can be either Oj::ParseError or ArgumentError depending on Ruby version
|
353
|
+
Oj.sc_parse(handler, json)
|
355
354
|
end
|
356
355
|
end
|
357
356
|
|
@@ -370,7 +369,7 @@ class ScpTest < Minitest::Test
|
|
370
369
|
rescue Exception => e
|
371
370
|
err = e.class.to_s
|
372
371
|
end
|
373
|
-
assert_equal(
|
372
|
+
assert_equal('IOError', err)
|
374
373
|
assert_equal([[:hash_start],
|
375
374
|
[:hash_key, 'one'],
|
376
375
|
[:hash_set, 'one', true]], handler.calls)
|
@@ -379,8 +378,8 @@ class ScpTest < Minitest::Test
|
|
379
378
|
write_io.write json[0..11]
|
380
379
|
sleep(0.1)
|
381
380
|
begin
|
382
|
-
write_io.write json[12
|
383
|
-
rescue Exception
|
381
|
+
write_io.write json[12..]
|
382
|
+
rescue Exception
|
384
383
|
# ignore, should fail to write
|
385
384
|
end
|
386
385
|
write_io.close
|
@@ -397,15 +396,16 @@ class ScpTest < Minitest::Test
|
|
397
396
|
# Not able to open a socket to run the test. Might be Travis.
|
398
397
|
return
|
399
398
|
end
|
400
|
-
Thread.start(json) do |
|
399
|
+
Thread.start(json) do |_j|
|
401
400
|
c = server.accept()
|
402
401
|
c.puts json[0..11]
|
403
402
|
10.times {
|
404
403
|
break if c.closed?
|
404
|
+
|
405
405
|
sleep(0.1)
|
406
406
|
}
|
407
407
|
unless c.closed?
|
408
|
-
c.puts json[12
|
408
|
+
c.puts json[12..]
|
409
409
|
c.close
|
410
410
|
end
|
411
411
|
end
|
@@ -422,7 +422,7 @@ class ScpTest < Minitest::Test
|
|
422
422
|
rescue Exception => e
|
423
423
|
err = e.class.to_s
|
424
424
|
end
|
425
|
-
assert_equal(
|
425
|
+
assert_equal('IOError', err)
|
426
426
|
assert_equal([[:hash_start],
|
427
427
|
[:hash_key, 'one'],
|
428
428
|
[:hash_set, 'one', true]], handler.calls)
|
data/test/test_strict.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
#
|
2
|
+
# frozen_string_literal: true
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
$LOAD_PATH << __dir__
|
5
|
+
@oj_dir = File.dirname(File.expand_path(__dir__))
|
6
6
|
%w(lib ext).each do |dir|
|
7
|
-
|
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(
|
56
|
-
dump_and_load(-
|
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(
|
62
|
+
dump_and_load(12_345.6789, false)
|
63
63
|
dump_and_load(70.35, false)
|
64
|
-
dump_and_load(-
|
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)
|
@@ -78,7 +78,7 @@ class StrictJuice < Minitest::Test
|
|
78
78
|
assert(true)
|
79
79
|
return
|
80
80
|
end
|
81
|
-
assert(false,
|
81
|
+
assert(false, '*** expected an exception')
|
82
82
|
end
|
83
83
|
|
84
84
|
def test_infinity_dump
|
@@ -90,7 +90,7 @@ class StrictJuice < Minitest::Test
|
|
90
90
|
assert(true)
|
91
91
|
return
|
92
92
|
end
|
93
|
-
assert(false,
|
93
|
+
assert(false, '*** expected an exception')
|
94
94
|
end
|
95
95
|
|
96
96
|
def test_neg_infinity_dump
|
@@ -102,7 +102,7 @@ class StrictJuice < Minitest::Test
|
|
102
102
|
assert(true)
|
103
103
|
return
|
104
104
|
end
|
105
|
-
assert(false,
|
105
|
+
assert(false, '*** expected an exception')
|
106
106
|
end
|
107
107
|
|
108
108
|
def test_string
|
@@ -115,15 +115,11 @@ class StrictJuice < Minitest::Test
|
|
115
115
|
def test_encode
|
116
116
|
opts = Oj.default_options
|
117
117
|
Oj.default_options = { :ascii_only => false }
|
118
|
-
|
119
|
-
dump_and_load("ぴーたー", false)
|
120
|
-
end
|
118
|
+
dump_and_load('ぴーたー', false)
|
121
119
|
Oj.default_options = { :ascii_only => true }
|
122
|
-
json = Oj.dump(
|
120
|
+
json = Oj.dump('ぴーたー')
|
123
121
|
assert_equal(%{"\\u3074\\u30fc\\u305f\\u30fc"}, json)
|
124
|
-
|
125
|
-
dump_and_load("ぴーたー", false)
|
126
|
-
end
|
122
|
+
dump_and_load('ぴーたー', false)
|
127
123
|
Oj.default_options = opts
|
128
124
|
end
|
129
125
|
|
@@ -152,17 +148,17 @@ class StrictJuice < Minitest::Test
|
|
152
148
|
end
|
153
149
|
|
154
150
|
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)
|
151
|
+
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
152
|
end
|
157
153
|
|
158
154
|
def test_deep_nest
|
159
155
|
skip 'TruffleRuby causes SEGV' if RUBY_ENGINE == 'truffleruby'
|
160
156
|
|
161
157
|
begin
|
162
|
-
n =
|
163
|
-
Oj.strict_load('[' * n + ']' * n)
|
158
|
+
n = 10_000
|
159
|
+
Oj.strict_load(('[' * n) + (']' * n))
|
164
160
|
rescue Exception => e
|
165
|
-
|
161
|
+
refute(e.message)
|
166
162
|
end
|
167
163
|
end
|
168
164
|
|
@@ -209,7 +205,7 @@ class StrictJuice < Minitest::Test
|
|
209
205
|
assert(true)
|
210
206
|
return
|
211
207
|
end
|
212
|
-
assert(false,
|
208
|
+
assert(false, '*** expected an exception')
|
213
209
|
end
|
214
210
|
|
215
211
|
def test_bignum_object
|
@@ -238,7 +234,7 @@ class StrictJuice < Minitest::Test
|
|
238
234
|
assert(true)
|
239
235
|
return
|
240
236
|
end
|
241
|
-
assert(false,
|
237
|
+
assert(false, '*** expected an exception')
|
242
238
|
end
|
243
239
|
|
244
240
|
def test_range
|
@@ -248,7 +244,7 @@ class StrictJuice < Minitest::Test
|
|
248
244
|
assert(true)
|
249
245
|
return
|
250
246
|
end
|
251
|
-
assert(false,
|
247
|
+
assert(false, '*** expected an exception')
|
252
248
|
end
|
253
249
|
|
254
250
|
# Stream IO
|
@@ -265,13 +261,13 @@ class StrictJuice < Minitest::Test
|
|
265
261
|
end
|
266
262
|
|
267
263
|
def test_io_file
|
268
|
-
filename = File.join(
|
269
|
-
File.
|
264
|
+
filename = File.join(__dir__, 'open_file_test.json')
|
265
|
+
File.write(filename, %{{
|
270
266
|
"x":true,
|
271
267
|
"y":58,
|
272
268
|
"z": [1,2,3]
|
273
269
|
}
|
274
|
-
})
|
270
|
+
})
|
275
271
|
f = File.new(filename)
|
276
272
|
obj = Oj.strict_load(f)
|
277
273
|
f.close()
|
@@ -291,7 +287,7 @@ class StrictJuice < Minitest::Test
|
|
291
287
|
assert(true)
|
292
288
|
return
|
293
289
|
end
|
294
|
-
assert(false,
|
290
|
+
assert(false, '*** expected an exception')
|
295
291
|
end
|
296
292
|
|
297
293
|
def test_class
|
@@ -301,7 +297,7 @@ class StrictJuice < Minitest::Test
|
|
301
297
|
assert(true)
|
302
298
|
return
|
303
299
|
end
|
304
|
-
assert(false,
|
300
|
+
assert(false, '*** expected an exception')
|
305
301
|
end
|
306
302
|
|
307
303
|
def test_module
|
@@ -311,7 +307,7 @@ class StrictJuice < Minitest::Test
|
|
311
307
|
assert(true)
|
312
308
|
return
|
313
309
|
end
|
314
|
-
assert(false,
|
310
|
+
assert(false, '*** expected an exception')
|
315
311
|
end
|
316
312
|
|
317
313
|
# symbol_keys option
|
@@ -423,7 +419,7 @@ class StrictJuice < Minitest::Test
|
|
423
419
|
def dump_and_load(obj, trace=false)
|
424
420
|
json = Oj.dump(obj, :indent => 2)
|
425
421
|
puts json if trace
|
426
|
-
loaded = Oj.strict_load(json)
|
422
|
+
loaded = Oj.strict_load(json)
|
427
423
|
if obj.nil?
|
428
424
|
assert_nil(loaded)
|
429
425
|
else
|