oj 3.16.9 → 3.16.10
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 +5 -0
- data/ext/oj/fast.c +3 -6
- data/ext/oj/mimic_json.c +3 -6
- data/ext/oj/oj.c +2 -4
- data/ext/oj/parse.c +15 -5
- data/ext/oj/parser.c +1 -1
- data/ext/oj/parser.h +2 -0
- data/ext/oj/rails.c +1 -2
- data/ext/oj/saj.c +3 -6
- data/ext/oj/scp.c +3 -6
- data/ext/oj/stream_writer.c +1 -7
- data/ext/oj/strict.c +2 -4
- data/ext/oj/string_writer.c +1 -3
- data/lib/oj/version.rb +1 -1
- metadata +3 -98
- data/test/_test_active.rb +0 -75
- data/test/_test_active_mimic.rb +0 -95
- data/test/_test_mimic_rails.rb +0 -123
- data/test/activerecord/result_test.rb +0 -31
- data/test/activesupport6/abstract_unit.rb +0 -44
- data/test/activesupport6/decoding_test.rb +0 -133
- data/test/activesupport6/encoding_test.rb +0 -542
- data/test/activesupport6/encoding_test_cases.rb +0 -98
- data/test/activesupport6/test_common.rb +0 -17
- data/test/activesupport6/test_helper.rb +0 -163
- data/test/activesupport6/time_zone_test_helpers.rb +0 -39
- data/test/activesupport7/abstract_unit.rb +0 -52
- data/test/activesupport7/decoding_test.rb +0 -125
- data/test/activesupport7/encoding_test.rb +0 -536
- data/test/activesupport7/encoding_test_cases.rb +0 -104
- data/test/activesupport7/time_zone_test_helpers.rb +0 -47
- data/test/files.rb +0 -29
- data/test/foo.rb +0 -26
- data/test/helper.rb +0 -39
- data/test/isolated/shared.rb +0 -309
- data/test/isolated/test_mimic_after.rb +0 -13
- data/test/isolated/test_mimic_alone.rb +0 -12
- data/test/isolated/test_mimic_as_json.rb +0 -45
- data/test/isolated/test_mimic_before.rb +0 -13
- data/test/isolated/test_mimic_define.rb +0 -28
- data/test/isolated/test_mimic_rails_after.rb +0 -22
- data/test/isolated/test_mimic_rails_before.rb +0 -21
- data/test/isolated/test_mimic_redefine.rb +0 -15
- data/test/json_gem/json_addition_test.rb +0 -216
- data/test/json_gem/json_common_interface_test.rb +0 -155
- data/test/json_gem/json_encoding_test.rb +0 -107
- data/test/json_gem/json_ext_parser_test.rb +0 -21
- data/test/json_gem/json_fixtures_test.rb +0 -36
- data/test/json_gem/json_generator_test.rb +0 -413
- data/test/json_gem/json_generic_object_test.rb +0 -90
- data/test/json_gem/json_parser_test.rb +0 -477
- data/test/json_gem/json_string_matching_test.rb +0 -42
- data/test/json_gem/test_helper.rb +0 -30
- data/test/mem.rb +0 -34
- data/test/perf.rb +0 -102
- data/test/perf_compat.rb +0 -128
- data/test/perf_dump.rb +0 -50
- data/test/perf_fast.rb +0 -162
- data/test/perf_file.rb +0 -62
- data/test/perf_object.rb +0 -134
- data/test/perf_once.rb +0 -59
- data/test/perf_parser.rb +0 -183
- data/test/perf_saj.rb +0 -101
- data/test/perf_scp.rb +0 -140
- data/test/perf_simple.rb +0 -289
- data/test/perf_strict.rb +0 -137
- data/test/perf_wab.rb +0 -129
- data/test/prec.rb +0 -23
- data/test/sample/change.rb +0 -13
- data/test/sample/dir.rb +0 -18
- data/test/sample/doc.rb +0 -35
- data/test/sample/file.rb +0 -47
- data/test/sample/group.rb +0 -15
- data/test/sample/hasprops.rb +0 -15
- data/test/sample/layer.rb +0 -11
- data/test/sample/line.rb +0 -20
- data/test/sample/oval.rb +0 -10
- data/test/sample/rect.rb +0 -9
- data/test/sample/shape.rb +0 -34
- data/test/sample/text.rb +0 -19
- data/test/sample.rb +0 -54
- data/test/sample_json.rb +0 -37
- data/test/test_compat.rb +0 -567
- data/test/test_custom.rb +0 -555
- data/test/test_debian.rb +0 -50
- data/test/test_fast.rb +0 -526
- data/test/test_file.rb +0 -250
- data/test/test_gc.rb +0 -60
- data/test/test_generate.rb +0 -21
- data/test/test_hash.rb +0 -39
- data/test/test_integer_range.rb +0 -72
- data/test/test_null.rb +0 -376
- data/test/test_object.rb +0 -1030
- data/test/test_parser.rb +0 -11
- data/test/test_parser_debug.rb +0 -27
- data/test/test_parser_saj.rb +0 -337
- data/test/test_parser_usual.rb +0 -255
- data/test/test_rails.rb +0 -35
- data/test/test_saj.rb +0 -188
- data/test/test_scp.rb +0 -431
- data/test/test_strict.rb +0 -441
- data/test/test_various.rb +0 -801
- data/test/test_wab.rb +0 -311
- data/test/test_writer.rb +0 -396
- data/test/tests.rb +0 -33
- data/test/tests_mimic.rb +0 -23
- data/test/tests_mimic_addition.rb +0 -16
data/test/_test_mimic_rails.rb
DELETED
@@ -1,123 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
$LOAD_PATH << __dir__
|
5
|
-
|
6
|
-
require 'helper'
|
7
|
-
# Oj.mimic_JSON
|
8
|
-
require 'rails/all'
|
9
|
-
|
10
|
-
require 'active_model'
|
11
|
-
require 'active_model_serializers'
|
12
|
-
require 'active_support/json'
|
13
|
-
require 'active_support/time'
|
14
|
-
require 'active_support/all'
|
15
|
-
|
16
|
-
require 'oj/active_support_helper'
|
17
|
-
|
18
|
-
Oj.mimic_JSON
|
19
|
-
|
20
|
-
class Category
|
21
|
-
include ActiveModel::Model
|
22
|
-
include ActiveModel::SerializerSupport
|
23
|
-
|
24
|
-
attr_accessor :id, :name
|
25
|
-
|
26
|
-
def initialize(id, name)
|
27
|
-
@id = id
|
28
|
-
@name = name
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
class CategorySerializer < ActiveModel::Serializer
|
33
|
-
attributes :id, :name
|
34
|
-
end
|
35
|
-
|
36
|
-
class MimicRails < Minitest::Test
|
37
|
-
|
38
|
-
def test_mimic_exception
|
39
|
-
ActiveSupport::JSON.decode('{')
|
40
|
-
puts 'Failed'
|
41
|
-
rescue ActiveSupport::JSON.parse_error
|
42
|
-
assert(true)
|
43
|
-
rescue Exception
|
44
|
-
assert(false, 'Expected a JSON::ParserError')
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_dump_string
|
48
|
-
Oj.default_options= {:indent => 2}
|
49
|
-
json = ActiveSupport::JSON.encode([1, true, nil])
|
50
|
-
assert_equal(%{[
|
51
|
-
1,
|
52
|
-
true,
|
53
|
-
null
|
54
|
-
]
|
55
|
-
}, json)
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_dump_rational
|
59
|
-
Oj.default_options= {:indent => 2}
|
60
|
-
json = ActiveSupport::JSON.encode([1, true, Rational(1)])
|
61
|
-
assert_equal(%{[
|
62
|
-
1,
|
63
|
-
true,
|
64
|
-
"1/1"
|
65
|
-
]
|
66
|
-
}, json)
|
67
|
-
end
|
68
|
-
|
69
|
-
def test_dump_range
|
70
|
-
Oj.default_options= {:indent => 2}
|
71
|
-
json = ActiveSupport::JSON.encode([1, true, '01'..'12'])
|
72
|
-
assert_equal(%{[
|
73
|
-
1,
|
74
|
-
true,
|
75
|
-
"01..12"
|
76
|
-
]
|
77
|
-
}, json)
|
78
|
-
end
|
79
|
-
|
80
|
-
def test_dump_object
|
81
|
-
Oj.default_options= {:indent => 2}
|
82
|
-
category = Category.new(1, 'test')
|
83
|
-
serializer = CategorySerializer.new(category)
|
84
|
-
|
85
|
-
serializer.to_json()
|
86
|
-
puts "*** serializer.to_json() #{serializer.to_json()}"
|
87
|
-
serializer.as_json()
|
88
|
-
puts "*** serializer.as_json() #{serializer.as_json()}"
|
89
|
-
JSON.dump(serializer)
|
90
|
-
puts "*** JSON.dump(serializer) #{JSON.dump(serializer)}"
|
91
|
-
|
92
|
-
puts "*** category.to_json() #{category.to_json()}"
|
93
|
-
puts "*** category.as_json() #{category.as_json()}"
|
94
|
-
puts "*** JSON.dump(serializer) #{JSON.dump(category)}"
|
95
|
-
puts "*** Oj.dump(serializer) #{Oj.dump(category)}"
|
96
|
-
end
|
97
|
-
|
98
|
-
def test_dump_object_array
|
99
|
-
Oj.default_options= {:indent => 2}
|
100
|
-
cat1 = Category.new(1, 'test')
|
101
|
-
cat2 = Category.new(2, 'test')
|
102
|
-
a = Array.wrap([cat1, cat2])
|
103
|
-
|
104
|
-
# serializer = CategorySerializer.new(a)
|
105
|
-
|
106
|
-
puts "*** a.to_json() #{a.to_json()}"
|
107
|
-
puts "*** a.as_json() #{a.as_json()}"
|
108
|
-
puts "*** JSON.dump(a) #{JSON.dump(a)}"
|
109
|
-
puts "*** Oj.dump(a) #{Oj.dump(a)}"
|
110
|
-
end
|
111
|
-
|
112
|
-
def test_dump_time
|
113
|
-
Oj.default_options= {:indent => 2}
|
114
|
-
now = ActiveSupport::TimeZone['America/Chicago'].parse('2014-11-01 13:20:47')
|
115
|
-
json = Oj.dump(now, mode: :object, time_format: :xmlschema)
|
116
|
-
# puts "*** json: #{json}"
|
117
|
-
|
118
|
-
oj_dump = Oj.load(json, mode: :object, time_format: :xmlschema)
|
119
|
-
# puts "Now: #{now}\n Oj: #{oj_dump}"
|
120
|
-
assert_equal('2014-11-01T13:20:47-05:00', oj_dump.xmlschema)
|
121
|
-
end
|
122
|
-
|
123
|
-
end # MimicRails
|
@@ -1,31 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
$: << File.dirname(__FILE__)
|
4
|
-
$: << File.dirname(File.dirname(__FILE__))
|
5
|
-
|
6
|
-
require 'helper'
|
7
|
-
require "rails/all"
|
8
|
-
|
9
|
-
Oj::Rails.set_encoder()
|
10
|
-
Oj::Rails.optimize()
|
11
|
-
|
12
|
-
Oj.default_options = { mode: :rails }
|
13
|
-
|
14
|
-
class ActiveRecordResultTest < Minitest::Test
|
15
|
-
def test_hash_rows
|
16
|
-
result = ActiveRecord::Result.new(["one", "two"],
|
17
|
-
[
|
18
|
-
["row 1 col 1", "row 1 col 2"],
|
19
|
-
["row 2 col 1", "row 2 col 2"],
|
20
|
-
["row 3 col 1", "row 3 col 2"],
|
21
|
-
])
|
22
|
-
#puts "*** result: #{Oj.dump(result, indent: 2)}"
|
23
|
-
json_result = if ActiveRecord.version >= Gem::Version.new("6")
|
24
|
-
result.to_a
|
25
|
-
else
|
26
|
-
result.to_hash
|
27
|
-
end
|
28
|
-
|
29
|
-
assert_equal Oj.dump(result, mode: :rails), Oj.dump(json_result)
|
30
|
-
end
|
31
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
ORIG_ARGV = ARGV.dup
|
4
|
-
|
5
|
-
require "active_support/core_ext/kernel/reporting"
|
6
|
-
|
7
|
-
silence_warnings do
|
8
|
-
Encoding.default_internal = Encoding::UTF_8
|
9
|
-
Encoding.default_external = Encoding::UTF_8
|
10
|
-
end
|
11
|
-
|
12
|
-
require "active_support/testing/autorun"
|
13
|
-
require "active_support/testing/method_call_assertions"
|
14
|
-
|
15
|
-
ENV["NO_RELOAD"] = "1"
|
16
|
-
require "active_support"
|
17
|
-
|
18
|
-
Thread.abort_on_exception = true
|
19
|
-
|
20
|
-
# Show backtraces for deprecated behavior for quicker cleanup.
|
21
|
-
ActiveSupport::Deprecation.debug = true
|
22
|
-
|
23
|
-
# Default to old to_time behavior but allow running tests with new behavior
|
24
|
-
ActiveSupport.to_time_preserves_timezone = ENV["PRESERVE_TIMEZONES"] == "1"
|
25
|
-
|
26
|
-
# Disable available locale checks to avoid warnings running the test suite.
|
27
|
-
I18n.enforce_available_locales = false
|
28
|
-
|
29
|
-
class ActiveSupport::TestCase
|
30
|
-
include ActiveSupport::Testing::MethodCallAssertions
|
31
|
-
|
32
|
-
private
|
33
|
-
# Skips the current run on Rubinius using Minitest::Assertions#skip
|
34
|
-
def rubinius_skip(message = "")
|
35
|
-
skip message if RUBY_ENGINE == "rbx"
|
36
|
-
end
|
37
|
-
|
38
|
-
# Skips the current run on JRuby using Minitest::Assertions#skip
|
39
|
-
def jruby_skip(message = "")
|
40
|
-
skip message if defined?(JRUBY_VERSION)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
require_relative "test_common"
|
@@ -1,133 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "abstract_unit"
|
4
|
-
require "active_support/json"
|
5
|
-
require "active_support/time"
|
6
|
-
require_relative "time_zone_test_helpers"
|
7
|
-
|
8
|
-
require 'oj'
|
9
|
-
|
10
|
-
Oj::Rails.set_decoder()
|
11
|
-
|
12
|
-
class TestJSONDecoding < ActiveSupport::TestCase
|
13
|
-
include TimeZoneTestHelpers
|
14
|
-
|
15
|
-
# Added for testing if Oj is used.
|
16
|
-
test "oj is used as an encoder" do
|
17
|
-
assert_equal ActiveSupport.json_encoder, Oj::Rails::Encoder
|
18
|
-
end
|
19
|
-
|
20
|
-
class Foo
|
21
|
-
def self.json_create(object)
|
22
|
-
"Foo"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
TESTS = {
|
27
|
-
%q({"returnTo":{"\/categories":"\/"}}) => { "returnTo" => { "/categories" => "/" } },
|
28
|
-
%q({"return\\"To\\":":{"\/categories":"\/"}}) => { "return\"To\":" => { "/categories" => "/" } },
|
29
|
-
%q({"returnTo":{"\/categories":1}}) => { "returnTo" => { "/categories" => 1 } },
|
30
|
-
%({"returnTo":[1,"a"]}) => { "returnTo" => [1, "a"] },
|
31
|
-
%({"returnTo":[1,"\\"a\\",", "b"]}) => { "returnTo" => [1, "\"a\",", "b"] },
|
32
|
-
%({"a": "'", "b": "5,000"}) => { "a" => "'", "b" => "5,000" },
|
33
|
-
%({"a": "a's, b's and c's", "b": "5,000"}) => { "a" => "a's, b's and c's", "b" => "5,000" },
|
34
|
-
# multibyte
|
35
|
-
%({"matzue": "松江", "asakusa": "浅草"}) => { "matzue" => "松江", "asakusa" => "浅草" },
|
36
|
-
%({"a": "2007-01-01"}) => { "a" => Date.new(2007, 1, 1) },
|
37
|
-
%({"a": "2007-01-01 01:12:34 Z"}) => { "a" => Time.utc(2007, 1, 1, 1, 12, 34) },
|
38
|
-
%(["2007-01-01 01:12:34 Z"]) => [Time.utc(2007, 1, 1, 1, 12, 34)],
|
39
|
-
%(["2007-01-01 01:12:34 Z", "2007-01-01 01:12:35 Z"]) => [Time.utc(2007, 1, 1, 1, 12, 34), Time.utc(2007, 1, 1, 1, 12, 35)],
|
40
|
-
# no time zone
|
41
|
-
%({"a": "2007-01-01 01:12:34"}) => { "a" => Time.new(2007, 1, 1, 1, 12, 34, "-05:00") },
|
42
|
-
# invalid date
|
43
|
-
%({"a": "1089-10-40"}) => { "a" => "1089-10-40" },
|
44
|
-
# xmlschema date notation
|
45
|
-
%({"a": "2009-08-10T19:01:02"}) => { "a" => Time.new(2009, 8, 10, 19, 1, 2, "-04:00") },
|
46
|
-
%({"a": "2009-08-10T19:01:02Z"}) => { "a" => Time.utc(2009, 8, 10, 19, 1, 2) },
|
47
|
-
%({"a": "2009-08-10T19:01:02+02:00"}) => { "a" => Time.utc(2009, 8, 10, 17, 1, 2) },
|
48
|
-
%({"a": "2009-08-10T19:01:02-05:00"}) => { "a" => Time.utc(2009, 8, 11, 00, 1, 2) },
|
49
|
-
# needs to be *exact*
|
50
|
-
%({"a": " 2007-01-01 01:12:34 Z "}) => { "a" => " 2007-01-01 01:12:34 Z " },
|
51
|
-
%({"a": "2007-01-01 : it's your birthday"}) => { "a" => "2007-01-01 : it's your birthday" },
|
52
|
-
%([]) => [],
|
53
|
-
%({}) => {},
|
54
|
-
%({"a":1}) => { "a" => 1 },
|
55
|
-
%({"a": ""}) => { "a" => "" },
|
56
|
-
%({"a":"\\""}) => { "a" => "\"" },
|
57
|
-
%({"a": null}) => { "a" => nil },
|
58
|
-
%({"a": true}) => { "a" => true },
|
59
|
-
%({"a": false}) => { "a" => false },
|
60
|
-
'{"bad":"\\\\","trailing":""}' => { "bad" => "\\", "trailing" => "" },
|
61
|
-
%q({"a": "http:\/\/test.host\/posts\/1"}) => { "a" => "http://test.host/posts/1" },
|
62
|
-
%q({"a": "\u003cunicode\u0020escape\u003e"}) => { "a" => "<unicode escape>" },
|
63
|
-
'{"a": "\\\\u0020skip double backslashes"}' => { "a" => "\\u0020skip double backslashes" },
|
64
|
-
%q({"a": "\u003cbr /\u003e"}) => { "a" => "<br />" },
|
65
|
-
%q({"b":["\u003ci\u003e","\u003cb\u003e","\u003cu\u003e"]}) => { "b" => ["<i>", "<b>", "<u>"] },
|
66
|
-
# test combination of dates and escaped or unicode encoded data in arrays
|
67
|
-
%q([{"d":"1970-01-01", "s":"\u0020escape"},{"d":"1970-01-01", "s":"\u0020escape"}]) =>
|
68
|
-
[{ "d" => Date.new(1970, 1, 1), "s" => " escape" }, { "d" => Date.new(1970, 1, 1), "s" => " escape" }],
|
69
|
-
%q([{"d":"1970-01-01","s":"http:\/\/example.com"},{"d":"1970-01-01","s":"http:\/\/example.com"}]) =>
|
70
|
-
[{ "d" => Date.new(1970, 1, 1), "s" => "http://example.com" },
|
71
|
-
{ "d" => Date.new(1970, 1, 1), "s" => "http://example.com" }],
|
72
|
-
# tests escaping of "\n" char with Yaml backend
|
73
|
-
%q({"a":"\n"}) => { "a" => "\n" },
|
74
|
-
%q({"a":"\u000a"}) => { "a" => "\n" },
|
75
|
-
%q({"a":"Line1\u000aLine2"}) => { "a" => "Line1\nLine2" },
|
76
|
-
# prevent json unmarshalling
|
77
|
-
'{"json_class":"TestJSONDecoding::Foo"}' => { "json_class" => "TestJSONDecoding::Foo" },
|
78
|
-
# json "fragments" - these are invalid JSON, but ActionPack relies on this
|
79
|
-
'"a string"' => "a string",
|
80
|
-
"1.1" => 1.1,
|
81
|
-
"1" => 1,
|
82
|
-
"-1" => -1,
|
83
|
-
"true" => true,
|
84
|
-
"false" => false,
|
85
|
-
"null" => nil
|
86
|
-
}
|
87
|
-
|
88
|
-
TESTS.each_with_index do |(json, expected), index|
|
89
|
-
fail_message = "JSON decoding failed for #{json}"
|
90
|
-
|
91
|
-
test "json decodes #{index}" do
|
92
|
-
with_tz_default "Eastern Time (US & Canada)" do
|
93
|
-
with_parse_json_times(true) do
|
94
|
-
silence_warnings do
|
95
|
-
if expected.nil?
|
96
|
-
assert_nil ActiveSupport::JSON.decode(json), fail_message
|
97
|
-
else
|
98
|
-
assert_equal expected, ActiveSupport::JSON.decode(json), fail_message
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
test "json decodes time json with time parsing disabled" do
|
107
|
-
with_parse_json_times(false) do
|
108
|
-
expected = { "a" => "2007-01-01 01:12:34 Z" }
|
109
|
-
assert_equal expected, ActiveSupport::JSON.decode(%({"a": "2007-01-01 01:12:34 Z"}))
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
def test_failed_json_decoding
|
114
|
-
assert_raise(ActiveSupport::JSON.parse_error) { ActiveSupport::JSON.decode(%(undefined)) }
|
115
|
-
assert_raise(ActiveSupport::JSON.parse_error) { ActiveSupport::JSON.decode(%({a: 1})) }
|
116
|
-
assert_raise(ActiveSupport::JSON.parse_error) { ActiveSupport::JSON.decode(%({: 1})) }
|
117
|
-
assert_raise(ActiveSupport::JSON.parse_error) { ActiveSupport::JSON.decode(%()) }
|
118
|
-
end
|
119
|
-
|
120
|
-
def test_cannot_pass_unsupported_options
|
121
|
-
assert_raise(ArgumentError) { ActiveSupport::JSON.decode("", create_additions: true) }
|
122
|
-
end
|
123
|
-
|
124
|
-
private
|
125
|
-
|
126
|
-
def with_parse_json_times(value)
|
127
|
-
old_value = ActiveSupport.parse_json_times
|
128
|
-
ActiveSupport.parse_json_times = value
|
129
|
-
yield
|
130
|
-
ensure
|
131
|
-
ActiveSupport.parse_json_times = old_value
|
132
|
-
end
|
133
|
-
end
|