56 lines
1.5 KiB
Lua
56 lines
1.5 KiB
Lua
local json = require("json")
|
|
local lunit = require("lunit")
|
|
local testutil = require("testutil")
|
|
-- DECODE NOT 'local' due to requirement for testutil to access it
|
|
decode = json.decode.getDecoder(false)
|
|
|
|
module("lunit-tests", lunit.testcase, package.seeall)
|
|
|
|
function setup()
|
|
_G["decode"] = json.decode.getDecoder(false)
|
|
end
|
|
|
|
function test_array_empty()
|
|
local ret = assert_table(decode("[]"))
|
|
assert_equal(0, #ret)
|
|
assert_nil(next(ret))
|
|
end
|
|
|
|
function test_array_trailComma_nostrict()
|
|
local ret = assert_table(decode("[true,]"))
|
|
assert_equal(true, ret[1])
|
|
assert_nil(next(ret, 1))
|
|
assert_equal(1, #ret)
|
|
end
|
|
|
|
function test_array_innerComma()
|
|
assert_error(function()
|
|
decode("[true,,true]")
|
|
end)
|
|
end
|
|
|
|
function test_preprocess()
|
|
assert_equal('"Hello"', json.encode(1, {preProcess = function() return "Hello" end}))
|
|
assert_equal('-1', json.encode(1, {preProcess = function(x) return -x end}))
|
|
assert_equal('-Infinity', json.encode(1/0, {preProcess = function(x) return -x end}))
|
|
end
|
|
|
|
local strictDecoder = json.decode.getDecoder(true)
|
|
|
|
local function buildStrictDecoder(f)
|
|
return testutil.buildPatchedDecoder(f, strictDecoder)
|
|
end
|
|
local function buildFailedStrictDecoder(f)
|
|
return testutil.buildFailedPatchedDecoder(f, strictDecoder)
|
|
end
|
|
-- SETUP CHECKS FOR SEQUENCE OF DECODERS
|
|
for k, v in pairs(_M) do
|
|
if k:match("^test_") and not k:match("_gen$") then
|
|
if k:match("_nostrict") then
|
|
_M[k .. "_strict_gen"] = buildFailedStrictDecoder(v)
|
|
else
|
|
_M[k .. "_strict_gen"] = buildStrictDecoder(v)
|
|
end
|
|
end
|
|
end
|