mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
54592ad627
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27493 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
122 lines
3.5 KiB
Ruby
Executable file
122 lines
3.5 KiB
Ruby
Executable file
#!/usr/bin/env ruby
|
|
# -*- coding: utf-8 -*-
|
|
|
|
require 'test/unit'
|
|
case ENV['JSON']
|
|
when 'pure' then require 'json/pure'
|
|
when 'ext' then require 'json/ext'
|
|
else require 'json'
|
|
end
|
|
|
|
class TC_JSONGenerate < Test::Unit::TestCase
|
|
include JSON
|
|
|
|
def setup
|
|
@hash = {
|
|
'a' => 2,
|
|
'b' => 3.141,
|
|
'c' => 'c',
|
|
'd' => [ 1, "b", 3.14 ],
|
|
'e' => { 'foo' => 'bar' },
|
|
'g' => "\"\0\037",
|
|
'h' => 1000.0,
|
|
'i' => 0.001
|
|
}
|
|
@json2 = '{"a":2,"b":3.141,"c":"c","d":[1,"b",3.14],"e":{"foo":"bar"},' +
|
|
'"g":"\\"\\u0000\\u001f","h":1000.0,"i":0.001}'
|
|
@json3 = <<'EOT'.chomp
|
|
{
|
|
"a": 2,
|
|
"b": 3.141,
|
|
"c": "c",
|
|
"d": [
|
|
1,
|
|
"b",
|
|
3.14
|
|
],
|
|
"e": {
|
|
"foo": "bar"
|
|
},
|
|
"g": "\"\u0000\u001f",
|
|
"h": 1000.0,
|
|
"i": 0.001
|
|
}
|
|
EOT
|
|
end
|
|
|
|
def test_generate
|
|
json = generate(@hash)
|
|
assert_equal(JSON.parse(@json2), JSON.parse(json))
|
|
parsed_json = parse(json)
|
|
assert_equal(@hash, parsed_json)
|
|
json = generate({1=>2})
|
|
assert_equal('{"1":2}', json)
|
|
parsed_json = parse(json)
|
|
assert_equal({"1"=>2}, parsed_json)
|
|
assert_raise(GeneratorError) { generate(666) }
|
|
end
|
|
|
|
def test_generate_pretty
|
|
json = pretty_generate(@hash)
|
|
assert_equal(JSON.parse(@json3), JSON.parse(json))
|
|
parsed_json = parse(json)
|
|
assert_equal(@hash, parsed_json)
|
|
json = pretty_generate({1=>2})
|
|
assert_equal(<<'EOT'.chomp, json)
|
|
{
|
|
"1": 2
|
|
}
|
|
EOT
|
|
parsed_json = parse(json)
|
|
assert_equal({"1"=>2}, parsed_json)
|
|
assert_raise(GeneratorError) { pretty_generate(666) }
|
|
end
|
|
|
|
def test_fast_generate
|
|
json = fast_generate(@hash)
|
|
assert_equal(JSON.parse(@json2), JSON.parse(json))
|
|
parsed_json = parse(json)
|
|
assert_equal(@hash, parsed_json)
|
|
json = fast_generate({1=>2})
|
|
assert_equal('{"1":2}', json)
|
|
parsed_json = parse(json)
|
|
assert_equal({"1"=>2}, parsed_json)
|
|
assert_raise(GeneratorError) { fast_generate(666) }
|
|
end
|
|
|
|
def test_states
|
|
json = generate({1=>2}, nil)
|
|
assert_equal('{"1":2}', json)
|
|
s = JSON.state.new
|
|
assert s.check_circular?
|
|
assert s[:check_circular?]
|
|
h = { 1=>2 }
|
|
h[3] = h
|
|
assert_raises(JSON::NestingError) { generate(h) }
|
|
assert_raises(JSON::NestingError) { generate(h, s) }
|
|
s = JSON.state.new
|
|
a = [ 1, 2 ]
|
|
a << a
|
|
assert_raises(JSON::NestingError) { generate(a, s) }
|
|
assert s.check_circular?
|
|
assert s[:check_circular?]
|
|
end
|
|
|
|
def test_allow_nan
|
|
assert_raises(GeneratorError) { generate([JSON::NaN]) }
|
|
assert_equal '[NaN]', generate([JSON::NaN], :allow_nan => true)
|
|
assert_raises(GeneratorError) { fast_generate([JSON::NaN]) }
|
|
assert_raises(GeneratorError) { pretty_generate([JSON::NaN]) }
|
|
assert_equal "[\n NaN\n]", pretty_generate([JSON::NaN], :allow_nan => true)
|
|
assert_raises(GeneratorError) { generate([JSON::Infinity]) }
|
|
assert_equal '[Infinity]', generate([JSON::Infinity], :allow_nan => true)
|
|
assert_raises(GeneratorError) { fast_generate([JSON::Infinity]) }
|
|
assert_raises(GeneratorError) { pretty_generate([JSON::Infinity]) }
|
|
assert_equal "[\n Infinity\n]", pretty_generate([JSON::Infinity], :allow_nan => true)
|
|
assert_raises(GeneratorError) { generate([JSON::MinusInfinity]) }
|
|
assert_equal '[-Infinity]', generate([JSON::MinusInfinity], :allow_nan => true)
|
|
assert_raises(GeneratorError) { fast_generate([JSON::MinusInfinity]) }
|
|
assert_raises(GeneratorError) { pretty_generate([JSON::MinusInfinity]) }
|
|
assert_equal "[\n -Infinity\n]", pretty_generate([JSON::MinusInfinity], :allow_nan => true)
|
|
end
|
|
end
|