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
|
---|