Merge 0.9->0.10
[prosody.git] / tests / test.lua
index bb9bc876b517bbdab195b880b5d5aecba9defa11..f7475a805d1395e9c379aa7534f9ecff15a41b89 100644 (file)
@@ -1,7 +1,7 @@
 -- 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.
 --
@@ -9,15 +9,18 @@
 
 
 function run_all_tests()
+       package.loaded["net.connlisteners"] = { get = function () return {} end };
        dotest "util.jid"
        dotest "util.multitable"
-       dotest "core.modulemanager"
+       dotest "util.rfc6724"
+       dotest "util.http"
        dotest "core.stanza_router"
        dotest "core.s2smanager"
        dotest "core.configmanager"
+       dotest "util.ip"
        dotest "util.stanza"
        dotest "util.sasl.scram"
-       
+
        dosingletest("test_sasl.lua", "latin1toutf8");
 end
 
@@ -84,12 +87,12 @@ 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]);
@@ -131,17 +134,23 @@ 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 = _G end
+       _fakeG.module = function () _M = unit end
        setfenv(chunk, unit);
-       local success, err = pcall(chunk);
+       local success, ret = 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;
+               end
+       end
+
        for name, f in pairs(unit) do
                local test = rawget(tests, name);
                if type(f) ~= "function" then
@@ -188,11 +197,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")
@@ -217,7 +226,7 @@ function new_line_coverage_monitor(file)
                        for line, active in pairs(lines_hit) do
                                if active ~= nil then total_active_lines = total_active_lines + 1; end
                                if coverage_file then
-                                       if active == false then coverage_file:write(fn, "|", line, "|", name or "", "|miss\n"); 
+                                       if active == false then coverage_file:write(fn, "|", line, "|", name or "", "|miss\n");
                                        else coverage_file:write(fn, "|", line, "|", name or "", "|", tostring(success), "\n"); end
                                end
                        end