scout 5.1.2 → 5.1.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 (41) hide show
  1. data/CHANGELOG +5 -0
  2. data/lib/scout.rb +1 -1
  3. data/lib/scout/server.rb +4 -1
  4. data/vendor/json_pure/CHANGES +43 -0
  5. data/vendor/json_pure/{RUBY → COPYING} +1 -1
  6. data/vendor/json_pure/GPL +7 -7
  7. data/vendor/json_pure/README +319 -39
  8. data/vendor/json_pure/Rakefile +69 -47
  9. data/vendor/json_pure/VERSION +1 -1
  10. data/vendor/json_pure/benchmarks/generator2_benchmark.rb +222 -0
  11. data/vendor/json_pure/benchmarks/generator_benchmark.rb +64 -5
  12. data/vendor/json_pure/benchmarks/ohai.json +1216 -0
  13. data/vendor/json_pure/benchmarks/ohai.ruby +1 -0
  14. data/vendor/json_pure/benchmarks/parser2_benchmark.rb +251 -0
  15. data/vendor/json_pure/benchmarks/parser_benchmark.rb +67 -5
  16. data/vendor/json_pure/ext/json/ext/generator/extconf.rb +9 -4
  17. data/vendor/json_pure/ext/json/ext/generator/generator.c +831 -409
  18. data/vendor/json_pure/ext/json/ext/generator/generator.h +170 -0
  19. data/vendor/json_pure/ext/json/ext/parser/extconf.rb +8 -4
  20. data/vendor/json_pure/ext/json/ext/parser/parser.c +292 -186
  21. data/vendor/json_pure/ext/json/ext/parser/parser.h +71 -0
  22. data/vendor/json_pure/ext/json/ext/parser/parser.rl +218 -112
  23. data/vendor/json_pure/lib/json/add/core.rb +20 -7
  24. data/vendor/json_pure/lib/json/add/rails.rb +2 -2
  25. data/vendor/json_pure/lib/json/common.rb +85 -42
  26. data/vendor/json_pure/lib/json/pure.rb +3 -3
  27. data/vendor/json_pure/lib/json/pure/generator.rb +112 -90
  28. data/vendor/json_pure/lib/json/pure/parser.rb +42 -4
  29. data/vendor/json_pure/lib/json/version.rb +1 -1
  30. data/vendor/json_pure/tests/test_json.rb +46 -18
  31. data/vendor/json_pure/tests/test_json_addition.rb +4 -6
  32. data/vendor/json_pure/tests/test_json_encoding.rb +68 -0
  33. data/vendor/json_pure/tests/test_json_generate.rb +30 -14
  34. data/vendor/json_pure/tests/test_json_rails.rb +5 -7
  35. data/vendor/json_pure/tests/test_json_unicode.rb +20 -6
  36. metadata +26 -15
  37. data/vendor/json_pure/doc-templates/main.txt +0 -283
  38. data/vendor/json_pure/ext/json/ext/generator/unicode.c +0 -182
  39. data/vendor/json_pure/ext/json/ext/generator/unicode.h +0 -53
  40. data/vendor/json_pure/ext/json/ext/parser/unicode.c +0 -154
  41. data/vendor/json_pure/ext/json/ext/parser/unicode.h +0 -58
@@ -60,13 +60,50 @@ module JSON
60
60
  # * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
61
61
  # defiance of RFC 4627 to be parsed by the Parser. This option defaults
62
62
  # to false.
63
+ # * *symbolize_names*: If set to true, returns symbols for the names
64
+ # (keys) in a JSON object. Otherwise strings are returned, which is also
65
+ # the default.
63
66
  # * *create_additions*: If set to false, the Parser doesn't create
64
67
  # additions even if a matchin class and create_id was found. This option
65
68
  # defaults to true.
66
69
  # * *object_class*: Defaults to Hash
67
70
  # * *array_class*: Defaults to Array
68
71
  def initialize(source, opts = {})
69
- super
72
+ if defined?(::Encoding)
73
+ if source.encoding == Encoding::ASCII_8BIT
74
+ b = source[0, 4].bytes.to_a
75
+ source = case
76
+ when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0
77
+ source.dup.force_encoding(Encoding::UTF_32BE).encode!(Encoding::UTF_8)
78
+ when b.size >= 4 && b[0] == 0 && b[2] == 0
79
+ source.dup.force_encoding(Encoding::UTF_16BE).encode!(Encoding::UTF_8)
80
+ when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0
81
+ source.dup.force_encoding(Encoding::UTF_32LE).encode!(Encoding::UTF_8)
82
+ when b.size >= 4 && b[1] == 0 && b[3] == 0
83
+ source.dup.force_encoding(Encoding::UTF_16LE).encode!(Encoding::UTF_8)
84
+ else
85
+ source.dup
86
+ end
87
+ else
88
+ source = source.encode(Encoding::UTF_8)
89
+ end
90
+ source.force_encoding(Encoding::ASCII_8BIT)
91
+ else
92
+ b = source
93
+ source = case
94
+ when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0
95
+ JSON.iconv('utf-8', 'utf-32be', b)
96
+ when b.size >= 4 && b[0] == 0 && b[2] == 0
97
+ JSON.iconv('utf-8', 'utf-16be', b)
98
+ when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0
99
+ JSON.iconv('utf-8', 'utf-32le', b)
100
+ when b.size >= 4 && b[1] == 0 && b[3] == 0
101
+ JSON.iconv('utf-8', 'utf-16le', b)
102
+ else
103
+ b
104
+ end
105
+ end
106
+ super source
70
107
  if !opts.key?(:max_nesting) # defaults to 19
71
108
  @max_nesting = 19
72
109
  elsif opts[:max_nesting]
@@ -75,6 +112,7 @@ module JSON
75
112
  @max_nesting = 0
76
113
  end
77
114
  @allow_nan = !!opts[:allow_nan]
115
+ @symbolize_names = !!opts[:symbolize_names]
78
116
  ca = true
79
117
  ca = opts[:create_additions] if opts.key?(:create_additions)
80
118
  @create_id = ca ? JSON.create_id : nil
@@ -188,7 +226,7 @@ module JSON
188
226
  end
189
227
 
190
228
  def parse_array
191
- raise NestingError, "nesting of #@current_nesting is to deep" if
229
+ raise NestingError, "nesting of #@current_nesting is too deep" if
192
230
  @max_nesting.nonzero? && @current_nesting > @max_nesting
193
231
  result = @array_class.new
194
232
  delim = false
@@ -220,7 +258,7 @@ module JSON
220
258
  end
221
259
 
222
260
  def parse_object
223
- raise NestingError, "nesting of #@current_nesting is to deep" if
261
+ raise NestingError, "nesting of #@current_nesting is too deep" if
224
262
  @max_nesting.nonzero? && @current_nesting > @max_nesting
225
263
  result = @object_class.new
226
264
  delim = false
@@ -233,7 +271,7 @@ module JSON
233
271
  end
234
272
  skip(IGNORE)
235
273
  unless (value = parse_value).equal? UNPARSED
236
- result[string] = value
274
+ result[@symbolize_names ? string.to_sym : string] = value
237
275
  delim = false
238
276
  skip(IGNORE)
239
277
  if scan(COLLECTION_DELIMITER)
@@ -1,6 +1,6 @@
1
1
  module JSON
2
2
  # JSON version
3
- VERSION = '1.1.7'
3
+ VERSION = '1.4.2'
4
4
  VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
@@ -9,6 +9,20 @@ else require 'json'
9
9
  end
10
10
  require 'stringio'
11
11
 
12
+ unless Array.method_defined?(:permutation)
13
+ begin
14
+ require 'enumerator'
15
+ require 'permutation'
16
+ class Array
17
+ def permutation
18
+ Permutation.for(self).to_enum.map { |x| x.project }
19
+ end
20
+ end
21
+ rescue LoadError
22
+ warn "Skipping permutation tests."
23
+ end
24
+ end
25
+
12
26
  class TC_JSON < Test::Unit::TestCase
13
27
  include JSON
14
28
 
@@ -94,30 +108,24 @@ class TC_JSON < Test::Unit::TestCase
94
108
  assert_equal({ "a" => 0.23 }, parse(' { "a" : 0.23 } '))
95
109
  end
96
110
 
97
- begin
98
- require 'permutation'
111
+ if Array.method_defined?(:permutation)
99
112
  def test_parse_more_complex_arrays
100
113
  a = [ nil, false, true, "foßbar", [ "n€st€d", true ], { "nested" => true, "n€ßt€ð2" => {} }]
101
- perms = Permutation.for a
102
- perms.each do |perm|
103
- orig_ary = perm.project
104
- json = pretty_generate(orig_ary)
105
- assert_equal orig_ary, parse(json)
114
+ a.permutation.each do |perm|
115
+ json = pretty_generate(perm)
116
+ assert_equal perm, parse(json)
106
117
  end
107
118
  end
108
119
 
109
120
  def test_parse_complex_objects
110
121
  a = [ nil, false, true, "foßbar", [ "n€st€d", true ], { "nested" => true, "n€ßt€ð2" => {} }]
111
- perms = Permutation.for a
112
- perms.each do |perm|
122
+ a.permutation.each do |perm|
113
123
  s = "a"
114
- orig_obj = perm.project.inject({}) { |h, x| h[s.dup] = x; s = s.succ; h }
124
+ orig_obj = perm.inject({}) { |h, x| h[s.dup] = x; s = s.succ; h }
115
125
  json = pretty_generate(orig_obj)
116
126
  assert_equal orig_obj, parse(json)
117
127
  end
118
128
  end
119
- rescue LoadError
120
- warn "Skipping permutation tests."
121
129
  end
122
130
 
123
131
  def test_parse_arrays
@@ -222,27 +230,27 @@ EOT
222
230
  def test_backslash
223
231
  data = [ '\\.(?i:gif|jpe?g|png)$' ]
224
232
  json = '["\\\\.(?i:gif|jpe?g|png)$"]'
225
- assert_equal json, JSON.unparse(data)
233
+ assert_equal json, JSON.generate(data)
226
234
  assert_equal data, JSON.parse(json)
227
235
  #
228
236
  data = [ '\\"' ]
229
237
  json = '["\\\\\""]'
230
- assert_equal json, JSON.unparse(data)
238
+ assert_equal json, JSON.generate(data)
231
239
  assert_equal data, JSON.parse(json)
232
240
  #
233
- json = '["\/"]'
241
+ json = '["/"]'
234
242
  data = JSON.parse(json)
235
243
  assert_equal ['/'], data
236
- assert_equal json, JSON.unparse(data)
244
+ assert_equal json, JSON.generate(data)
237
245
  #
238
246
  json = '["\""]'
239
247
  data = JSON.parse(json)
240
248
  assert_equal ['"'], data
241
- assert_equal json, JSON.unparse(data)
249
+ assert_equal json, JSON.generate(data)
242
250
  json = '["\\\'"]'
243
251
  data = JSON.parse(json)
244
252
  assert_equal ["'"], data
245
- assert_equal '["\'"]', JSON.unparse(data)
253
+ assert_equal '["\'"]', JSON.generate(data)
246
254
  end
247
255
 
248
256
  def test_wrong_inputs
@@ -294,6 +302,13 @@ EOT
294
302
  assert_equal too_deep, ok
295
303
  end
296
304
 
305
+ def test_symbolize_names
306
+ assert_equal({ "foo" => "bar", "baz" => "quux" },
307
+ JSON.parse('{"foo":"bar", "baz":"quux"}'))
308
+ assert_equal({ :foo => "bar", :baz => "quux" },
309
+ JSON.parse('{"foo":"bar", "baz":"quux"}', :symbolize_names => true))
310
+ end
311
+
297
312
  def test_load_dump
298
313
  too_deep = '[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]'
299
314
  assert_equal too_deep, JSON.dump(eval(too_deep))
@@ -309,4 +324,17 @@ EOT
309
324
  JSON.dump(eval(too_deep), output, 20)
310
325
  assert_equal too_deep, output.string
311
326
  end
327
+
328
+ def test_big_integers
329
+ json1 = JSON([orig = (1 << 31) - 1])
330
+ assert_equal orig, JSON[json1][0]
331
+ json2 = JSON([orig = 1 << 31])
332
+ assert_equal orig, JSON[json2][0]
333
+ json3 = JSON([orig = (1 << 62) - 1])
334
+ assert_equal orig, JSON[json3][0]
335
+ json4 = JSON([orig = 1 << 62])
336
+ assert_equal orig, JSON[json4][0]
337
+ json5 = JSON([orig = 1 << 64])
338
+ assert_equal orig, JSON[json5][0]
339
+ end
312
340
  end
@@ -95,7 +95,7 @@ class TC_JSONAddition < Test::Unit::TestCase
95
95
  c = C.new
96
96
  assert !C.json_creatable?
97
97
  json = generate(c)
98
- assert_raises(ArgumentError) { JSON.parse(json) }
98
+ assert_raises(ArgumentError, NameError) { JSON.parse(json) }
99
99
  end
100
100
 
101
101
  def test_raw_strings
@@ -110,11 +110,9 @@ class TC_JSONAddition < Test::Unit::TestCase
110
110
  json_raw_object = raw.to_json_raw_object
111
111
  hash = { 'json_class' => 'String', 'raw'=> raw_array }
112
112
  assert_equal hash, json_raw_object
113
- json_raw = <<EOT.chomp
114
- {\"json_class\":\"String\",\"raw\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255]}
115
- EOT
116
- # "
117
- assert_equal json_raw, json
113
+ assert_match /\A\{.*\}\Z/, json
114
+ assert_match /"json_class":"String"/, json
115
+ assert_match /"raw":\[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255\]/, json
118
116
  raw_again = JSON.parse(json)
119
117
  assert_equal raw, raw_again
120
118
  end
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ require 'test/unit'
5
+ case ENV['JSON']
6
+ when 'pure' then require 'json/pure'
7
+ when 'ext' then require 'json/ext'
8
+ else require 'json'
9
+ end
10
+ require 'iconv'
11
+
12
+ class TC_JSONEncoding < Test::Unit::TestCase
13
+ include JSON
14
+
15
+ def setup
16
+ @utf_8 = '["© ≠ €!"]'
17
+ @parsed = [ "© ≠ €!" ]
18
+ @utf_16_data = Iconv.iconv('utf-16be', 'utf-8', @parsed.first)
19
+ @generated = '["\u00a9 \u2260 \u20ac!"]'
20
+ if defined?(::Encoding)
21
+ @utf_8_ascii_8bit = @utf_8.dup.force_encoding(Encoding::ASCII_8BIT)
22
+ @utf_16be, = Iconv.iconv('utf-16be', 'utf-8', @utf_8)
23
+ @utf_16be_ascii_8bit = @utf_16be.dup.force_encoding(Encoding::ASCII_8BIT)
24
+ @utf_16le, = Iconv.iconv('utf-16le', 'utf-8', @utf_8)
25
+ @utf_16le_ascii_8bit = @utf_16le.dup.force_encoding(Encoding::ASCII_8BIT)
26
+ @utf_32be, = Iconv.iconv('utf-32be', 'utf-8', @utf_8)
27
+ @utf_32be_ascii_8bit = @utf_32be.dup.force_encoding(Encoding::ASCII_8BIT)
28
+ @utf_32le, = Iconv.iconv('utf-32le', 'utf-8', @utf_8)
29
+ @utf_32le_ascii_8bit = @utf_32le.dup.force_encoding(Encoding::ASCII_8BIT)
30
+ else
31
+ @utf_8_ascii_8bit = @utf_8.dup
32
+ @utf_16be, = Iconv.iconv('utf-16be', 'utf-8', @utf_8)
33
+ @utf_16be_ascii_8bit = @utf_16be.dup
34
+ @utf_16le, = Iconv.iconv('utf-16le', 'utf-8', @utf_8)
35
+ @utf_16le_ascii_8bit = @utf_16le.dup
36
+ @utf_32be, = Iconv.iconv('utf-32be', 'utf-8', @utf_8)
37
+ @utf_32be_ascii_8bit = @utf_32be.dup
38
+ @utf_32le, = Iconv.iconv('utf-32le', 'utf-8', @utf_8)
39
+ @utf_32le_ascii_8bit = @utf_32le.dup
40
+ end
41
+ end
42
+
43
+ def test_parse
44
+ assert_equal @parsed, JSON.parse(@utf_8)
45
+ assert_equal @parsed, JSON.parse(@utf_16be)
46
+ assert_equal @parsed, JSON.parse(@utf_16le)
47
+ assert_equal @parsed, JSON.parse(@utf_32be)
48
+ assert_equal @parsed, JSON.parse(@utf_32le)
49
+ end
50
+
51
+ def test_parse_ascii_8bit
52
+ assert_equal @parsed, JSON.parse(@utf_8_ascii_8bit)
53
+ assert_equal @parsed, JSON.parse(@utf_16be_ascii_8bit)
54
+ assert_equal @parsed, JSON.parse(@utf_16le_ascii_8bit)
55
+ assert_equal @parsed, JSON.parse(@utf_32be_ascii_8bit)
56
+ assert_equal @parsed, JSON.parse(@utf_32le_ascii_8bit)
57
+ end
58
+
59
+ def test_generate
60
+ assert_equal @generated, JSON.generate(@parsed, :ascii_only => true)
61
+ if defined?(::Encoding)
62
+ assert_equal @generated, JSON.generate(@utf_16_data, :ascii_only => true)
63
+ else
64
+ # XXX checking of correct utf8 data is not as strict (yet?) without :ascii_only
65
+ assert_raises(JSON::GeneratorError) { JSON.generate(@utf_16_data, :ascii_only => true) }
66
+ end
67
+ end
68
+ end
@@ -44,8 +44,8 @@ class TC_JSONGenerate < Test::Unit::TestCase
44
44
  EOT
45
45
  end
46
46
 
47
- def test_unparse
48
- json = unparse(@hash)
47
+ def test_generate
48
+ json = generate(@hash)
49
49
  assert_equal(JSON.parse(@json2), JSON.parse(json))
50
50
  parsed_json = parse(json)
51
51
  assert_equal(@hash, parsed_json)
@@ -53,10 +53,11 @@ EOT
53
53
  assert_equal('{"1":2}', json)
54
54
  parsed_json = parse(json)
55
55
  assert_equal({"1"=>2}, parsed_json)
56
+ assert_raise(GeneratorError) { generate(666) }
56
57
  end
57
58
 
58
- def test_unparse_pretty
59
- json = pretty_unparse(@hash)
59
+ def test_generate_pretty
60
+ json = pretty_generate(@hash)
60
61
  assert_equal(JSON.parse(@json3), JSON.parse(json))
61
62
  parsed_json = parse(json)
62
63
  assert_equal(@hash, parsed_json)
@@ -68,38 +69,53 @@ EOT
68
69
  EOT
69
70
  parsed_json = parse(json)
70
71
  assert_equal({"1"=>2}, parsed_json)
72
+ assert_raise(GeneratorError) { pretty_generate(666) }
73
+ end
74
+
75
+ def test_fast_generate
76
+ json = fast_generate(@hash)
77
+ assert_equal(JSON.parse(@json2), JSON.parse(json))
78
+ parsed_json = parse(json)
79
+ assert_equal(@hash, parsed_json)
80
+ json = fast_generate({1=>2})
81
+ assert_equal('{"1":2}', json)
82
+ parsed_json = parse(json)
83
+ assert_equal({"1"=>2}, parsed_json)
84
+ assert_raise(GeneratorError) { fast_generate(666) }
71
85
  end
72
86
 
73
87
  def test_states
74
88
  json = generate({1=>2}, nil)
75
89
  assert_equal('{"1":2}', json)
76
- s = JSON.state.new(:check_circular => true)
77
- #assert s.check_circular
90
+ s = JSON.state.new
91
+ assert s.check_circular?
92
+ assert s[:check_circular?]
78
93
  h = { 1=>2 }
79
94
  h[3] = h
80
- assert_raises(JSON::CircularDatastructure) { generate(h) }
81
- assert_raises(JSON::CircularDatastructure) { generate(h, s) }
82
- s = JSON.state.new(:check_circular => true)
83
- #assert s.check_circular
95
+ assert_raises(JSON::NestingError) { generate(h) }
96
+ assert_raises(JSON::NestingError) { generate(h, s) }
97
+ s = JSON.state.new
84
98
  a = [ 1, 2 ]
85
99
  a << a
86
- assert_raises(JSON::CircularDatastructure) { generate(a, s) }
100
+ assert_raises(JSON::NestingError) { generate(a, s) }
101
+ assert s.check_circular?
102
+ assert s[:check_circular?]
87
103
  end
88
104
 
89
105
  def test_allow_nan
90
106
  assert_raises(GeneratorError) { generate([JSON::NaN]) }
91
107
  assert_equal '[NaN]', generate([JSON::NaN], :allow_nan => true)
92
- assert_equal '[NaN]', fast_generate([JSON::NaN])
108
+ assert_raises(GeneratorError) { fast_generate([JSON::NaN]) }
93
109
  assert_raises(GeneratorError) { pretty_generate([JSON::NaN]) }
94
110
  assert_equal "[\n NaN\n]", pretty_generate([JSON::NaN], :allow_nan => true)
95
111
  assert_raises(GeneratorError) { generate([JSON::Infinity]) }
96
112
  assert_equal '[Infinity]', generate([JSON::Infinity], :allow_nan => true)
97
- assert_equal '[Infinity]', fast_generate([JSON::Infinity])
113
+ assert_raises(GeneratorError) { fast_generate([JSON::Infinity]) }
98
114
  assert_raises(GeneratorError) { pretty_generate([JSON::Infinity]) }
99
115
  assert_equal "[\n Infinity\n]", pretty_generate([JSON::Infinity], :allow_nan => true)
100
116
  assert_raises(GeneratorError) { generate([JSON::MinusInfinity]) }
101
117
  assert_equal '[-Infinity]', generate([JSON::MinusInfinity], :allow_nan => true)
102
- assert_equal '[-Infinity]', fast_generate([JSON::MinusInfinity])
118
+ assert_raises(GeneratorError) { fast_generate([JSON::MinusInfinity]) }
103
119
  assert_raises(GeneratorError) { pretty_generate([JSON::MinusInfinity]) }
104
120
  assert_equal "[\n -Infinity\n]", pretty_generate([JSON::MinusInfinity], :allow_nan => true)
105
121
  end
@@ -116,7 +116,7 @@ class TC_JSONRails < Test::Unit::TestCase
116
116
  c = C.new # with rails addition all objects are theoretically creatable
117
117
  assert C.json_creatable?
118
118
  json = generate(c)
119
- assert_raises(ArgumentError) { JSON.parse(json) }
119
+ assert_raises(ArgumentError, NameError) { JSON.parse(json) }
120
120
  end
121
121
 
122
122
  def test_raw_strings
@@ -131,16 +131,14 @@ class TC_JSONRails < Test::Unit::TestCase
131
131
  json_raw_object = raw.to_json_raw_object
132
132
  hash = { 'json_class' => 'String', 'raw'=> raw_array }
133
133
  assert_equal hash, json_raw_object
134
- json_raw = <<EOT.chomp
135
- {\"json_class\":\"String\",\"raw\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255]}
136
- EOT
137
- # "
138
- assert_equal json_raw, json
134
+ assert_match /\A\{.*\}\Z/, json
135
+ assert_match /"json_class":"String"/, json
136
+ assert_match /"raw":\[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255\]/, json
139
137
  raw_again = JSON.parse(json)
140
138
  assert_equal raw, raw_again
141
139
  end
142
140
 
143
141
  def test_symbol
144
- assert_equal '"foo"', JSON(:foo) # we don't want an object here
142
+ assert_equal '"foo"', :foo.to_json # we don't want an object here
145
143
  end
146
144
  end
@@ -19,22 +19,36 @@ class TC_JSONUnicode < Test::Unit::TestCase
19
19
  assert_equal '" "', ' '.to_json
20
20
  assert_equal "\"#{0x7f.chr}\"", 0x7f.chr.to_json
21
21
  utf8 = [ "© ≠ €! \01" ]
22
+ json = '["© ≠ €! \u0001"]'
23
+ assert_equal json, utf8.to_json(:ascii_only => false)
24
+ assert_equal utf8, parse(json)
22
25
  json = '["\u00a9 \u2260 \u20ac! \u0001"]'
23
- assert_equal json, utf8.to_json
26
+ assert_equal json, utf8.to_json(:ascii_only => true)
27
+ assert_equal utf8, parse(json)
28
+ utf8 = ["\343\201\202\343\201\204\343\201\206\343\201\210\343\201\212"]
29
+ json = "[\"\343\201\202\343\201\204\343\201\206\343\201\210\343\201\212\"]"
24
30
  assert_equal utf8, parse(json)
31
+ assert_equal json, utf8.to_json(:ascii_only => false)
25
32
  utf8 = ["\343\201\202\343\201\204\343\201\206\343\201\210\343\201\212"]
33
+ assert_equal utf8, parse(json)
26
34
  json = "[\"\\u3042\\u3044\\u3046\\u3048\\u304a\"]"
27
- assert_equal json, utf8.to_json
35
+ assert_equal json, utf8.to_json(:ascii_only => true)
28
36
  assert_equal utf8, parse(json)
29
37
  utf8 = ['საქართველო']
38
+ json = '["საქართველო"]'
39
+ assert_equal json, utf8.to_json(:ascii_only => false)
30
40
  json = "[\"\\u10e1\\u10d0\\u10e5\\u10d0\\u10e0\\u10d7\\u10d5\\u10d4\\u10da\\u10dd\"]"
31
- assert_equal json, utf8.to_json
41
+ assert_equal json, utf8.to_json(:ascii_only => true)
32
42
  assert_equal utf8, parse(json)
33
- assert_equal '["\\u00c3"]', JSON.generate(["Ã"])
43
+ assert_equal '["Ã"]', JSON.generate(["Ã"], :ascii_only => false)
44
+ assert_equal '["\\u00c3"]', JSON.generate(["Ã"], :ascii_only => true)
34
45
  assert_equal ["€"], JSON.parse('["\u20ac"]')
35
46
  utf8 = ["\xf0\xa0\x80\x81"]
47
+ json = "[\"\xf0\xa0\x80\x81\"]"
48
+ assert_equal json, JSON.generate(utf8, :ascii_only => false)
49
+ assert_equal utf8, JSON.parse(json)
36
50
  json = '["\ud840\udc01"]'
37
- assert_equal json, JSON.generate(utf8)
51
+ assert_equal json, JSON.generate(utf8, :ascii_only => true)
38
52
  assert_equal utf8, JSON.parse(json)
39
53
  end
40
54
 
@@ -55,7 +69,7 @@ class TC_JSONUnicode < Test::Unit::TestCase
55
69
  end
56
70
  end
57
71
  assert_raise(JSON::GeneratorError) do
58
- JSON.generate(["\x80"])
72
+ JSON.generate(["\x80"], :ascii_only => true)
59
73
  end
60
74
  assert_equal "\302\200", JSON.parse('["\u0080"]').first
61
75
  end