summaryrefslogtreecommitdiffstats
path: root/debian/vendor-h2o/deps/mruby-iijson/test/json.rb
blob: 5b1e759c876554592470998ef2f5465d3b92e83b (plain)
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
assert('JSON.dump') do
  class JsonTestIo
    def initialize
      @buf = ""
    end
    def write(str)
      @buf += str
    end
    attr_reader :buf
  end
  assert_equal "[1]", JSON.dump([1])

  jio = JsonTestIo.new
  JSON.dump(["abc"], jio)
  assert_equal '["abc"]', jio.buf

  assert_raise(ArgumentError) do
    JSON.dump({:a => {:b => {} } }, nil, 2)
  end
  JSON.dump({:a=>{:b=>{}}}, nil, 3)  # should not raise
end

assert('JSON.generate: false') do
  assert_equal "false", JSON.generate(false)
end

assert('JSON.generate: null') do
  assert_equal "null", JSON.generate(nil)
end

assert('JSON.generate: true') do
  assert_equal "true", JSON.generate(true)
end

assert('JSON.generate: object') do
  assert_equal '{"key":"value"}', JSON.generate({ "key" => "value" })
  assert_equal '{"ten":10}', JSON.generate({ :ten => 10 })
end

assert('JSON.generate: array') do
  assert_equal '[null,1,"two"]', JSON.generate([ nil, 1, "two"])
end

assert('JSON.generate: number (Fixnum)') do
  str = JSON.generate [1]
  assert_equal "[1]", str
end

assert('JSON.generate: number (Float)') do
  str = JSON.generate [134.625]
  assert_equal "[134.625]", str
end

assert('JSON.generate: string') do
  assert_equal "\"abc\"", JSON.generate("abc")
  assert_equal "\"\\\"\\\\/\\b\\f\\n\\r\\t\"",
    JSON.generate("\x22\x5c\x2f\x08\x0c\x0a\x0d\x09")
end

assert('JSON.load') do
  assert_equal [1,2,3], JSON.load("[1,2,3]")

  class JsonTestReader
    def read
      '{"abc":123}'
    end
  end
  assert_equal({"abc"=>123}, JSON.load(JsonTestReader.new))
end

assert('JSON.parse: text from RFC4726') do
  str = '{
    "Image": {
      "Width":  800,
      "Height": 600,
      "Title":  "View from 15th Floor",
      "Thumbnail": {
        "Url":    "http://www.example.com/image/481989943",
        "Height": 125,
        "Width":  "100"
      },
      "IDs": [116, 943, 234, 38793]
    }
  }'
  hash = {
    "Image" => {
      "Width" => 800,
      "Height" => 600,
      "Title" => "View from 15th Floor",
      "Thumbnail" => {
        "Url" => "http://www.example.com/image/481989943",
        "Height" => 125,
        "Width" => "100"
      },
      "IDs" => [116, 943, 234, 38793]
    }
  }
  assert_equal hash, JSON.parse(str)

  # We cannot compare `str` with `JSON.generate(hash)` because Hash entries
  # will be in a random order.
  assert_equal hash, JSON.parse(JSON.generate(hash))
end

assert('JSON::ParserError') do
  assert_raise(JSON::ParserError) do
    JSON.parse "[xxx]"
  end
end

assert('JSON.parse: empty string is not a valid JSON text') do
  assert_raise(JSON::ParserError) do
    JSON.parse ""
  end
end

assert('JSON.parse: parsing numbers around MRB_INT_MIN/MRB_INT_MAX') do
  int_min = TestJSON::MRB_INT_MIN
  int_max = TestJSON::MRB_INT_MAX

  assert_kind_of Fixnum, JSON.load(int_min.to_s)
  assert_equal int_min, JSON.load(int_min.to_s)

  assert_kind_of Fixnum, JSON.load(int_max.to_s)
  assert_equal int_max, JSON.load(int_max.to_s)

  assert_kind_of Float, JSON.load((int_min-1).to_s)
  assert_float (int_min-1)/int_min, JSON.load((int_min-1).to_s)/int_min

  assert_kind_of Float, JSON.load((int_max+1).to_s)
  assert_float (int_max+1)/int_max, JSON.load((int_max+1).to_s)/int_max
end

assert('#to_json') do
  assert_equal 'false',     false.to_json
  assert_equal 'null',      nil.to_json
  assert_equal 'true',      true.to_json
  assert_equal '1',         1.to_json
  assert_equal '3.125',      3.125.to_json
  assert_equal '"str"',     "str".to_json
  assert_equal '["one",2]', [ "one", 2 ].to_json
  assert_equal '{"a":1}',   { "a" => 1 }.to_json
  assert_equal TestJSON::MRB_INT_MIN.to_s, TestJSON::MRB_INT_MIN.to_json
  assert_equal TestJSON::MRB_INT_MAX.to_s, TestJSON::MRB_INT_MAX.to_json
end