json 2.3.0 → 2.4.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.
@@ -3,13 +3,14 @@ require 'test_helper'
3
3
 
4
4
  class JSONFixturesTest < Test::Unit::TestCase
5
5
  def setup
6
- fixtures = File.join(File.dirname(__FILE__), 'fixtures/{fail,pass}.json')
6
+ fixtures = File.join(File.dirname(__FILE__), 'fixtures/{fail,pass}*.json')
7
7
  passed, failed = Dir[fixtures].partition { |f| f['pass'] }
8
8
  @passed = passed.inject([]) { |a, f| a << [ f, File.read(f) ] }.sort
9
9
  @failed = failed.inject([]) { |a, f| a << [ f, File.read(f) ] }.sort
10
10
  end
11
11
 
12
12
  def test_passing
13
+ verbose_bak, $VERBOSE = $VERBOSE, nil
13
14
  for name, source in @passed
14
15
  begin
15
16
  assert JSON.parse(source),
@@ -19,6 +20,8 @@ class JSONFixturesTest < Test::Unit::TestCase
19
20
  raise e
20
21
  end
21
22
  end
23
+ ensure
24
+ $VERBOSE = verbose_bak
22
25
  end
23
26
 
24
27
  def test_failing
@@ -29,4 +32,9 @@ class JSONFixturesTest < Test::Unit::TestCase
29
32
  end
30
33
  end
31
34
  end
35
+
36
+ def test_sanity
37
+ assert(@passed.size > 5)
38
+ assert(@failed.size > 20)
39
+ end
32
40
  end
@@ -49,7 +49,6 @@ EOT
49
49
  end
50
50
 
51
51
  def test_remove_const_segv
52
- return if RUBY_ENGINE == 'jruby'
53
52
  stress = GC.stress
54
53
  const = JSON::SAFE_STATE_PROTOTYPE.dup
55
54
 
@@ -76,7 +75,7 @@ EOT
76
75
  silence do
77
76
  JSON.const_set :SAFE_STATE_PROTOTYPE, const
78
77
  end
79
- end if JSON.const_defined?("Ext")
78
+ end if JSON.const_defined?("Ext") && RUBY_ENGINE != 'jruby'
80
79
 
81
80
  def test_generate
82
81
  json = generate(@hash)
@@ -93,6 +92,11 @@ EOT
93
92
  end
94
93
 
95
94
  def test_generate_pretty
95
+ json = pretty_generate({})
96
+ assert_equal(<<'EOT'.chomp, json)
97
+ {
98
+ }
99
+ EOT
96
100
  json = pretty_generate(@hash)
97
101
  # hashes aren't (insertion) ordered on every ruby implementation
98
102
  # assert_equal(@json3, json)
@@ -174,6 +178,7 @@ EOT
174
178
  :ascii_only => false,
175
179
  :buffer_initial_length => 1024,
176
180
  :depth => 0,
181
+ :escape_slash => false,
177
182
  :indent => " ",
178
183
  :max_nesting => 100,
179
184
  :object_nl => "\n",
@@ -190,6 +195,7 @@ EOT
190
195
  :ascii_only => false,
191
196
  :buffer_initial_length => 1024,
192
197
  :depth => 0,
198
+ :escape_slash => false,
193
199
  :indent => "",
194
200
  :max_nesting => 100,
195
201
  :object_nl => "",
@@ -206,6 +212,7 @@ EOT
206
212
  :ascii_only => false,
207
213
  :buffer_initial_length => 1024,
208
214
  :depth => 0,
215
+ :escape_slash => false,
209
216
  :indent => "",
210
217
  :max_nesting => 0,
211
218
  :object_nl => "",
@@ -394,6 +401,10 @@ EOT
394
401
  json = '["/"]'
395
402
  assert_equal json, generate(data)
396
403
  #
404
+ data = [ '/' ]
405
+ json = '["\/"]'
406
+ assert_equal json, generate(data, :escape_slash => true)
407
+ #
397
408
  data = ['"']
398
409
  json = '["\""]'
399
410
  assert_equal json, generate(data)
@@ -218,6 +218,17 @@ class JSONParserTest < Test::Unit::TestCase
218
218
  end
219
219
  end
220
220
 
221
+ def test_freeze
222
+ assert_predicate parse('{}', :freeze => true), :frozen?
223
+ assert_predicate parse('[]', :freeze => true), :frozen?
224
+ assert_predicate parse('"foo"', :freeze => true), :frozen?
225
+
226
+ if string_deduplication_available?
227
+ assert_same(-'foo', parse('"foo"', :freeze => true))
228
+ assert_same(-'foo', parse('{"foo": 1}', :freeze => true).keys.first)
229
+ end
230
+ end
231
+
221
232
  def test_parse_comments
222
233
  json = <<EOT
223
234
  {
@@ -293,6 +304,10 @@ EOT
293
304
  json = '["\\\'"]'
294
305
  data = ["'"]
295
306
  assert_equal data, parse(json)
307
+
308
+ json = '["\/"]'
309
+ data = [ '/' ]
310
+ assert_equal data, parse(json)
296
311
  end
297
312
 
298
313
  class SubArray < Array
@@ -464,6 +479,16 @@ EOT
464
479
 
465
480
  private
466
481
 
482
+ def string_deduplication_available?
483
+ r1 = rand.to_s
484
+ r2 = r1.dup
485
+ begin
486
+ (-r1).equal?(-r2)
487
+ rescue NoMethodError
488
+ false # No String#-@
489
+ end
490
+ end
491
+
467
492
  def assert_equal_float(expected, actual, delta = 1e-2)
468
493
  Array === expected and expected = expected.first
469
494
  Array === actual and actual = actual.first
data/tests/test_helper.rb CHANGED
@@ -1,12 +1,12 @@
1
1
  case ENV['JSON']
2
2
  when 'pure'
3
- $:.unshift 'lib'
3
+ $:.unshift File.join(__dir__, '../lib')
4
4
  require 'json/pure'
5
5
  when 'ext'
6
- $:.unshift 'ext', 'lib'
6
+ $:.unshift File.join(__dir__, '../ext'), File.join(__dir__, '../lib')
7
7
  require 'json/ext'
8
8
  else
9
- $:.unshift 'ext', 'lib'
9
+ $:.unshift File.join(__dir__, '../ext'), File.join(__dir__, '../lib')
10
10
  require 'json'
11
11
  end
12
12
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-11 00:00:00.000000000 Z
11
+ date: 2020-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -28,16 +28,22 @@ dependencies:
28
28
  name: test-unit
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '2.0'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '4.0'
34
37
  type: :development
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
- - - "~>"
41
+ - - ">="
39
42
  - !ruby/object:Gem::Version
40
43
  version: '2.0'
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '4.0'
41
47
  description: This is a JSON implementation as a Ruby extension in C.
42
48
  email: flori@ping.de
43
49
  executables: []
@@ -48,7 +54,6 @@ extensions:
48
54
  extra_rdoc_files:
49
55
  - README.md
50
56
  files:
51
- - "./tests/test_helper.rb"
52
57
  - ".gitignore"
53
58
  - ".travis.yml"
54
59
  - CHANGES.md
@@ -158,8 +163,14 @@ files:
158
163
  homepage: http://flori.github.com/json
159
164
  licenses:
160
165
  - Ruby
161
- metadata: {}
162
- post_install_message:
166
+ metadata:
167
+ bug_tracker_uri: https://github.com/flori/json/issues
168
+ changelog_uri: https://github.com/flori/json/blob/master/CHANGES.md
169
+ documentation_uri: http://flori.github.io/json/doc/index.html
170
+ homepage_uri: http://flori.github.io/json/
171
+ source_code_uri: https://github.com/flori/json
172
+ wiki_uri: https://github.com/flori/json/wiki
173
+ post_install_message:
163
174
  rdoc_options:
164
175
  - "--title"
165
176
  - JSON implemention for Ruby
@@ -171,16 +182,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
171
182
  requirements:
172
183
  - - ">="
173
184
  - !ruby/object:Gem::Version
174
- version: '1.9'
185
+ version: '2.0'
175
186
  required_rubygems_version: !ruby/object:Gem::Requirement
176
187
  requirements:
177
188
  - - ">="
178
189
  - !ruby/object:Gem::Version
179
190
  version: '0'
180
191
  requirements: []
181
- rubygems_version: 3.0.3
182
- signing_key:
192
+ rubygems_version: 3.1.4
193
+ signing_key:
183
194
  specification_version: 4
184
195
  summary: JSON Implementation for Ruby
185
196
  test_files:
186
- - "./tests/test_helper.rb"
197
+ - tests/test_helper.rb