oj 2.18.3 → 3.13.14
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 +5 -5
- data/CHANGELOG.md +1324 -0
- data/README.md +51 -204
- data/RELEASE_NOTES.md +61 -0
- data/ext/oj/buf.h +49 -72
- data/ext/oj/cache.c +326 -0
- data/ext/oj/cache.h +21 -0
- data/ext/oj/cache8.c +61 -64
- data/ext/oj/cache8.h +12 -39
- data/ext/oj/circarray.c +37 -68
- data/ext/oj/circarray.h +16 -42
- data/ext/oj/code.c +221 -0
- data/ext/oj/code.h +40 -0
- data/ext/oj/compat.c +231 -107
- data/ext/oj/custom.c +1125 -0
- data/ext/oj/debug.c +132 -0
- data/ext/oj/dump.c +935 -2513
- data/ext/oj/dump.h +108 -0
- data/ext/oj/dump_compat.c +936 -0
- data/ext/oj/dump_leaf.c +164 -0
- data/ext/oj/dump_object.c +761 -0
- data/ext/oj/dump_strict.c +410 -0
- data/ext/oj/encode.h +7 -42
- data/ext/oj/encoder.c +43 -0
- data/ext/oj/err.c +40 -54
- data/ext/oj/err.h +52 -46
- data/ext/oj/extconf.rb +21 -30
- data/ext/oj/fast.c +1097 -1080
- data/ext/oj/intern.c +301 -0
- data/ext/oj/intern.h +26 -0
- data/ext/oj/mimic_json.c +893 -0
- data/ext/oj/object.c +549 -620
- data/ext/oj/odd.c +155 -167
- data/ext/oj/odd.h +37 -63
- data/ext/oj/oj.c +1661 -2063
- data/ext/oj/oj.h +341 -270
- data/ext/oj/parse.c +974 -737
- data/ext/oj/parse.h +105 -97
- data/ext/oj/parser.c +1526 -0
- data/ext/oj/parser.h +90 -0
- data/ext/oj/rails.c +1504 -0
- data/ext/oj/rails.h +18 -0
- data/ext/oj/reader.c +141 -163
- data/ext/oj/reader.h +75 -113
- data/ext/oj/resolve.c +45 -93
- data/ext/oj/resolve.h +7 -34
- data/ext/oj/rxclass.c +143 -0
- data/ext/oj/rxclass.h +26 -0
- data/ext/oj/saj.c +447 -511
- data/ext/oj/saj2.c +348 -0
- data/ext/oj/scp.c +91 -138
- data/ext/oj/sparse.c +793 -644
- data/ext/oj/stream_writer.c +331 -0
- data/ext/oj/strict.c +145 -109
- data/ext/oj/string_writer.c +493 -0
- data/ext/oj/trace.c +72 -0
- data/ext/oj/trace.h +28 -0
- data/ext/oj/usual.c +1254 -0
- data/ext/oj/util.c +136 -0
- data/ext/oj/util.h +20 -0
- data/ext/oj/val_stack.c +62 -70
- data/ext/oj/val_stack.h +95 -129
- data/ext/oj/validate.c +51 -0
- data/ext/oj/wab.c +622 -0
- data/lib/oj/bag.rb +1 -0
- data/lib/oj/easy_hash.rb +17 -8
- data/lib/oj/error.rb +10 -11
- data/lib/oj/json.rb +176 -0
- data/lib/oj/mimic.rb +158 -19
- data/lib/oj/state.rb +132 -0
- data/lib/oj/version.rb +2 -2
- data/lib/oj.rb +1 -31
- data/pages/Advanced.md +22 -0
- data/pages/Compatibility.md +25 -0
- data/pages/Custom.md +23 -0
- data/pages/Encoding.md +65 -0
- data/pages/JsonGem.md +94 -0
- data/pages/Modes.md +161 -0
- data/pages/Options.md +327 -0
- data/pages/Parser.md +309 -0
- data/pages/Rails.md +167 -0
- data/pages/Security.md +20 -0
- data/pages/WAB.md +13 -0
- data/test/activerecord/result_test.rb +32 -0
- data/test/activesupport4/decoding_test.rb +108 -0
- data/test/activesupport4/encoding_test.rb +531 -0
- data/test/activesupport4/test_helper.rb +41 -0
- data/test/activesupport5/abstract_unit.rb +45 -0
- data/test/activesupport5/decoding_test.rb +133 -0
- data/test/activesupport5/encoding_test.rb +500 -0
- data/test/activesupport5/encoding_test_cases.rb +98 -0
- data/test/activesupport5/test_helper.rb +72 -0
- data/test/activesupport5/time_zone_test_helpers.rb +39 -0
- data/test/activesupport6/abstract_unit.rb +44 -0
- data/test/activesupport6/decoding_test.rb +133 -0
- data/test/activesupport6/encoding_test.rb +507 -0
- data/test/activesupport6/encoding_test_cases.rb +98 -0
- data/test/activesupport6/test_common.rb +17 -0
- data/test/activesupport6/test_helper.rb +163 -0
- data/test/activesupport6/time_zone_test_helpers.rb +39 -0
- data/test/activesupport7/abstract_unit.rb +49 -0
- data/test/activesupport7/decoding_test.rb +125 -0
- data/test/activesupport7/encoding_test.rb +486 -0
- data/test/activesupport7/encoding_test_cases.rb +104 -0
- data/test/activesupport7/time_zone_test_helpers.rb +47 -0
- data/test/bar.rb +9 -0
- data/test/baz.rb +16 -0
- data/test/bug.rb +11 -46
- data/test/foo.rb +69 -16
- data/test/helper.rb +10 -1
- data/test/isolated/shared.rb +12 -8
- data/test/isolated/test_mimic_rails_after.rb +3 -3
- data/test/isolated/test_mimic_rails_before.rb +3 -3
- data/test/json_gem/json_addition_test.rb +216 -0
- data/test/json_gem/json_common_interface_test.rb +153 -0
- data/test/json_gem/json_encoding_test.rb +107 -0
- data/test/json_gem/json_ext_parser_test.rb +20 -0
- data/test/json_gem/json_fixtures_test.rb +35 -0
- data/test/json_gem/json_generator_test.rb +397 -0
- data/test/json_gem/json_generic_object_test.rb +90 -0
- data/test/json_gem/json_parser_test.rb +470 -0
- data/test/json_gem/json_string_matching_test.rb +42 -0
- data/test/json_gem/test_helper.rb +26 -0
- data/test/mem.rb +33 -0
- data/test/perf.rb +1 -1
- data/test/perf_compat.rb +30 -28
- data/test/perf_dump.rb +50 -0
- data/test/perf_object.rb +1 -1
- data/test/perf_once.rb +58 -0
- data/test/perf_parser.rb +189 -0
- data/test/perf_scp.rb +11 -10
- data/test/perf_strict.rb +30 -19
- data/test/perf_wab.rb +131 -0
- data/test/prec.rb +23 -0
- data/test/sample.rb +0 -1
- data/test/sample_json.rb +1 -1
- data/test/test_compat.rb +219 -102
- data/test/test_custom.rb +533 -0
- data/test/test_fast.rb +107 -35
- data/test/test_file.rb +19 -25
- data/test/test_generate.rb +21 -0
- data/test/test_hash.rb +11 -1
- data/test/test_integer_range.rb +72 -0
- data/test/test_null.rb +376 -0
- data/test/test_object.rb +357 -70
- data/test/test_parser.rb +27 -0
- data/test/test_parser_saj.rb +245 -0
- data/test/test_parser_usual.rb +217 -0
- data/test/test_rails.rb +35 -0
- data/test/test_saj.rb +1 -1
- data/test/test_scp.rb +39 -2
- data/test/test_strict.rb +186 -7
- data/test/test_various.rb +160 -774
- data/test/test_wab.rb +307 -0
- data/test/test_writer.rb +90 -2
- data/test/tests.rb +24 -0
- data/test/tests_mimic.rb +14 -0
- data/test/tests_mimic_addition.rb +7 -0
- data/test/zoo.rb +13 -0
- metadata +194 -56
- data/ext/oj/hash.c +0 -163
- data/ext/oj/hash.h +0 -46
- data/ext/oj/hash_test.c +0 -512
- data/test/activesupport_datetime_test.rb +0 -23
- data/test/bug2.rb +0 -10
- data/test/bug3.rb +0 -46
- data/test/bug_fast.rb +0 -32
- data/test/bug_load.rb +0 -24
- data/test/crash.rb +0 -111
- data/test/curl/curl_oj.rb +0 -46
- data/test/curl/get_oj.rb +0 -24
- data/test/curl/just_curl.rb +0 -31
- data/test/curl/just_oj.rb +0 -51
- data/test/example.rb +0 -11
- data/test/io.rb +0 -48
- data/test/isolated/test_mimic_rails_datetime.rb +0 -27
- data/test/mod.rb +0 -16
- data/test/rails.rb +0 -50
- data/test/russian.rb +0 -18
- data/test/struct.rb +0 -29
- data/test/test_serializer.rb +0 -59
- data/test/write_timebars.rb +0 -31
data/test/test_compat.rb
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
-
# encoding:
|
|
2
|
+
# encoding: utf-8
|
|
3
3
|
|
|
4
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
|
|
5
9
|
|
|
6
|
-
require '
|
|
10
|
+
require 'minitest'
|
|
11
|
+
require 'minitest/autorun'
|
|
12
|
+
require 'stringio'
|
|
13
|
+
require 'date'
|
|
14
|
+
require 'bigdecimal'
|
|
15
|
+
require 'oj'
|
|
7
16
|
|
|
8
17
|
class CompatJuice < Minitest::Test
|
|
9
18
|
|
|
@@ -20,8 +29,8 @@ class CompatJuice < Minitest::Test
|
|
|
20
29
|
end
|
|
21
30
|
alias == eql?
|
|
22
31
|
|
|
23
|
-
def
|
|
24
|
-
{"json_class"
|
|
32
|
+
def to_json(*a)
|
|
33
|
+
%|{"json_class":"#{self.class.to_s}","x":#{@x},"y":#{@y}}|
|
|
25
34
|
end
|
|
26
35
|
|
|
27
36
|
def self.json_create(h)
|
|
@@ -29,6 +38,24 @@ class CompatJuice < Minitest::Test
|
|
|
29
38
|
end
|
|
30
39
|
end # Jeez
|
|
31
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
|
+
|
|
32
59
|
module One
|
|
33
60
|
module Two
|
|
34
61
|
module Three
|
|
@@ -42,12 +69,8 @@ class CompatJuice < Minitest::Test
|
|
|
42
69
|
end
|
|
43
70
|
alias == eql?
|
|
44
71
|
|
|
45
|
-
def to_hash()
|
|
46
|
-
{'json_class' => "#{self.class.name}"}
|
|
47
|
-
end
|
|
48
|
-
|
|
49
72
|
def to_json(*a)
|
|
50
|
-
|
|
73
|
+
%|{"json_class":"#{self.class.name}"}|
|
|
51
74
|
end
|
|
52
75
|
|
|
53
76
|
def self.json_create(h)
|
|
@@ -60,6 +83,9 @@ class CompatJuice < Minitest::Test
|
|
|
60
83
|
|
|
61
84
|
def setup
|
|
62
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 }
|
|
63
89
|
end
|
|
64
90
|
|
|
65
91
|
def teardown
|
|
@@ -87,6 +113,8 @@ class CompatJuice < Minitest::Test
|
|
|
87
113
|
|
|
88
114
|
def test_float
|
|
89
115
|
dump_and_load(0.0, false)
|
|
116
|
+
dump_and_load(0.56, false)
|
|
117
|
+
dump_and_load(3.0, false)
|
|
90
118
|
dump_and_load(12345.6789, false)
|
|
91
119
|
dump_and_load(70.35, false)
|
|
92
120
|
dump_and_load(-54321.012, false)
|
|
@@ -95,6 +123,19 @@ class CompatJuice < Minitest::Test
|
|
|
95
123
|
dump_and_load(2.48e16, false)
|
|
96
124
|
dump_and_load(2.48e100 * 1.0e10, false)
|
|
97
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)
|
|
98
139
|
end
|
|
99
140
|
|
|
100
141
|
def test_string
|
|
@@ -106,16 +147,9 @@ class CompatJuice < Minitest::Test
|
|
|
106
147
|
|
|
107
148
|
def test_encode
|
|
108
149
|
opts = Oj.default_options
|
|
109
|
-
Oj.default_options = { :ascii_only => false }
|
|
110
|
-
unless 'jruby' == $ruby
|
|
111
|
-
dump_and_load("ぴーたー", false)
|
|
112
|
-
end
|
|
113
150
|
Oj.default_options = { :ascii_only => true }
|
|
114
151
|
json = Oj.dump("ぴーたー")
|
|
115
152
|
assert_equal(%{"\\u3074\\u30fc\\u305f\\u30fc"}, json)
|
|
116
|
-
unless 'jruby' == $ruby
|
|
117
|
-
dump_and_load("ぴーたー", false)
|
|
118
|
-
end
|
|
119
153
|
Oj.default_options = opts
|
|
120
154
|
end
|
|
121
155
|
|
|
@@ -139,7 +173,34 @@ class CompatJuice < Minitest::Test
|
|
|
139
173
|
dump_and_load([1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,[15,[16,[17,[18,[19,[20]]]]]]]]]]]]]]]]]]]], false)
|
|
140
174
|
end
|
|
141
175
|
|
|
176
|
+
def test_symbol
|
|
177
|
+
json = Oj.dump(:abc, :mode => :compat)
|
|
178
|
+
assert_equal('"abc"', json)
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def test_time_xml_schema
|
|
182
|
+
t = Time.xmlschema("2012-01-05T23:58:07.123456000+09:00")
|
|
183
|
+
#t = Time.local(2012, 1, 5, 23, 58, 7, 123456)
|
|
184
|
+
json = Oj.dump(t, :mode => :compat)
|
|
185
|
+
assert_equal(%{"2012-01-05 23:58:07 +0900"}, json)
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def test_class
|
|
189
|
+
json = Oj.dump(CompatJuice, :mode => :compat)
|
|
190
|
+
assert_equal(%{"CompatJuice"}, json)
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def test_module
|
|
194
|
+
json = Oj.dump(One::Two, :mode => :compat)
|
|
195
|
+
assert_equal(%{"CompatJuice::One::Two"}, json)
|
|
196
|
+
end
|
|
197
|
+
|
|
142
198
|
# Hash
|
|
199
|
+
def test_non_str_hash
|
|
200
|
+
json = Oj.dump({ 1 => true, 0 => false }, :mode => :compat)
|
|
201
|
+
h = Oj.load(json, :mode => :strict)
|
|
202
|
+
assert_equal({ "1" => true, "0" => false }, h)
|
|
203
|
+
end
|
|
143
204
|
def test_hash
|
|
144
205
|
dump_and_load({}, false)
|
|
145
206
|
dump_and_load({ 'true' => true, 'false' => false}, false)
|
|
@@ -175,83 +236,94 @@ class CompatJuice < Minitest::Test
|
|
|
175
236
|
assert_equal({"a\nb" => true, "c\td" => false}, obj)
|
|
176
237
|
end
|
|
177
238
|
|
|
239
|
+
def test_invalid_escapes_handled
|
|
240
|
+
json = '{"subtext":"\"404er\” \w \k \3 \a"}'
|
|
241
|
+
obj = Oj.compat_load(json)
|
|
242
|
+
assert_equal({"subtext" => "\"404er” w k 3 a"}, obj)
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
def test_hash_escaping
|
|
246
|
+
json = Oj.to_json({'<>' => '<>'}, mode: :compat)
|
|
247
|
+
assert_equal(json, '{"<>":"<>"}')
|
|
248
|
+
end
|
|
249
|
+
|
|
178
250
|
def test_bignum_object
|
|
179
251
|
dump_and_load(7 ** 55, false)
|
|
180
252
|
end
|
|
181
253
|
|
|
254
|
+
def test_json_object
|
|
255
|
+
obj = Jeez.new(true, 58)
|
|
256
|
+
json = Oj.to_json(obj)
|
|
257
|
+
assert(%|{"json_class":"CompatJuice::Jeez","x":true,"y":58}| == json ||
|
|
258
|
+
%|{"json_class":"CompatJuice::Jeez","y":58,"x":true}| == json)
|
|
259
|
+
dump_to_json_and_load(obj, false)
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
def test_json_object_create_id
|
|
263
|
+
Oj.default_options = { :create_id => 'kson_class', :create_additions => true}
|
|
264
|
+
expected = Jeez.new(true, 58)
|
|
265
|
+
json = %{{"kson_class":"CompatJuice::Jeez","x":true,"y":58}}
|
|
266
|
+
obj = Oj.load(json)
|
|
267
|
+
assert_equal(expected, obj)
|
|
268
|
+
Oj.default_options = { :create_id => 'json_class' }
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
def test_bignum_compat
|
|
272
|
+
json = Oj.dump(7 ** 55, :mode => :compat)
|
|
273
|
+
b = Oj.load(json, :mode => :strict)
|
|
274
|
+
assert_equal(30226801971775055948247051683954096612865741943, b)
|
|
275
|
+
end
|
|
276
|
+
|
|
182
277
|
# BigDecimal
|
|
183
|
-
def
|
|
184
|
-
|
|
278
|
+
def test_bigdecimal
|
|
279
|
+
# BigDecimals are dumped as strings and can not be restored to the
|
|
280
|
+
# original value without using an undocumented feature of the JSON gem.
|
|
281
|
+
json = Oj.dump(BigDecimal('3.14159265358979323846'))
|
|
282
|
+
# 2.4.0 changes the exponent to lowercase
|
|
283
|
+
assert_equal('"0.314159265358979323846e1"', json.downcase)
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
def test_decimal_class
|
|
287
|
+
big = BigDecimal('3.14159265358979323846')
|
|
288
|
+
# :decimal_class is the undocumented feature.
|
|
289
|
+
json = Oj.load('3.14159265358979323846', mode: :compat, decimal_class: BigDecimal)
|
|
290
|
+
assert_equal(big, json)
|
|
185
291
|
end
|
|
186
292
|
|
|
187
|
-
def
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
assert_equal(BigDecimal, bg.class)
|
|
192
|
-
assert_equal(orig, bg)
|
|
293
|
+
def test_infinity
|
|
294
|
+
assert_raises(Oj::ParseError) { Oj.load('Infinity', :mode => :strict) }
|
|
295
|
+
x = Oj.load('Infinity', :mode => :compat)
|
|
296
|
+
assert_equal('Infinity', x.to_s)
|
|
193
297
|
end
|
|
194
298
|
|
|
195
299
|
# Time
|
|
196
|
-
def
|
|
197
|
-
|
|
198
|
-
t = Time.parse('2015-01-05T21:37:07.123456-08:00')
|
|
199
|
-
else
|
|
200
|
-
t = Time.new(2015, 1, 5, 21, 37, 7.123456, -8 * 3600)
|
|
201
|
-
end
|
|
300
|
+
def test_time_from_time_object
|
|
301
|
+
t = Time.new(2015, 1, 5, 21, 37, 7.123456, -8 * 3600)
|
|
202
302
|
expect = '"' + t.to_s + '"'
|
|
203
|
-
json = Oj.dump(t
|
|
303
|
+
json = Oj.dump(t)
|
|
204
304
|
assert_equal(expect, json)
|
|
205
305
|
end
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
t = Time.new(2015, 1, 5, 21, 37, 7.123456, 12345)
|
|
218
|
-
json = Oj.dump(t, :mode => :compat, :time_format => :xmlschema, :second_precision => 6)
|
|
219
|
-
assert_equal('"2015-01-05T21:37:07.123456+03:25"', json)
|
|
220
|
-
end
|
|
221
|
-
end
|
|
222
|
-
def test_time_unix
|
|
223
|
-
if RUBY_VERSION.start_with?('1.8')
|
|
224
|
-
t = Time.parse('2015-01-05T21:37:07.123456-08:00')
|
|
225
|
-
else
|
|
226
|
-
t = Time.new(2015, 1, 5, 21, 37, 7.123456, -8 * 3600)
|
|
227
|
-
end
|
|
228
|
-
json = Oj.dump(t, :mode => :compat, :time_format => :unix, :second_precision => 6)
|
|
229
|
-
assert_equal('1420522627.123456', json)
|
|
230
|
-
end
|
|
231
|
-
def test_time_unix_zone
|
|
232
|
-
if RUBY_VERSION.start_with?('1.8')
|
|
233
|
-
t = Time.parse('2015-01-05T21:37:07.123456-08:00')
|
|
234
|
-
else
|
|
235
|
-
t = Time.new(2015, 1, 5, 21, 37, 7.123456, -8 * 3600)
|
|
236
|
-
end
|
|
237
|
-
json = Oj.dump(t, :mode => :compat, :time_format => :unix_zone, :second_precision => 6)
|
|
238
|
-
assert_equal('1420522627.123456e-28800', json)
|
|
239
|
-
end
|
|
240
|
-
unless RUBY_VERSION.start_with?('1.8')
|
|
241
|
-
def test_time_unix_zone_12345
|
|
242
|
-
t = Time.new(2015, 1, 5, 21, 37, 7.123456, 12345)
|
|
243
|
-
json = Oj.dump(t, :mode => :compat, :time_format => :unix_zone, :second_precision => 6)
|
|
244
|
-
assert_equal('1420481482.123456e12345', json)
|
|
306
|
+
|
|
307
|
+
def test_date_compat
|
|
308
|
+
orig = Date.new(2012, 6, 19)
|
|
309
|
+
json = Oj.dump(orig, :mode => :compat)
|
|
310
|
+
x = Oj.load(json, :mode => :compat)
|
|
311
|
+
# Some Rubies implement Date as data and some as a real Object. Either are
|
|
312
|
+
# okay for the test.
|
|
313
|
+
if x.is_a?(String)
|
|
314
|
+
assert_equal(orig.to_s, x)
|
|
315
|
+
else # better be a Hash
|
|
316
|
+
assert_equal({"year" => orig.year, "month" => orig.month, "day" => orig.day, "start" => orig.start}, x)
|
|
245
317
|
end
|
|
246
318
|
end
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
assert_equal(
|
|
319
|
+
|
|
320
|
+
def test_datetime_compat
|
|
321
|
+
orig = DateTime.new(2012, 6, 19, 20, 19, 27)
|
|
322
|
+
json = Oj.dump(orig, :mode => :compat)
|
|
323
|
+
x = Oj.load(json, :mode => :compat)
|
|
324
|
+
# Some Rubies implement Date as data and some as a real Object. Either are
|
|
325
|
+
# okay for the test.
|
|
326
|
+
assert_equal(orig.to_s, x)
|
|
255
327
|
end
|
|
256
328
|
|
|
257
329
|
# Stream IO
|
|
@@ -329,69 +401,114 @@ class CompatJuice < Minitest::Test
|
|
|
329
401
|
assert_equal({ 'x' => true, 'y' => 58, 'z' => [1, 2, 3]}, obj)
|
|
330
402
|
end
|
|
331
403
|
|
|
332
|
-
|
|
404
|
+
# If mimic_JSON has not been called then Oj.dump will call to_json on the
|
|
405
|
+
# top level object only.
|
|
406
|
+
def test_json_object_top
|
|
333
407
|
obj = Jeez.new(true, 58)
|
|
334
|
-
|
|
335
|
-
|
|
408
|
+
dump_to_json_and_load(obj, false)
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
# A child to_json should not be called.
|
|
412
|
+
def test_json_object_child
|
|
413
|
+
obj = { "child" => Jeez.new(true, 58) }
|
|
414
|
+
assert_equal('{"child":{"json_class":"CompatJuice::Jeez","x":true,"y":58}}', Oj.dump(obj))
|
|
336
415
|
end
|
|
337
416
|
|
|
338
417
|
def test_json_module_object
|
|
339
|
-
Oj.default_options = { :mode => :compat, :use_as_json => true, :use_to_json => true }
|
|
340
418
|
obj = One::Two::Three::Deep.new()
|
|
341
|
-
|
|
419
|
+
dump_to_json_and_load(obj, false)
|
|
342
420
|
end
|
|
343
421
|
|
|
344
|
-
def
|
|
345
|
-
Oj.default_options = { :mode => :compat, :use_as_json => false, :use_to_json => false }
|
|
422
|
+
def test_json_object_dump_create_id
|
|
346
423
|
expected = Jeez.new(true, 58)
|
|
347
|
-
json = Oj.
|
|
348
|
-
obj = Oj.compat_load(json)
|
|
424
|
+
json = Oj.to_json(expected)
|
|
425
|
+
obj = Oj.compat_load(json, :create_additions => true)
|
|
349
426
|
assert_equal(expected, obj)
|
|
350
427
|
end
|
|
351
428
|
|
|
352
429
|
def test_json_object_bad
|
|
353
430
|
json = %{{"json_class":"CompatJuice::Junk","x":true}}
|
|
354
431
|
begin
|
|
355
|
-
Oj.compat_load(json)
|
|
432
|
+
Oj.compat_load(json, :create_additions => true)
|
|
356
433
|
rescue Exception => e
|
|
357
|
-
assert_equal("
|
|
434
|
+
assert_equal("ArgumentError", e.class().name)
|
|
358
435
|
return
|
|
359
436
|
end
|
|
360
437
|
assert(false, "*** expected an exception")
|
|
361
438
|
end
|
|
362
439
|
|
|
363
440
|
def test_json_object_create_cache
|
|
364
|
-
Oj.default_options = { :mode => :compat, :use_as_json => true, :use_to_json => true }
|
|
365
441
|
expected = Jeez.new(true, 58)
|
|
366
|
-
json = Oj.
|
|
367
|
-
obj = Oj.compat_load(json, :class_cache => true)
|
|
442
|
+
json = Oj.to_json(expected)
|
|
443
|
+
obj = Oj.compat_load(json, :class_cache => true, :create_additions => true)
|
|
368
444
|
assert_equal(expected, obj)
|
|
369
|
-
obj = Oj.compat_load(json, :class_cache => false)
|
|
445
|
+
obj = Oj.compat_load(json, :class_cache => false, :create_additions => true)
|
|
370
446
|
assert_equal(expected, obj)
|
|
371
447
|
end
|
|
372
448
|
|
|
373
449
|
def test_json_object_create_id_other
|
|
374
|
-
Oj.default_options = { :mode => :compat, :use_as_json => false, :use_to_json => false }
|
|
375
450
|
expected = Jeez.new(true, 58)
|
|
376
|
-
json = Oj.
|
|
451
|
+
json = Oj.to_json(expected)
|
|
377
452
|
json.gsub!('json_class', '_class_')
|
|
378
|
-
obj = Oj.compat_load(json, :create_id => "_class_")
|
|
453
|
+
obj = Oj.compat_load(json, :create_id => "_class_", :create_additions => true)
|
|
379
454
|
assert_equal(expected, obj)
|
|
380
455
|
end
|
|
381
456
|
|
|
382
457
|
def test_json_object_create_deep
|
|
383
|
-
Oj.default_options = { :mode => :compat, :use_as_json => true, :use_to_json => true }
|
|
384
458
|
expected = One::Two::Three::Deep.new()
|
|
385
|
-
json = Oj.
|
|
386
|
-
obj = Oj.compat_load(json)
|
|
459
|
+
json = Oj.to_json(expected)
|
|
460
|
+
obj = Oj.compat_load(json, :create_additions => true)
|
|
387
461
|
assert_equal(expected, obj)
|
|
388
462
|
end
|
|
389
463
|
|
|
464
|
+
def test_range
|
|
465
|
+
json = Oj.dump(1..7)
|
|
466
|
+
assert_equal('"1..7"', json)
|
|
467
|
+
end
|
|
468
|
+
|
|
469
|
+
def test_arg_passing
|
|
470
|
+
json = Oj.to_json(Argy.new(), :max_nesting=> 40)
|
|
471
|
+
assert_equal(%|{"args":"[{:max_nesting=>40}]"}|, json)
|
|
472
|
+
end
|
|
473
|
+
|
|
474
|
+
def test_bad_unicode
|
|
475
|
+
assert_raises() { Oj.to_json("\xE4xy") }
|
|
476
|
+
end
|
|
477
|
+
|
|
478
|
+
def test_bad_unicode_e2
|
|
479
|
+
assert_raises() { Oj.to_json("L\xE2m ") }
|
|
480
|
+
end
|
|
481
|
+
|
|
482
|
+
def test_bad_unicode_start
|
|
483
|
+
assert_raises() { Oj.to_json("\x8abc") }
|
|
484
|
+
end
|
|
485
|
+
|
|
486
|
+
def test_parse_to_s
|
|
487
|
+
s = Stringy.new
|
|
488
|
+
assert_equal([1,2], Oj.load(s, :mode => :compat))
|
|
489
|
+
end
|
|
490
|
+
|
|
390
491
|
def dump_and_load(obj, trace=false)
|
|
391
|
-
json = Oj.dump(obj
|
|
492
|
+
json = Oj.dump(obj)
|
|
493
|
+
puts json if trace
|
|
494
|
+
loaded = Oj.compat_load(json, :create_additions => true);
|
|
495
|
+
if obj.nil?
|
|
496
|
+
assert_nil(loaded)
|
|
497
|
+
else
|
|
498
|
+
assert_equal(obj, loaded)
|
|
499
|
+
end
|
|
500
|
+
loaded
|
|
501
|
+
end
|
|
502
|
+
|
|
503
|
+
def dump_to_json_and_load(obj, trace=false)
|
|
504
|
+
json = Oj.to_json(obj, :indent => ' ')
|
|
392
505
|
puts json if trace
|
|
393
|
-
loaded = Oj.compat_load(json);
|
|
394
|
-
|
|
506
|
+
loaded = Oj.compat_load(json, :create_additions => true);
|
|
507
|
+
if obj.nil?
|
|
508
|
+
assert_nil(loaded)
|
|
509
|
+
else
|
|
510
|
+
assert_equal(obj, loaded)
|
|
511
|
+
end
|
|
395
512
|
loaded
|
|
396
513
|
end
|
|
397
514
|
|