IMPORTANT: due to a drive failure, as of 13-Mar-2021, the Mercurial repository had to be re-mirrored, which changed every commit SHA. The old SHAs and trees are backed up in the vault branches. Please migrate to the new branches as soon as you can.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
prosody/tests/test.lua

86 lines
2.5 KiB

local verbosity = tonumber(arg[1]) or 2;
package.path = package.path..";../?.lua";
require "util.import"
local env_mt = { __index = function (t,k) return rawget(_G, k) or print("WARNING: Attempt to access nil global '"..tostring(k).."'"); end };
function testlib_new_env(t)
return setmetatable(t or {}, env_mt);
end
function assert_equal(a, b, message)
if not (a == b) then
error("\n assert_equal failed: "..tostring(a).." ~= "..tostring(b)..(message and ("\n Message: "..message) or ""), 2);
elseif verbosity >= 4 then
print("assert_equal succeeded: "..tostring(a).." == "..tostring(b));
end
end
function dotest(unitname)
local tests = setmetatable({}, { __index = _G });
tests.__unit = unitname;
local chunk, err = loadfile("test_"..unitname:gsub("%.", "_")..".lua");
if not chunk then
print("WARNING: ", "Failed to load tests for "..unitname, err);
return;
end
setfenv(chunk, tests);
local success, err = pcall(chunk);
if not success then
print("WARNING: ", "Failed to initialise tests for "..unitname, err);
return;
end
local unit = setmetatable({}, { __index = setmetatable({ module = function () end }, { __index = _G }) });
local chunk, err = loadfile("../"..unitname:gsub("%.", "/")..".lua");
if not chunk then
print("WARNING: ", "Failed to load module: "..unitname, err);
return;
end
setfenv(chunk, unit);
local success, err = pcall(chunk);
if not success then
print("WARNING: ", "Failed to initialise module: "..unitname, err);
return;
end
for name, f in pairs(unit) do
if type(f) ~= "function" then
if verbosity >= 3 then
print("INFO: ", "Skipping "..unitname.."."..name.." because it is not a function");
end
elseif type(tests[name]) ~= "function" then
if verbosity >= 1 then
print("WARNING: ", unitname.."."..name.." has no test!");
end
else
local success, ret = pcall(tests[name], f, unit);
if not success then
print("TEST FAILED! Unit: ["..unitname.."] Function: ["..name.."]");
print(" Location: "..ret:gsub(":%s*\n", "\n"));
elseif verbosity >= 2 then
print("TEST SUCCEEDED: ", unitname, name);
end
end
end
end
function runtest(f, msg)
if not f then print("SUBTEST NOT FOUND: "..(msg or "(no description)")); return; end
local success, ret = pcall(f);
if success and verbosity >= 2 then
print("SUBTEST PASSED: "..(msg or "(no description)"));
elseif (not success) and verbosity >= 1 then
print("SUBTEST FAILED: "..(msg or "(no description)"));
error(ret, 0);
end
end
dotest "util.jid"
dotest "core.stanza_router"
dotest "core.s2smanager"