X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=tests%2Ftest.lua;h=1192b7b83a659f4a2987dd50e7a194d19f6abbd7;hb=260141cd70f380adba1104651b13cc1ea4b3c385;hp=b6728061e7ed9332cfb62a53c1495ebb259df917;hpb=00b1cf077c52d45336ae6194a706410b3b03db34;p=prosody.git diff --git a/tests/test.lua b/tests/test.lua index b6728061..1192b7b8 100644 --- a/tests/test.lua +++ b/tests/test.lua @@ -1,12 +1,12 @@ -- Prosody IM -- Copyright (C) 2008-2010 Matthew Wild -- Copyright (C) 2008-2010 Waqas Hussain --- +-- -- This project is MIT/X11 licensed. Please see the -- COPYING file in the source package for more information. -- - +local tests_passed = true; function run_all_tests() package.loaded["net.connlisteners"] = { get = function () return {} end }; @@ -20,8 +20,11 @@ function run_all_tests() dotest "util.ip" dotest "util.stanza" dotest "util.sasl.scram" - + dotest "util.cache" + dotest "util.throttle" + dosingletest("test_sasl.lua", "latin1toutf8"); + dosingletest("test_utf8.lua", "valid"); end local verbosity = tonumber(arg[1]) or 2; @@ -87,17 +90,18 @@ function dosingletest(testname, fname) print("WARNING: ", "Failed to initialise tests for "..testname, err); return; end - + if type(tests[fname]) ~= "function" then error(testname.." has no test '"..fname.."'", 0); end - - + + local line_hook, line_info = new_line_coverage_monitor(testname); debug.sethook(line_hook, "l") local success, ret = pcall(tests[fname]); debug.sethook(); if not success then + tests_passed = false; print("TEST FAILED! Unit: ["..testname.."] Function: ["..fname.."]"); print(" Location: "..ret:gsub(":%s*\n", "\n")); line_info(fname, false, report_file); @@ -134,17 +138,20 @@ function dotest(unitname) print("WARNING: ", "Failed to load module: "..unitname, err); return; end - + local oldmodule, old_M = _fakeG.module, _fakeG._M; - _fakeG.module = function () _M = unit end + _fakeG.module = function () + setmetatable(unit, nil); + unit._M = unit; + end setfenv(chunk, unit); - local success, ret = pcall(chunk); + local success, err = pcall(chunk); _fakeG.module, _fakeG._M = oldmodule, old_M; if not success then print("WARNING: ", "Failed to initialise module: "..unitname, err); return; end - + if type(ret) == "table" then for k,v in pairs(ret) do unit[k] = v; @@ -170,6 +177,7 @@ function dotest(unitname) local success, ret = pcall(test, f, unit); debug.sethook(); if not success then + tests_passed = false; print("TEST FAILED! Unit: ["..unitname.."] Function: ["..name.."]"); print(" Location: "..ret:gsub(":%s*\n", "\n")); line_info(name, false, report_file); @@ -189,6 +197,7 @@ function runtest(f, msg) if success and verbosity >= 2 then print("SUBTEST PASSED: "..(msg or "(no description)")); elseif (not success) and verbosity >= 0 then + tests_passed = false; print("SUBTEST FAILED: "..(msg or "(no description)")); error(ret, 0); end @@ -197,11 +206,11 @@ end function new_line_coverage_monitor(file) local lines_hit, funcs_hit = {}, {}; local total_lines, covered_lines = 0, 0; - + for line in io.lines(file) do total_lines = total_lines + 1; end - + return function (event, line) -- Line hook if not lines_hit[line] then local info = debug.getinfo(2, "fSL") @@ -236,3 +245,5 @@ function new_line_coverage_monitor(file) end run_all_tests() + +os.exit(tests_passed and 0 or 1);