diff options
| author | Mark Pulford <mark@kyne.com.au> | 2012-01-14 01:29:07 +1030 |
|---|---|---|
| committer | Mark Pulford <mark@kyne.com.au> | 2012-03-04 18:54:34 +1030 |
| commit | 8e1b49f0dc0819991783d262faf33d5e53d6f621 (patch) | |
| tree | 0c7aeeb5b3070b78a50a16e91293c7c50cb282f4 /tests | |
| parent | a55b836b3152cce4bbb96699dc4b7cb49967c6bc (diff) | |
| download | lua-cjson-8e1b49f0dc0819991783d262faf33d5e53d6f621.tar.gz lua-cjson-8e1b49f0dc0819991783d262faf33d5e53d6f621.tar.bz2 lua-cjson-8e1b49f0dc0819991783d262faf33d5e53d6f621.zip | |
Add descriptions to all tests
Rewrite test framework and add descriptions for all tests.
Diffstat (limited to 'tests')
| -rwxr-xr-x | tests/test.lua | 335 |
1 files changed, 192 insertions, 143 deletions
diff --git a/tests/test.lua b/tests/test.lua index 4b8525b..b1212af 100755 --- a/tests/test.lua +++ b/tests/test.lua | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | local json = require "cjson" | 9 | local json = require "cjson" |
| 10 | local util = require "cjson.util" | 10 | local util = require "cjson.util" |
| 11 | 11 | ||
| 12 | local function gen_ascii() | 12 | local function gen_raw_octets() |
| 13 | local chars = {} | 13 | local chars = {} |
| 14 | for i = 0, 255 do chars[i + 1] = string.char(i) end | 14 | for i = 0, 255 do chars[i + 1] = string.char(i) end |
| 15 | return table.concat(chars) | 15 | return table.concat(chars) |
| @@ -53,205 +53,254 @@ function test_decode_cycle(filename) | |||
| 53 | return util.compare_values(obj1, obj2) | 53 | return util.compare_values(obj1, obj2) |
| 54 | end | 54 | end |
| 55 | 55 | ||
| 56 | -- Set up data used in tests | ||
| 56 | local Inf = math.huge; | 57 | local Inf = math.huge; |
| 57 | local NaN = math.huge * 0; | 58 | local NaN = math.huge * 0; |
| 58 | local octets_raw = gen_ascii() | 59 | |
| 60 | local octets_raw = gen_raw_octets() | ||
| 59 | local octets_escaped = util.file_load("octets-escaped.dat") | 61 | local octets_escaped = util.file_load("octets-escaped.dat") |
| 62 | |||
| 60 | local utf8_loaded, utf8_raw = pcall(util.file_load, "utf8.dat") | 63 | local utf8_loaded, utf8_raw = pcall(util.file_load, "utf8.dat") |
| 61 | if not utf8_loaded then | 64 | if not utf8_loaded then |
| 62 | utf8_raw = "Failed to load utf8.dat" | 65 | utf8_raw = "Failed to load utf8.dat" |
| 63 | end | 66 | end |
| 64 | local utf16_escaped = gen_utf16_escaped() | 67 | local utf16_escaped = gen_utf16_escaped() |
| 68 | |||
| 65 | local nested5 = {{{{{ "nested" }}}}} | 69 | local nested5 = {{{{{ "nested" }}}}} |
| 70 | |||
| 66 | local table_cycle = {} | 71 | local table_cycle = {} |
| 67 | local table_cycle2 = { table_cycle } | 72 | local table_cycle2 = { table_cycle } |
| 68 | table_cycle[1] = table_cycle2 | 73 | table_cycle[1] = table_cycle2 |
| 69 | 74 | ||
| 70 | local decode_simple_tests = { | 75 | local all_tests = { |
| 71 | { json.decode, { '"test string"' }, true, { "test string" } }, | 76 | -- Simple decode tests |
| 72 | { json.decode, { '-5e3' }, true, { -5000 } }, | 77 | { "Decode string", |
| 73 | { json.decode, { 'null' }, true, { json.null } }, | 78 | json.decode, { '"test string"' }, true, { "test string" } }, |
| 74 | { json.decode, { 'true' }, true, { true } }, | 79 | { "Decode number with exponent", |
| 75 | { json.decode, { 'false' }, true, { false } }, | 80 | json.decode, { '-5e3' }, true, { -5000 } }, |
| 76 | { json.decode, { '{ "1": "one", "3": "three" }' }, | 81 | { "Decode null", |
| 82 | json.decode, { 'null' }, true, { json.null } }, | ||
| 83 | { "Decode true", | ||
| 84 | json.decode, { 'true' }, true, { true } }, | ||
| 85 | { "Decode false", | ||
| 86 | json.decode, { 'false' }, true, { false } }, | ||
| 87 | { "Decode object with numeric keys", | ||
| 88 | json.decode, { '{ "1": "one", "3": "three" }' }, | ||
| 77 | true, { { ["1"] = "one", ["3"] = "three" } } }, | 89 | true, { { ["1"] = "one", ["3"] = "three" } } }, |
| 78 | { json.decode, { '[ "one", null, "three" ]' }, | 90 | { "Decode array", |
| 79 | true, { { "one", json.null, "three" } } } | 91 | json.decode, { '[ "one", null, "three" ]' }, |
| 80 | } | 92 | true, { { "one", json.null, "three" } } }, |
| 81 | |||
| 82 | local encode_simple_tests = { | ||
| 83 | { json.encode, { json.null }, true, { 'null' } }, | ||
| 84 | { json.encode, { true }, true, { 'true' } }, | ||
| 85 | { json.encode, { false }, true, { 'false' } }, | ||
| 86 | { json.encode, { { } }, true, { '{}' } }, | ||
| 87 | { json.encode, { 10 }, true, { '10' } }, | ||
| 88 | { json.encode, { NaN }, | ||
| 89 | false, { "Cannot serialise number: must not be NaN or Inf" } }, | ||
| 90 | { json.encode, { Inf }, | ||
| 91 | false, { "Cannot serialise number: must not be NaN or Inf" } }, | ||
| 92 | { json.encode, { "hello" }, true, { '"hello"' } }, | ||
| 93 | } | ||
| 94 | 93 | ||
| 95 | local decode_numeric_tests = { | 94 | -- Numeric decode tests |
| 96 | { json.decode, { '[ 0.0, -1, 0.3e-3, 1023.2 ]' }, | 95 | { "Decode various numbers", |
| 96 | json.decode, { '[ 0.0, -1, 0.3e-3, 1023.2 ]' }, | ||
| 97 | true, { { 0.0, -1, 0.0003, 1023.2 } } }, | 97 | true, { { 0.0, -1, 0.0003, 1023.2 } } }, |
| 98 | { json.decode, { '00123' }, true, { 123 } }, | 98 | { "Decode integer with leading zeros", |
| 99 | { json.decode, { '05.2' }, true, { 5.2 } }, | 99 | json.decode, { '00123' }, true, { 123 } }, |
| 100 | { json.decode, { '0e10' }, true, { 0 } }, | 100 | { "Decode floating point with leading zero", |
| 101 | { json.decode, { '0x6' }, true, { 6 } }, | 101 | json.decode, { '05.2' }, true, { 5.2 } }, |
| 102 | { json.decode, { '[ +Inf, Inf, -Inf ]' }, true, { { Inf, Inf, -Inf } } }, | 102 | { "Decode zero with exponent", |
| 103 | { json.decode, { '[ +Infinity, Infinity, -Infinity ]' }, | 103 | json.decode, { '0e10' }, true, { 0 } }, |
| 104 | { "Decode hexadecimal", | ||
| 105 | json.decode, { '0x6' }, true, { 6 } }, | ||
| 106 | { "Decode +-Inf", | ||
| 107 | json.decode, { '[ +Inf, Inf, -Inf ]' }, true, { { Inf, Inf, -Inf } } }, | ||
| 108 | { "Decode +-Infinity", | ||
| 109 | json.decode, { '[ +Infinity, Infinity, -Infinity ]' }, | ||
| 104 | true, { { Inf, Inf, -Inf } } }, | 110 | true, { { Inf, Inf, -Inf } } }, |
| 105 | { json.decode, { '[ +NaN, NaN, -NaN ]' }, true, { { NaN, NaN, NaN } } }, | 111 | { "Decode +-NaN", |
| 106 | { json.decode, { 'Infrared' }, | 112 | json.decode, { '[ +NaN, NaN, -NaN ]' }, true, { { NaN, NaN, NaN } } }, |
| 113 | { "Decode Infrared (not infinity)", | ||
| 114 | json.decode, { 'Infrared' }, | ||
| 107 | false, { "Expected the end but found invalid token at character 4" } }, | 115 | false, { "Expected the end but found invalid token at character 4" } }, |
| 108 | { json.decode, { 'Noodle' }, | 116 | { "Decode Noodle (not NaN)", |
| 117 | json.decode, { 'Noodle' }, | ||
| 109 | false, { "Expected value but found invalid token at character 1" } }, | 118 | false, { "Expected value but found invalid token at character 1" } }, |
| 110 | } | ||
| 111 | 119 | ||
| 112 | local encode_table_tests = { | 120 | -- Decode error tests |
| 113 | function() | 121 | { "Decode UTF-16BE", |
| 122 | json.decode, { '\0"\0"' }, | ||
| 123 | false, { "JSON parser does not support UTF-16 or UTF-32" } }, | ||
| 124 | { "Decode UTF-16LE", | ||
| 125 | json.decode, { '"\0"\0' }, | ||
| 126 | false, { "JSON parser does not support UTF-16 or UTF-32" } }, | ||
| 127 | { "Decode UTF-32BE", | ||
| 128 | json.decode, { '\0\0\0"' }, | ||
| 129 | false, { "JSON parser does not support UTF-16 or UTF-32" } }, | ||
| 130 | { "Decode UTF-32LE", | ||
| 131 | json.decode, { '"\0\0\0' }, | ||
| 132 | false, { "JSON parser does not support UTF-16 or UTF-32" } }, | ||
| 133 | { "Decode partial JSON", | ||
| 134 | json.decode, { '{ "unexpected eof": ' }, | ||
| 135 | false, { "Expected value but found T_END at character 21" } }, | ||
| 136 | { "Decode with extra comma", | ||
| 137 | json.decode, { '{ "extra data": true }, false' }, | ||
| 138 | false, { "Expected the end but found T_COMMA at character 23" } }, | ||
| 139 | { "Decode invalid escape code", | ||
| 140 | json.decode, { [[ { "bad escape \q code" } ]] }, | ||
| 141 | false, { "Expected object key string but found invalid escape code at character 16" } }, | ||
| 142 | { "Decode invalid unicode escape", | ||
| 143 | json.decode, { [[ { "bad unicode \u0f6 escape" } ]] }, | ||
| 144 | false, { "Expected object key string but found invalid unicode escape code at character 17" } }, | ||
| 145 | { "Decode invalid keyword", | ||
| 146 | json.decode, { ' [ "bad barewood", test ] ' }, | ||
| 147 | false, { "Expected value but found invalid token at character 20" } }, | ||
| 148 | { "Decode invalid number #1", | ||
| 149 | json.decode, { '[ -+12 ]' }, | ||
| 150 | false, { "Expected value but found invalid number at character 3" } }, | ||
| 151 | { "Decode invalid number #2", | ||
| 152 | json.decode, { '-v' }, | ||
| 153 | false, { "Expected value but found invalid number at character 1" } }, | ||
| 154 | { "Decode invalid number exponent", | ||
| 155 | json.decode, { '[ 0.4eg10 ]' }, | ||
| 156 | false, { "Expected comma or array end but found invalid token at character 6" } }, | ||
| 157 | { "Setting decode_max_depth(5)", function () | ||
| 158 | json.decode_max_depth(5) | ||
| 159 | end }, | ||
| 160 | { "Decode array at nested limit", | ||
| 161 | json.decode, { '[[[[[ "nested" ]]]]]' }, | ||
| 162 | true, { {{{{{ "nested" }}}}} } }, | ||
| 163 | { "Decode array over nested limit", | ||
| 164 | json.decode, { '[[[[[[ "nested" ]]]]]]' }, | ||
| 165 | false, { "Too many nested data structures" } }, | ||
| 166 | { "Setting decode_max_depth(1000)", function () | ||
| 167 | json.decode_max_depth(1000) | ||
| 168 | end }, | ||
| 169 | |||
| 170 | -- Simple encode tests | ||
| 171 | { "Encode null", | ||
| 172 | json.encode, { json.null }, true, { 'null' } }, | ||
| 173 | { "Encode true", | ||
| 174 | json.encode, { true }, true, { 'true' } }, | ||
| 175 | { "Encode false", | ||
| 176 | json.encode, { false }, true, { 'false' } }, | ||
| 177 | { "Encode empty object", | ||
| 178 | json.encode, { { } }, true, { '{}' } }, | ||
| 179 | { "Encode integer", | ||
| 180 | json.encode, { 10 }, true, { '10' } }, | ||
| 181 | { "Encode NaN (invalid numbers disabled)", | ||
| 182 | json.encode, { NaN }, | ||
| 183 | false, { "Cannot serialise number: must not be NaN or Inf" } }, | ||
| 184 | { "Encode Infinity (invalid numbers disabled)", | ||
| 185 | json.encode, { Inf }, | ||
| 186 | false, { "Cannot serialise number: must not be NaN or Inf" } }, | ||
| 187 | { "Encode string", | ||
| 188 | json.encode, { "hello" }, true, { '"hello"' } }, | ||
| 189 | |||
| 190 | -- Table encode tests | ||
| 191 | { "Setting sparse array (true, 2, 3) / max depth (5)", function() | ||
| 114 | json.encode_sparse_array(true, 2, 3) | 192 | json.encode_sparse_array(true, 2, 3) |
| 115 | json.encode_max_depth(5) | 193 | json.encode_max_depth(5) |
| 116 | return "Setting sparse array (true, 2, 3) / max depth (5)" | 194 | end }, |
| 117 | end, | 195 | { "Encode sparse table as array #1", |
| 118 | { json.encode, { { [3] = "sparse test" } }, | 196 | json.encode, { { [3] = "sparse test" } }, |
| 119 | true, { '[null,null,"sparse test"]' } }, | 197 | true, { '[null,null,"sparse test"]' } }, |
| 120 | { json.encode, { { [1] = "one", [4] = "sparse test" } }, | 198 | { "Encode sparse table as array #2", |
| 199 | json.encode, { { [1] = "one", [4] = "sparse test" } }, | ||
| 121 | true, { '["one",null,null,"sparse test"]' } }, | 200 | true, { '["one",null,null,"sparse test"]' } }, |
| 122 | { json.encode, { { [1] = "one", [5] = "sparse test" } }, | 201 | { "Encode sparse array as object", |
| 202 | json.encode, { { [1] = "one", [5] = "sparse test" } }, | ||
| 123 | true, { '{"1":"one","5":"sparse test"}' } }, | 203 | true, { '{"1":"one","5":"sparse test"}' } }, |
| 124 | 204 | ||
| 125 | { json.encode, { { ["2"] = "numeric string key test" } }, | 205 | { "Encode table with numeric string key as object", |
| 206 | json.encode, { { ["2"] = "numeric string key test" } }, | ||
| 126 | true, { '{"2":"numeric string key test"}' } }, | 207 | true, { '{"2":"numeric string key test"}' } }, |
| 127 | 208 | ||
| 128 | { json.encode, { nested5 }, true, { '[[[[["nested"]]]]]' } }, | 209 | { "Encode nested table", |
| 129 | { json.encode, { { nested5 } }, | 210 | json.encode, { nested5 }, true, { '[[[[["nested"]]]]]' } }, |
| 211 | { "Encode nested table (throw error)", | ||
| 212 | json.encode, { { nested5 } }, | ||
| 213 | false, { "Cannot serialise, excessive nesting (6)" } }, | ||
| 214 | { "Encode table with cycle", | ||
| 215 | json.encode, { table_cycle }, | ||
| 130 | false, { "Cannot serialise, excessive nesting (6)" } }, | 216 | false, { "Cannot serialise, excessive nesting (6)" } }, |
| 131 | { json.encode, { table_cycle }, | ||
| 132 | false, { "Cannot serialise, excessive nesting (6)" } } | ||
| 133 | } | ||
| 134 | 217 | ||
| 135 | local encode_error_tests = { | 218 | -- Encode error tests |
| 136 | { json.encode, { { [false] = "wrong" } }, | 219 | { "Encode table with incompatible key", |
| 220 | json.encode, { { [false] = "wrong" } }, | ||
| 137 | false, { "Cannot serialise boolean: table key must be a number or string" } }, | 221 | false, { "Cannot serialise boolean: table key must be a number or string" } }, |
| 138 | { json.encode, { function () end }, | 222 | { "Encode Lua function", |
| 223 | json.encode, { function () end }, | ||
| 139 | false, { "Cannot serialise function: type not supported" } }, | 224 | false, { "Cannot serialise function: type not supported" } }, |
| 140 | function () | 225 | { "Setting encode_invalid_numbers(false)", function () |
| 141 | json.encode_invalid_numbers(false) | 226 | json.encode_invalid_numbers(false) |
| 142 | return 'Setting encode_invalid_numbers(false)' | 227 | end }, |
| 143 | end, | 228 | { "Encode NaN (invalid numbers disabled)", |
| 144 | { json.encode, { NaN }, | 229 | json.encode, { NaN }, |
| 145 | false, { "Cannot serialise number: must not be NaN or Inf" } }, | 230 | false, { "Cannot serialise number: must not be NaN or Inf" } }, |
| 146 | { json.encode, { Inf }, | 231 | { "Encode Infinity (invalid numbers disabled)", |
| 232 | json.encode, { Inf }, | ||
| 147 | false, { "Cannot serialise number: must not be NaN or Inf" } }, | 233 | false, { "Cannot serialise number: must not be NaN or Inf" } }, |
| 148 | function () | 234 | { 'Setting encode_invalid_numbers("null").', function () |
| 149 | json.encode_invalid_numbers("null") | 235 | json.encode_invalid_numbers("null") |
| 150 | return 'Setting encode_invalid_numbers("null").' | 236 | end }, |
| 151 | end, | 237 | { "Encode NaN as null", |
| 152 | { json.encode, { NaN }, true, { "null" } }, | 238 | json.encode, { NaN }, true, { "null" } }, |
| 153 | { json.encode, { Inf }, true, { "null" } }, | 239 | { "Encode Infinity as null", |
| 154 | function () | 240 | json.encode, { Inf }, true, { "null" } }, |
| 241 | { 'Setting encode_invalid_numbers(true).', function () | ||
| 155 | json.encode_invalid_numbers(true) | 242 | json.encode_invalid_numbers(true) |
| 156 | return 'Setting encode_invalid_numbers(true).' | 243 | end }, |
| 157 | end, | 244 | { "Encode NaN", |
| 158 | { json.encode, { NaN }, true, { "nan" } }, | 245 | json.encode, { NaN }, true, { "nan" } }, |
| 159 | { json.encode, { Inf }, true, { "inf" } }, | 246 | { "Encode Infinity", |
| 160 | function () | 247 | json.encode, { Inf }, true, { "inf" } }, |
| 248 | { 'Setting encode_invalid_numbers(false)', function () | ||
| 161 | json.encode_invalid_numbers(false) | 249 | json.encode_invalid_numbers(false) |
| 162 | return 'Setting encode_invalid_numbers(false)' | 250 | end }, |
| 163 | end, | ||
| 164 | } | ||
| 165 | |||
| 166 | local decode_error_tests = { | ||
| 167 | { json.decode, { '\0"\0"' }, | ||
| 168 | false, { "JSON parser does not support UTF-16 or UTF-32" } }, | ||
| 169 | { json.decode, { '"\0"\0' }, | ||
| 170 | false, { "JSON parser does not support UTF-16 or UTF-32" } }, | ||
| 171 | { json.decode, { '{ "unexpected eof": ' }, | ||
| 172 | false, { "Expected value but found T_END at character 21" } }, | ||
| 173 | { json.decode, { '{ "extra data": true }, false' }, | ||
| 174 | false, { "Expected the end but found T_COMMA at character 23" } }, | ||
| 175 | { json.decode, { ' { "bad escape \\q code" } ' }, | ||
| 176 | false, { "Expected object key string but found invalid escape code at character 16" } }, | ||
| 177 | { json.decode, { ' { "bad unicode \\u0f6 escape" } ' }, | ||
| 178 | false, { "Expected object key string but found invalid unicode escape code at character 17" } }, | ||
| 179 | { json.decode, { ' [ "bad barewood", test ] ' }, | ||
| 180 | false, { "Expected value but found invalid token at character 20" } }, | ||
| 181 | { json.decode, { '[ -+12 ]' }, | ||
| 182 | false, { "Expected value but found invalid number at character 3" } }, | ||
| 183 | { json.decode, { '-v' }, | ||
| 184 | false, { "Expected value but found invalid number at character 1" } }, | ||
| 185 | { json.decode, { '[ 0.4eg10 ]' }, | ||
| 186 | false, { "Expected comma or array end but found invalid token at character 6" } }, | ||
| 187 | function () | ||
| 188 | json.decode_max_depth(5) | ||
| 189 | return "Setting decode_max_depth(5)" | ||
| 190 | end, | ||
| 191 | { json.decode, { '[[[[[ "nested" ]]]]]' }, | ||
| 192 | true, { {{{{{ "nested" }}}}} } }, | ||
| 193 | { json.decode, { '[[[[[[ "nested" ]]]]]]' }, | ||
| 194 | false, { "Too many nested data structures" } }, | ||
| 195 | function () | ||
| 196 | json.decode_max_depth(1000) | ||
| 197 | return "Setting decode_max_depth(1000)" | ||
| 198 | end | ||
| 199 | } | ||
| 200 | 251 | ||
| 201 | local escape_tests = { | 252 | -- Escaping tests |
| 202 | -- Test 8bit clean | 253 | { "Encode all octets (8-bit clean)", |
| 203 | { json.encode, { octets_raw }, true, { octets_escaped } }, | 254 | json.encode, { octets_raw }, true, { octets_escaped } }, |
| 204 | { json.decode, { octets_escaped }, true, { octets_raw } }, | 255 | { "Decode all escaped octets", |
| 205 | -- Ensure high bits are removed from surrogate codes | 256 | json.decode, { octets_escaped }, true, { octets_raw } }, |
| 206 | { json.decode, { '"\\uF800"' }, true, { "\239\160\128" } }, | 257 | { "Decode single UTF-16 escape", |
| 207 | -- Test inverted surrogate pairs | 258 | json.decode, { [["\uF800"]] }, true, { "\239\160\128" } }, |
| 208 | { json.decode, { '"\\uDB00\\uD800"' }, | 259 | { "Decode swapped surrogate pair", |
| 260 | json.decode, { [["\uDC00\uD800"]] }, | ||
| 209 | false, { "Expected value but found invalid unicode escape code at character 2" } }, | 261 | false, { "Expected value but found invalid unicode escape code at character 2" } }, |
| 210 | -- Test 2x high surrogate code units | 262 | { "Decode duplicate high surrogate", |
| 211 | { json.decode, { '"\\uDB00\\uDB00"' }, | 263 | json.decode, { [["\uDB00\uDB00"]] }, |
| 212 | false, { "Expected value but found invalid unicode escape code at character 2" } }, | 264 | false, { "Expected value but found invalid unicode escape code at character 2" } }, |
| 213 | -- Test invalid 2nd escape | 265 | { "Decode duplicate low surrogate", |
| 214 | { json.decode, { '"\\uDB00\\"' }, | 266 | json.decode, { [["\uDB00\uDB00"]] }, |
| 215 | false, { "Expected value but found invalid unicode escape code at character 2" } }, | 267 | false, { "Expected value but found invalid unicode escape code at character 2" } }, |
| 216 | { json.decode, { '"\\uDB00\\uD"' }, | 268 | { "Decode missing low surrogate", |
| 269 | json.decode, { [["\uDB00"]] }, | ||
| 217 | false, { "Expected value but found invalid unicode escape code at character 2" } }, | 270 | false, { "Expected value but found invalid unicode escape code at character 2" } }, |
| 218 | -- Test decoding of all UTF-16 escapes | 271 | { "Decode invalid low surrogate", |
| 219 | { json.decode, { utf16_escaped }, true, { utf8_raw } } | 272 | json.decode, { [["\uDB00\uD"]] }, |
| 220 | } | 273 | false, { "Expected value but found invalid unicode escape code at character 2" } }, |
| 274 | { "Decode all UTF-16 escapes (including surrogate combinations)", | ||
| 275 | json.decode, { utf16_escaped }, true, { utf8_raw } }, | ||
| 221 | 276 | ||
| 222 | -- The standard Lua interpreter is ANSI C online doesn't support locales | 277 | -- Locale tests |
| 223 | -- by default. Force a known problematic locale to test strtod()/sprintf(). | 278 | -- |
| 224 | local locale_tests = { | 279 | -- The standard Lua interpreter is ANSI C online doesn't support locales |
| 225 | function () | 280 | -- by default. Force a known problematic locale to test strtod()/sprintf(). |
| 281 | { "Setting locale to cs_CZ (comma separator)", function () | ||
| 226 | os.setlocale("cs_CZ") | 282 | os.setlocale("cs_CZ") |
| 227 | json.new() | 283 | json.new() |
| 228 | return "Setting locale to cs_CZ (comma separator)" | 284 | end }, |
| 229 | end, | 285 | { "Encode number under comma locale", |
| 230 | { json.encode, { 1.5 }, true, { '1.5' } }, | 286 | json.encode, { 1.5 }, true, { '1.5' } }, |
| 231 | { json.decode, { "[ 10, \"test\" ]" }, true, { { 10, "test" } } }, | 287 | { "Decode number in array under comma locale", |
| 232 | function () | 288 | json.decode, { '[ 10, "test" ]' }, true, { { 10, "test" } } }, |
| 289 | { "Reverting locale to POSIX", function () | ||
| 233 | os.setlocale("C") | 290 | os.setlocale("C") |
| 234 | json.new() | 291 | json.new() |
| 235 | return "Reverting locale to POSIX" | 292 | end }, |
| 236 | end | ||
| 237 | } | 293 | } |
| 238 | 294 | ||
| 239 | print(string.format("Testing Lua CJSON version %s\n", json.version)) | 295 | print(string.format("Testing Lua CJSON version %s\n", json.version)) |
| 240 | 296 | ||
| 241 | util.run_test_group("decode simple value", decode_simple_tests) | 297 | util.run_test_group(all_tests) |
| 242 | util.run_test_group("encode simple value", encode_simple_tests) | ||
| 243 | util.run_test_group("decode numeric", decode_numeric_tests) | ||
| 244 | util.run_test_group("encode table", encode_table_tests) | ||
| 245 | util.run_test_group("decode error", decode_error_tests) | ||
| 246 | util.run_test_group("encode error", encode_error_tests) | ||
| 247 | util.run_test_group("escape", escape_tests) | ||
| 248 | util.run_test_group("locale", locale_tests) | ||
| 249 | 298 | ||
| 250 | json.encode_invalid_numbers(true) | 299 | json.encode_invalid_numbers(true) |
| 251 | json.decode_invalid_numbers(true) | 300 | json.decode_invalid_numbers(true) |
| 252 | json.encode_max_depth(20) | 301 | json.encode_max_depth(20) |
| 253 | for i = 1, #arg do | 302 | for i = 1, #arg do |
| 254 | util.run_test("decode cycle " .. arg[i], test_decode_cycle, { arg[i] }, | 303 | util.run_test("Decode cycle " .. arg[i], test_decode_cycle, { arg[i] }, |
| 255 | true, { true }) | 304 | true, { true }) |
| 256 | end | 305 | end |
| 257 | 306 | ||
