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.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/ext/oj/fast.c +3 -6
  4. data/ext/oj/mimic_json.c +3 -6
  5. data/ext/oj/oj.c +2 -4
  6. data/ext/oj/parse.c +15 -5
  7. data/ext/oj/parser.c +1 -1
  8. data/ext/oj/parser.h +2 -0
  9. data/ext/oj/rails.c +1 -2
  10. data/ext/oj/saj.c +3 -6
  11. data/ext/oj/scp.c +3 -6
  12. data/ext/oj/stream_writer.c +1 -7
  13. data/ext/oj/strict.c +2 -4
  14. data/ext/oj/string_writer.c +1 -3
  15. data/lib/oj/version.rb +1 -1
  16. metadata +3 -98
  17. data/test/_test_active.rb +0 -75
  18. data/test/_test_active_mimic.rb +0 -95
  19. data/test/_test_mimic_rails.rb +0 -123
  20. data/test/activerecord/result_test.rb +0 -31
  21. data/test/activesupport6/abstract_unit.rb +0 -44
  22. data/test/activesupport6/decoding_test.rb +0 -133
  23. data/test/activesupport6/encoding_test.rb +0 -542
  24. data/test/activesupport6/encoding_test_cases.rb +0 -98
  25. data/test/activesupport6/test_common.rb +0 -17
  26. data/test/activesupport6/test_helper.rb +0 -163
  27. data/test/activesupport6/time_zone_test_helpers.rb +0 -39
  28. data/test/activesupport7/abstract_unit.rb +0 -52
  29. data/test/activesupport7/decoding_test.rb +0 -125
  30. data/test/activesupport7/encoding_test.rb +0 -536
  31. data/test/activesupport7/encoding_test_cases.rb +0 -104
  32. data/test/activesupport7/time_zone_test_helpers.rb +0 -47
  33. data/test/files.rb +0 -29
  34. data/test/foo.rb +0 -26
  35. data/test/helper.rb +0 -39
  36. data/test/isolated/shared.rb +0 -309
  37. data/test/isolated/test_mimic_after.rb +0 -13
  38. data/test/isolated/test_mimic_alone.rb +0 -12
  39. data/test/isolated/test_mimic_as_json.rb +0 -45
  40. data/test/isolated/test_mimic_before.rb +0 -13
  41. data/test/isolated/test_mimic_define.rb +0 -28
  42. data/test/isolated/test_mimic_rails_after.rb +0 -22
  43. data/test/isolated/test_mimic_rails_before.rb +0 -21
  44. data/test/isolated/test_mimic_redefine.rb +0 -15
  45. data/test/json_gem/json_addition_test.rb +0 -216
  46. data/test/json_gem/json_common_interface_test.rb +0 -155
  47. data/test/json_gem/json_encoding_test.rb +0 -107
  48. data/test/json_gem/json_ext_parser_test.rb +0 -21
  49. data/test/json_gem/json_fixtures_test.rb +0 -36
  50. data/test/json_gem/json_generator_test.rb +0 -413
  51. data/test/json_gem/json_generic_object_test.rb +0 -90
  52. data/test/json_gem/json_parser_test.rb +0 -477
  53. data/test/json_gem/json_string_matching_test.rb +0 -42
  54. data/test/json_gem/test_helper.rb +0 -30
  55. data/test/mem.rb +0 -34
  56. data/test/perf.rb +0 -102
  57. data/test/perf_compat.rb +0 -128
  58. data/test/perf_dump.rb +0 -50
  59. data/test/perf_fast.rb +0 -162
  60. data/test/perf_file.rb +0 -62
  61. data/test/perf_object.rb +0 -134
  62. data/test/perf_once.rb +0 -59
  63. data/test/perf_parser.rb +0 -183
  64. data/test/perf_saj.rb +0 -101
  65. data/test/perf_scp.rb +0 -140
  66. data/test/perf_simple.rb +0 -289
  67. data/test/perf_strict.rb +0 -137
  68. data/test/perf_wab.rb +0 -129
  69. data/test/prec.rb +0 -23
  70. data/test/sample/change.rb +0 -13
  71. data/test/sample/dir.rb +0 -18
  72. data/test/sample/doc.rb +0 -35
  73. data/test/sample/file.rb +0 -47
  74. data/test/sample/group.rb +0 -15
  75. data/test/sample/hasprops.rb +0 -15
  76. data/test/sample/layer.rb +0 -11
  77. data/test/sample/line.rb +0 -20
  78. data/test/sample/oval.rb +0 -10
  79. data/test/sample/rect.rb +0 -9
  80. data/test/sample/shape.rb +0 -34
  81. data/test/sample/text.rb +0 -19
  82. data/test/sample.rb +0 -54
  83. data/test/sample_json.rb +0 -37
  84. data/test/test_compat.rb +0 -567
  85. data/test/test_custom.rb +0 -555
  86. data/test/test_debian.rb +0 -50
  87. data/test/test_fast.rb +0 -526
  88. data/test/test_file.rb +0 -250
  89. data/test/test_gc.rb +0 -60
  90. data/test/test_generate.rb +0 -21
  91. data/test/test_hash.rb +0 -39
  92. data/test/test_integer_range.rb +0 -72
  93. data/test/test_null.rb +0 -376
  94. data/test/test_object.rb +0 -1030
  95. data/test/test_parser.rb +0 -11
  96. data/test/test_parser_debug.rb +0 -27
  97. data/test/test_parser_saj.rb +0 -337
  98. data/test/test_parser_usual.rb +0 -255
  99. data/test/test_rails.rb +0 -35
  100. data/test/test_saj.rb +0 -188
  101. data/test/test_scp.rb +0 -431
  102. data/test/test_strict.rb +0 -441
  103. data/test/test_various.rb +0 -801
  104. data/test/test_wab.rb +0 -311
  105. data/test/test_writer.rb +0 -396
  106. data/test/tests.rb +0 -33
  107. data/test/tests_mimic.rb +0 -23
  108. data/test/tests_mimic_addition.rb +0 -16
@@ -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