oj 3.16.0 → 3.17.3

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 (137) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +107 -0
  3. data/README.md +0 -16
  4. data/ext/oj/cache.c +4 -2
  5. data/ext/oj/cache.h +3 -2
  6. data/ext/oj/compat.c +3 -3
  7. data/ext/oj/custom.c +17 -11
  8. data/ext/oj/dump.c +624 -90
  9. data/ext/oj/dump.h +9 -2
  10. data/ext/oj/dump_compat.c +15 -9
  11. data/ext/oj/dump_leaf.c +1 -1
  12. data/ext/oj/dump_object.c +32 -17
  13. data/ext/oj/dump_strict.c +20 -14
  14. data/ext/oj/extconf.rb +11 -9
  15. data/ext/oj/fast.c +50 -32
  16. data/ext/oj/intern.c +24 -7
  17. data/ext/oj/mimic_json.c +17 -11
  18. data/ext/oj/object.c +21 -13
  19. data/ext/oj/oj.c +387 -140
  20. data/ext/oj/oj.h +59 -55
  21. data/ext/oj/parse.c +248 -47
  22. data/ext/oj/parser.c +179 -89
  23. data/ext/oj/parser.h +4 -2
  24. data/ext/oj/rails.c +64 -42
  25. data/ext/oj/reader.c +1 -1
  26. data/ext/oj/rxclass.c +1 -1
  27. data/ext/oj/rxclass.h +1 -1
  28. data/ext/oj/safe.c +230 -0
  29. data/ext/oj/safe.h +79 -0
  30. data/ext/oj/saj.c +15 -10
  31. data/ext/oj/scp.c +3 -6
  32. data/ext/oj/simd.h +219 -0
  33. data/ext/oj/sparse.c +6 -3
  34. data/ext/oj/stream_writer.c +38 -28
  35. data/ext/oj/strict.c +2 -4
  36. data/ext/oj/string_writer.c +54 -22
  37. data/ext/oj/usual.c +57 -35
  38. data/ext/oj/usual.h +1 -0
  39. data/ext/oj/val_stack.c +13 -2
  40. data/ext/oj/wab.c +5 -4
  41. data/lib/oj/mimic.rb +1 -5
  42. data/lib/oj/schandler.rb +5 -4
  43. data/lib/oj/version.rb +1 -1
  44. data/pages/Encoding.md +1 -1
  45. metadata +36 -100
  46. data/test/_test_active.rb +0 -75
  47. data/test/_test_active_mimic.rb +0 -95
  48. data/test/_test_mimic_rails.rb +0 -123
  49. data/test/activerecord/result_test.rb +0 -31
  50. data/test/activesupport6/abstract_unit.rb +0 -44
  51. data/test/activesupport6/decoding_test.rb +0 -133
  52. data/test/activesupport6/encoding_test.rb +0 -507
  53. data/test/activesupport6/encoding_test_cases.rb +0 -98
  54. data/test/activesupport6/test_common.rb +0 -17
  55. data/test/activesupport6/test_helper.rb +0 -163
  56. data/test/activesupport6/time_zone_test_helpers.rb +0 -39
  57. data/test/activesupport7/abstract_unit.rb +0 -49
  58. data/test/activesupport7/decoding_test.rb +0 -125
  59. data/test/activesupport7/encoding_test.rb +0 -486
  60. data/test/activesupport7/encoding_test_cases.rb +0 -104
  61. data/test/activesupport7/time_zone_test_helpers.rb +0 -47
  62. data/test/files.rb +0 -29
  63. data/test/foo.rb +0 -14
  64. data/test/helper.rb +0 -39
  65. data/test/isolated/shared.rb +0 -309
  66. data/test/isolated/test_mimic_after.rb +0 -13
  67. data/test/isolated/test_mimic_alone.rb +0 -12
  68. data/test/isolated/test_mimic_as_json.rb +0 -45
  69. data/test/isolated/test_mimic_before.rb +0 -13
  70. data/test/isolated/test_mimic_define.rb +0 -28
  71. data/test/isolated/test_mimic_rails_after.rb +0 -22
  72. data/test/isolated/test_mimic_rails_before.rb +0 -21
  73. data/test/isolated/test_mimic_redefine.rb +0 -15
  74. data/test/json_gem/json_addition_test.rb +0 -216
  75. data/test/json_gem/json_common_interface_test.rb +0 -155
  76. data/test/json_gem/json_encoding_test.rb +0 -107
  77. data/test/json_gem/json_ext_parser_test.rb +0 -21
  78. data/test/json_gem/json_fixtures_test.rb +0 -36
  79. data/test/json_gem/json_generator_test.rb +0 -407
  80. data/test/json_gem/json_generic_object_test.rb +0 -90
  81. data/test/json_gem/json_parser_test.rb +0 -477
  82. data/test/json_gem/json_string_matching_test.rb +0 -42
  83. data/test/json_gem/test_helper.rb +0 -30
  84. data/test/mem.rb +0 -34
  85. data/test/perf.rb +0 -102
  86. data/test/perf_compat.rb +0 -128
  87. data/test/perf_dump.rb +0 -50
  88. data/test/perf_fast.rb +0 -162
  89. data/test/perf_file.rb +0 -62
  90. data/test/perf_object.rb +0 -134
  91. data/test/perf_once.rb +0 -59
  92. data/test/perf_parser.rb +0 -183
  93. data/test/perf_saj.rb +0 -101
  94. data/test/perf_scp.rb +0 -140
  95. data/test/perf_simple.rb +0 -289
  96. data/test/perf_strict.rb +0 -137
  97. data/test/perf_wab.rb +0 -129
  98. data/test/prec.rb +0 -23
  99. data/test/sample/change.rb +0 -13
  100. data/test/sample/dir.rb +0 -18
  101. data/test/sample/doc.rb +0 -35
  102. data/test/sample/file.rb +0 -47
  103. data/test/sample/group.rb +0 -15
  104. data/test/sample/hasprops.rb +0 -15
  105. data/test/sample/layer.rb +0 -11
  106. data/test/sample/line.rb +0 -20
  107. data/test/sample/oval.rb +0 -10
  108. data/test/sample/rect.rb +0 -9
  109. data/test/sample/shape.rb +0 -34
  110. data/test/sample/text.rb +0 -19
  111. data/test/sample.rb +0 -54
  112. data/test/sample_json.rb +0 -37
  113. data/test/test_compat.rb +0 -567
  114. data/test/test_custom.rb +0 -554
  115. data/test/test_debian.rb +0 -50
  116. data/test/test_fast.rb +0 -526
  117. data/test/test_file.rb +0 -250
  118. data/test/test_gc.rb +0 -60
  119. data/test/test_generate.rb +0 -21
  120. data/test/test_hash.rb +0 -39
  121. data/test/test_integer_range.rb +0 -72
  122. data/test/test_null.rb +0 -376
  123. data/test/test_object.rb +0 -1016
  124. data/test/test_parser.rb +0 -11
  125. data/test/test_parser_debug.rb +0 -27
  126. data/test/test_parser_saj.rb +0 -337
  127. data/test/test_parser_usual.rb +0 -217
  128. data/test/test_rails.rb +0 -35
  129. data/test/test_saj.rb +0 -188
  130. data/test/test_scp.rb +0 -431
  131. data/test/test_strict.rb +0 -431
  132. data/test/test_various.rb +0 -801
  133. data/test/test_wab.rb +0 -311
  134. data/test/test_writer.rb +0 -380
  135. data/test/tests.rb +0 -33
  136. data/test/tests_mimic.rb +0 -23
  137. data/test/tests_mimic_addition.rb +0 -16
metadata CHANGED
@@ -1,15 +1,28 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oj
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.16.0
4
+ version: 3.17.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Ohler
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-08-16 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: bigdecimal
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '3.0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '3.0'
13
26
  - !ruby/object:Gem::Dependency
14
27
  name: minitest
15
28
  requirement: !ruby/object:Gem::Requirement
@@ -58,15 +71,29 @@ dependencies:
58
71
  - - "~>"
59
72
  - !ruby/object:Gem::Version
60
73
  version: '3.0'
74
+ - !ruby/object:Gem::Dependency
75
+ name: ostruct
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0.2'
81
+ type: :runtime
82
+ prerelease: false
83
+ version_requirements: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0.2'
61
88
  description: The fastest JSON parser and object serializer.
62
89
  email: peter@ohler.com
63
90
  executables: []
64
91
  extensions:
65
92
  - ext/oj/extconf.rb
66
93
  extra_rdoc_files:
67
- - README.md
68
- - LICENSE
69
94
  - CHANGELOG.md
95
+ - LICENSE
96
+ - README.md
70
97
  - RELEASE_NOTES.md
71
98
  - pages/Advanced.md
72
99
  - pages/Compatibility.md
@@ -131,10 +158,13 @@ files:
131
158
  - ext/oj/resolve.h
132
159
  - ext/oj/rxclass.c
133
160
  - ext/oj/rxclass.h
161
+ - ext/oj/safe.c
162
+ - ext/oj/safe.h
134
163
  - ext/oj/saj.c
135
164
  - ext/oj/saj2.c
136
165
  - ext/oj/saj2.h
137
166
  - ext/oj/scp.c
167
+ - ext/oj/simd.h
138
168
  - ext/oj/sparse.c
139
169
  - ext/oj/stream_writer.c
140
170
  - ext/oj/strict.c
@@ -172,98 +202,6 @@ files:
172
202
  - pages/Rails.md
173
203
  - pages/Security.md
174
204
  - pages/WAB.md
175
- - test/_test_active.rb
176
- - test/_test_active_mimic.rb
177
- - test/_test_mimic_rails.rb
178
- - test/activerecord/result_test.rb
179
- - test/activesupport6/abstract_unit.rb
180
- - test/activesupport6/decoding_test.rb
181
- - test/activesupport6/encoding_test.rb
182
- - test/activesupport6/encoding_test_cases.rb
183
- - test/activesupport6/test_common.rb
184
- - test/activesupport6/test_helper.rb
185
- - test/activesupport6/time_zone_test_helpers.rb
186
- - test/activesupport7/abstract_unit.rb
187
- - test/activesupport7/decoding_test.rb
188
- - test/activesupport7/encoding_test.rb
189
- - test/activesupport7/encoding_test_cases.rb
190
- - test/activesupport7/time_zone_test_helpers.rb
191
- - test/files.rb
192
- - test/foo.rb
193
- - test/helper.rb
194
- - test/isolated/shared.rb
195
- - test/isolated/test_mimic_after.rb
196
- - test/isolated/test_mimic_alone.rb
197
- - test/isolated/test_mimic_as_json.rb
198
- - test/isolated/test_mimic_before.rb
199
- - test/isolated/test_mimic_define.rb
200
- - test/isolated/test_mimic_rails_after.rb
201
- - test/isolated/test_mimic_rails_before.rb
202
- - test/isolated/test_mimic_redefine.rb
203
- - test/json_gem/json_addition_test.rb
204
- - test/json_gem/json_common_interface_test.rb
205
- - test/json_gem/json_encoding_test.rb
206
- - test/json_gem/json_ext_parser_test.rb
207
- - test/json_gem/json_fixtures_test.rb
208
- - test/json_gem/json_generator_test.rb
209
- - test/json_gem/json_generic_object_test.rb
210
- - test/json_gem/json_parser_test.rb
211
- - test/json_gem/json_string_matching_test.rb
212
- - test/json_gem/test_helper.rb
213
- - test/mem.rb
214
- - test/perf.rb
215
- - test/perf_compat.rb
216
- - test/perf_dump.rb
217
- - test/perf_fast.rb
218
- - test/perf_file.rb
219
- - test/perf_object.rb
220
- - test/perf_once.rb
221
- - test/perf_parser.rb
222
- - test/perf_saj.rb
223
- - test/perf_scp.rb
224
- - test/perf_simple.rb
225
- - test/perf_strict.rb
226
- - test/perf_wab.rb
227
- - test/prec.rb
228
- - test/sample.rb
229
- - test/sample/change.rb
230
- - test/sample/dir.rb
231
- - test/sample/doc.rb
232
- - test/sample/file.rb
233
- - test/sample/group.rb
234
- - test/sample/hasprops.rb
235
- - test/sample/layer.rb
236
- - test/sample/line.rb
237
- - test/sample/oval.rb
238
- - test/sample/rect.rb
239
- - test/sample/shape.rb
240
- - test/sample/text.rb
241
- - test/sample_json.rb
242
- - test/test_compat.rb
243
- - test/test_custom.rb
244
- - test/test_debian.rb
245
- - test/test_fast.rb
246
- - test/test_file.rb
247
- - test/test_gc.rb
248
- - test/test_generate.rb
249
- - test/test_hash.rb
250
- - test/test_integer_range.rb
251
- - test/test_null.rb
252
- - test/test_object.rb
253
- - test/test_parser.rb
254
- - test/test_parser_debug.rb
255
- - test/test_parser_saj.rb
256
- - test/test_parser_usual.rb
257
- - test/test_rails.rb
258
- - test/test_saj.rb
259
- - test/test_scp.rb
260
- - test/test_strict.rb
261
- - test/test_various.rb
262
- - test/test_wab.rb
263
- - test/test_writer.rb
264
- - test/tests.rb
265
- - test/tests_mimic.rb
266
- - test/tests_mimic_addition.rb
267
205
  homepage: http://www.ohler.com/oj
268
206
  licenses:
269
207
  - MIT
@@ -275,7 +213,6 @@ metadata:
275
213
  source_code_uri: https://github.com/ohler55/oj
276
214
  wiki_uri: https://github.com/ohler55/oj/wiki
277
215
  rubygems_mfa_required: 'true'
278
- post_install_message:
279
216
  rdoc_options:
280
217
  - "--title"
281
218
  - Oj
@@ -294,8 +231,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
294
231
  - !ruby/object:Gem::Version
295
232
  version: '0'
296
233
  requirements: []
297
- rubygems_version: 3.4.1
298
- signing_key:
234
+ rubygems_version: 4.0.3
299
235
  specification_version: 4
300
236
  summary: A fast JSON parser and serializer.
301
237
  test_files: []
data/test/_test_active.rb DELETED
@@ -1,75 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- $LOAD_PATH << __dir__
5
- %w(lib ext test).each do |dir|
6
- $LOAD_PATH.unshift File.expand_path("../../#{dir}", __FILE__)
7
- end
8
-
9
- require 'minitest'
10
- require 'minitest/autorun'
11
-
12
- require 'sqlite3'
13
- require 'active_record'
14
- require 'oj'
15
-
16
- # Oj.mimic_JSON()
17
- Oj.default_options = {mode: :compat, indent: 2}
18
-
19
- # ActiveRecord::Base.logger = Logger.new(STDERR)
20
-
21
- ActiveRecord::Base.establish_connection(
22
- :adapter => 'sqlite3',
23
- :database => ':memory:'
24
- )
25
-
26
- ActiveRecord::Schema.define do
27
- create_table :users do |table|
28
- table.column :first_name, :string
29
- table.column :last_name, :string
30
- table.column :email, :string
31
- end
32
- end
33
-
34
- class User < ActiveRecord::Base
35
- end
36
-
37
- class ActiveTest < Minitest::Test
38
-
39
- def test_active
40
- User.find_or_create_by(first_name: 'John', last_name: 'Smith', email: 'john@example.com')
41
- User.find_or_create_by(first_name: 'Joan', last_name: 'Smith', email: 'joan@example.com')
42
-
43
- # Single instance.
44
- assert_equal(%|{
45
- "id":1,
46
- "first_name":"John",
47
- "last_name":"Smith",
48
- "email":"john@example.com"
49
- }
50
- |, Oj.dump(User.first))
51
-
52
- # Array of instances.
53
- assert_equal(%|[
54
- {
55
- "id":1,
56
- "first_name":"John",
57
- "last_name":"Smith",
58
- "email":"john@example.com"
59
- },
60
- {
61
- "id":2,
62
- "first_name":"Joan",
63
- "last_name":"Smith",
64
- "email":"joan@example.com"
65
- }
66
- ]
67
- |, Oj.dump(User.all))
68
-
69
- # Single instance as json. (not Oj)
70
- assert_equal(%|{"id":1,"first_name":"John","last_name":"Smith","email":"john@example.com"}|, User.first.to_json)
71
-
72
- # Array of instances as json. (not Oj)
73
- assert_equal(%|[{"id":1,"first_name":"John","last_name":"Smith","email":"john@example.com"},{"id":2,"first_name":"Joan","last_name":"Smith","email":"joan@example.com"}]|, User.all.to_json)
74
- end
75
- end
@@ -1,95 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- $LOAD_PATH << __dir__
5
- %w(lib ext test).each do |dir|
6
- $LOAD_PATH.unshift File.expand_path("../../#{dir}", __FILE__)
7
- end
8
-
9
- require 'minitest'
10
- require 'minitest/autorun'
11
-
12
- require 'sqlite3'
13
- require 'active_record'
14
- require 'oj'
15
-
16
- Oj.mimic_JSON()
17
- Oj.default_options = {mode: :compat, indent: 2}
18
-
19
- # ActiveRecord::Base.logger = Logger.new(STDERR)
20
-
21
- ActiveRecord::Base.establish_connection(
22
- :adapter => 'sqlite3',
23
- :database => ':memory:'
24
- )
25
-
26
- ActiveRecord::Schema.define do
27
- create_table :users do |table|
28
- table.column :first_name, :string
29
- table.column :last_name, :string
30
- table.column :email, :string
31
- end
32
- end
33
-
34
- class User < ActiveRecord::Base
35
- end
36
-
37
- class ActiveTest < Minitest::Test
38
-
39
- def test_active
40
- User.find_or_create_by(first_name: 'John', last_name: 'Smith', email: 'john@example.com')
41
- User.find_or_create_by(first_name: 'Joan', last_name: 'Smith', email: 'joan@example.com')
42
-
43
- # Single instance.
44
- assert_equal(%|{
45
- "id":1,
46
- "first_name":"John",
47
- "last_name":"Smith",
48
- "email":"john@example.com"
49
- }
50
- |, Oj.dump(User.first))
51
-
52
- # Array of instances.
53
- assert_equal(%|[
54
- {
55
- "id":1,
56
- "first_name":"John",
57
- "last_name":"Smith",
58
- "email":"john@example.com"
59
- },
60
- {
61
- "id":2,
62
- "first_name":"Joan",
63
- "last_name":"Smith",
64
- "email":"joan@example.com"
65
- }
66
- ]
67
- |, Oj.dump(User.all))
68
-
69
- # Single instance as json. (not Oj)
70
- assert_equal(%|{
71
- "id":1,
72
- "first_name":"John",
73
- "last_name":"Smith",
74
- "email":"john@example.com"
75
- }
76
- |, User.first.to_json)
77
-
78
- # Array of instances as json. (not Oj)
79
- assert_equal(%|[
80
- {
81
- "id":1,
82
- "first_name":"John",
83
- "last_name":"Smith",
84
- "email":"john@example.com"
85
- },
86
- {
87
- "id":2,
88
- "first_name":"Joan",
89
- "last_name":"Smith",
90
- "email":"joan@example.com"
91
- }
92
- ]
93
- |, User.all.to_json)
94
- end
95
- end
@@ -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