source: EcnlProtoTool/trunk/mrbgems/mruby-iijson/test/json.rb@ 331

Last change on this file since 331 was 331, checked in by coas-nagasima, 6 years ago

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby
File size: 3.6 KB
Line 
1assert('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
21end
22
23assert('JSON.generate: false') do
24 assert_equal "false", JSON.generate(false)
25end
26
27assert('JSON.generate: null') do
28 assert_equal "null", JSON.generate(nil)
29end
30
31assert('JSON.generate: true') do
32 assert_equal "true", JSON.generate(true)
33end
34
35assert('JSON.generate: object') do
36 assert_equal '{"key":"value"}', JSON.generate({ "key" => "value" })
37 assert_equal '{"ten":10}', JSON.generate({ :ten => 10 })
38end
39
40assert('JSON.generate: array') do
41 assert_equal '[null,1,"two"]', JSON.generate([ nil, 1, "two"])
42end
43
44assert('JSON.generate: number (Fixnum)') do
45 str = JSON.generate [1]
46 assert_equal "[1]", str
47end
48
49assert('JSON.generate: number (Float)') do
50 str = JSON.generate [134.625]
51 assert_equal "[134.625]", str
52end
53
54assert('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")
58end
59
60assert('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))
69end
70
71assert('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))
103end
104
105assert('JSON::ParserError') do
106 assert_raise(JSON::ParserError) do
107 JSON.parse "[xxx]"
108 end
109end
110
111assert('JSON.parse: empty string is not a valid JSON text') do
112 assert_raise(JSON::ParserError) do
113 JSON.parse ""
114 end
115end
116
117assert('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
132end
133
134assert('#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
145end
Note: See TracBrowser for help on using the repository browser.