mirror of
https://github.com/BeamMP/BeamMP-Server.git
synced 2025-06-30 23:06:05 +00:00
67 lines
2.8 KiB
Lua
67 lines
2.8 KiB
Lua
local function assert_eq(x, y, explain)
|
|
if x ~= y then
|
|
print("assertion '"..explain.."' failed:\n\tgot:\t", x, "\n\texpected:", y)
|
|
end
|
|
end
|
|
|
|
---@param o1 any|table First object to compare
|
|
---@param o2 any|table Second object to compare
|
|
---@param ignore_mt boolean True to ignore metatables (a recursive function to tests tables inside tables)
|
|
function equals(o1, o2, ignore_mt)
|
|
if o1 == o2 then return true end
|
|
local o1Type = type(o1)
|
|
local o2Type = type(o2)
|
|
if o1Type ~= o2Type then return false end
|
|
if o1Type ~= 'table' then return false end
|
|
|
|
if not ignore_mt then
|
|
local mt1 = getmetatable(o1)
|
|
if mt1 and mt1.__eq then
|
|
--compare using built in method
|
|
return o1 == o2
|
|
end
|
|
end
|
|
|
|
local keySet = {}
|
|
|
|
for key1, value1 in pairs(o1) do
|
|
local value2 = o2[key1]
|
|
if value2 == nil or equals(value1, value2, ignore_mt) == false then
|
|
return false
|
|
end
|
|
keySet[key1] = true
|
|
end
|
|
|
|
for key2, _ in pairs(o2) do
|
|
if not keySet[key2] then return false end
|
|
end
|
|
return true
|
|
end
|
|
|
|
|
|
local function assert_table_eq(x, y, explain)
|
|
if not equals(x, y, true) then
|
|
print("assertion '"..explain.."' failed:\n\tgot:\t", x, "\n\texpected:", y)
|
|
end
|
|
end
|
|
|
|
assert_eq(Util.JsonEncode({1, 2, 3, 4, 5}), "[1,2,3,4,5]", "table to array")
|
|
assert_eq(Util.JsonEncode({"a", 1, 2, 3, 4, 5}), '["a",1,2,3,4,5]', "table to array")
|
|
assert_eq(Util.JsonEncode({"a", 1, 2.0, 3, 4, 5}), '["a",1,2.0,3,4,5]', "table to array")
|
|
assert_eq(Util.JsonEncode({hello="world", john={doe = 1, jane = 2.5, mike = {2, 3, 4}}, dave={}}), '{"dave":{},"hello":"world","john":{"doe":1,"jane":2.5,"mike":[2,3,4]}}', "table to obj")
|
|
assert_eq(Util.JsonEncode({a = nil}), "{}", "null obj member")
|
|
assert_eq(Util.JsonEncode({1, nil, 3}), "[1,3]", "null array member")
|
|
assert_eq(Util.JsonEncode({}), "{}", "empty array/table")
|
|
assert_eq(Util.JsonEncode({1234}), "[1234]", "int")
|
|
assert_eq(Util.JsonEncode({1234.0}), "[1234.0]", "double")
|
|
|
|
assert_table_eq(Util.JsonDecode("[1,2,3,4,5]"), {1, 2, 3, 4, 5}, "decode table to array")
|
|
assert_table_eq(Util.JsonDecode('["a",1,2,3,4,5]'), {"a", 1, 2, 3, 4, 5}, "decode table to array")
|
|
assert_table_eq(Util.JsonDecode('["a",1,2.0,3,4,5]'), {"a", 1, 2.0, 3, 4, 5}, "decode table to array")
|
|
assert_table_eq(Util.JsonDecode('{"dave":{},"hello":"world","john":{"doe":1,"jane":2.5,"mike":[2,3,4]}}'), {hello="world", john={doe = 1, jane = 2.5, mike = {2, 3, 4}}, dave={}}, "decode table to obj")
|
|
assert_table_eq(Util.JsonDecode("{}"), {a = nil}, "decode null obj member")
|
|
assert_table_eq(Util.JsonDecode("[1,3]"), {1, 3}, "decode null array member")
|
|
assert_table_eq(Util.JsonDecode("{}"), {}, "decode empty array/table")
|
|
assert_table_eq(Util.JsonDecode("[1234]"), {1234}, "decode int")
|
|
assert_table_eq(Util.JsonDecode("[1234.0]"), {1234.0}, "decode double")
|