[331] | 1 | assert('JSON.dump') do
|
---|
| 2 | class JsonTestIo
|
---|
| 3 | def initialize
|
---|
| 4 | @buf = ""
|
---|
| 5 | end
|
---|
| 6 | def write(str)
|
---|
| 7 | @buf += str
|
---|
| 8 | end
|
---|
| 9 | attr_reader :buf
|
---|
| 10 | end
|
---|
| 11 | assert_equal "[1]", JSON.dump([1])
|
---|
| 12 |
|
---|
| 13 | jio = JsonTestIo.new
|
---|
| 14 | JSON.dump(["abc"], jio)
|
---|
| 15 | assert_equal '["abc"]', jio.buf
|
---|
| 16 |
|
---|
| 17 | assert_raise(ArgumentError) do
|
---|
| 18 | JSON.dump({:a => {:b => {} } }, nil, 2)
|
---|
| 19 | end
|
---|
| 20 | JSON.dump({:a=>{:b=>{}}}, nil, 3) # should not raise
|
---|
| 21 | end
|
---|
| 22 |
|
---|
| 23 | assert('JSON.generate: false') do
|
---|
| 24 | assert_equal "false", JSON.generate(false)
|
---|
| 25 | end
|
---|
| 26 |
|
---|
| 27 | assert('JSON.generate: null') do
|
---|
| 28 | assert_equal "null", JSON.generate(nil)
|
---|
| 29 | end
|
---|
| 30 |
|
---|
| 31 | assert('JSON.generate: true') do
|
---|
| 32 | assert_equal "true", JSON.generate(true)
|
---|
| 33 | end
|
---|
| 34 |
|
---|
| 35 | assert('JSON.generate: object') do
|
---|
| 36 | assert_equal '{"key":"value"}', JSON.generate({ "key" => "value" })
|
---|
| 37 | assert_equal '{"ten":10}', JSON.generate({ :ten => 10 })
|
---|
| 38 | end
|
---|
| 39 |
|
---|
| 40 | assert('JSON.generate: array') do
|
---|
| 41 | assert_equal '[null,1,"two"]', JSON.generate([ nil, 1, "two"])
|
---|
| 42 | end
|
---|
| 43 |
|
---|
| 44 | assert('JSON.generate: number (Fixnum)') do
|
---|
| 45 | str = JSON.generate [1]
|
---|
| 46 | assert_equal "[1]", str
|
---|
| 47 | end
|
---|
| 48 |
|
---|
| 49 | assert('JSON.generate: number (Float)') do
|
---|
| 50 | str = JSON.generate [134.625]
|
---|
| 51 | assert_equal "[134.625]", str
|
---|
| 52 | end
|
---|
| 53 |
|
---|
| 54 | assert('JSON.generate: string') do
|
---|
| 55 | assert_equal "\"abc\"", JSON.generate("abc")
|
---|
| 56 | assert_equal "\"\\\"\\\\/\\b\\f\\n\\r\\t\"",
|
---|
| 57 | JSON.generate("\x22\x5c\x2f\x08\x0c\x0a\x0d\x09")
|
---|
| 58 | end
|
---|
| 59 |
|
---|
| 60 | assert('JSON.load') do
|
---|
| 61 | assert_equal [1,2,3], JSON.load("[1,2,3]")
|
---|
| 62 |
|
---|
| 63 | class JsonTestReader
|
---|
| 64 | def read
|
---|
| 65 | '{"abc":123}'
|
---|
| 66 | end
|
---|
| 67 | end
|
---|
| 68 | assert_equal({"abc"=>123}, JSON.load(JsonTestReader.new))
|
---|
| 69 | end
|
---|
| 70 |
|
---|
| 71 | assert('JSON.parse: text from RFC4726') do
|
---|
| 72 | str = '{
|
---|
| 73 | "Image": {
|
---|
| 74 | "Width": 800,
|
---|
| 75 | "Height": 600,
|
---|
| 76 | "Title": "View from 15th Floor",
|
---|
| 77 | "Thumbnail": {
|
---|
| 78 | "Url": "http://www.example.com/image/481989943",
|
---|
| 79 | "Height": 125,
|
---|
| 80 | "Width": "100"
|
---|
| 81 | },
|
---|
| 82 | "IDs": [116, 943, 234, 38793]
|
---|
| 83 | }
|
---|
| 84 | }'
|
---|
| 85 | hash = {
|
---|
| 86 | "Image" => {
|
---|
| 87 | "Width" => 800,
|
---|
| 88 | "Height" => 600,
|
---|
| 89 | "Title" => "View from 15th Floor",
|
---|
| 90 | "Thumbnail" => {
|
---|
| 91 | "Url" => "http://www.example.com/image/481989943",
|
---|
| 92 | "Height" => 125,
|
---|
| 93 | "Width" => "100"
|
---|
| 94 | },
|
---|
| 95 | "IDs" => [116, 943, 234, 38793]
|
---|
| 96 | }
|
---|
| 97 | }
|
---|
| 98 | assert_equal hash, JSON.parse(str)
|
---|
| 99 |
|
---|
| 100 | # We cannot compare `str` with `JSON.generate(hash)` because Hash entries
|
---|
| 101 | # will be in a random order.
|
---|
| 102 | assert_equal hash, JSON.parse(JSON.generate(hash))
|
---|
| 103 | end
|
---|
| 104 |
|
---|
| 105 | assert('JSON::ParserError') do
|
---|
| 106 | assert_raise(JSON::ParserError) do
|
---|
| 107 | JSON.parse "[xxx]"
|
---|
| 108 | end
|
---|
| 109 | end
|
---|
| 110 |
|
---|
| 111 | assert('JSON.parse: empty string is not a valid JSON text') do
|
---|
| 112 | assert_raise(JSON::ParserError) do
|
---|
| 113 | JSON.parse ""
|
---|
| 114 | end
|
---|
| 115 | end
|
---|
| 116 |
|
---|
| 117 | assert('JSON.parse: parsing numbers around MRB_INT_MIN/MRB_INT_MAX') do
|
---|
| 118 | int_min = TestJSON::MRB_INT_MIN
|
---|
| 119 | int_max = TestJSON::MRB_INT_MAX
|
---|
| 120 |
|
---|
| 121 | assert_kind_of Fixnum, JSON.load(int_min.to_s)
|
---|
| 122 | assert_equal int_min, JSON.load(int_min.to_s)
|
---|
| 123 |
|
---|
| 124 | assert_kind_of Fixnum, JSON.load(int_max.to_s)
|
---|
| 125 | assert_equal int_max, JSON.load(int_max.to_s)
|
---|
| 126 |
|
---|
| 127 | assert_kind_of Float, JSON.load((int_min-1).to_s)
|
---|
| 128 | assert_float (int_min-1)/int_min, JSON.load((int_min-1).to_s)/int_min
|
---|
| 129 |
|
---|
| 130 | assert_kind_of Float, JSON.load((int_max+1).to_s)
|
---|
| 131 | assert_float (int_max+1)/int_max, JSON.load((int_max+1).to_s)/int_max
|
---|
| 132 | end
|
---|
| 133 |
|
---|
| 134 | assert('#to_json') do
|
---|
| 135 | assert_equal 'false', false.to_json
|
---|
| 136 | assert_equal 'null', nil.to_json
|
---|
| 137 | assert_equal 'true', true.to_json
|
---|
| 138 | assert_equal '1', 1.to_json
|
---|
| 139 | assert_equal '3.125', 3.125.to_json
|
---|
| 140 | assert_equal '"str"', "str".to_json
|
---|
| 141 | assert_equal '["one",2]', [ "one", 2 ].to_json
|
---|
| 142 | assert_equal '{"a":1}', { "a" => 1 }.to_json
|
---|
| 143 | assert_equal TestJSON::MRB_INT_MIN.to_s, TestJSON::MRB_INT_MIN.to_json
|
---|
| 144 | assert_equal TestJSON::MRB_INT_MAX.to_s, TestJSON::MRB_INT_MAX.to_json
|
---|
| 145 | end
|
---|