Software /
code /
prosody
Comparison
tests/test.lua @ 2248:37344b18b551
tests/test.lua: Changes to environment handling of tests, and replace module() with dummy function that doesn't alter the current environment
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 27 Nov 2009 18:00:47 +0000 |
parent | 2246:eb047fe305aa |
child | 2925:692b3c6c5bd2 |
comparison
equal
deleted
inserted
replaced
2247:f62af2a9974e | 2248:37344b18b551 |
---|---|
14 dotest "core.modulemanager" | 14 dotest "core.modulemanager" |
15 dotest "core.stanza_router" | 15 dotest "core.stanza_router" |
16 dotest "core.s2smanager" | 16 dotest "core.s2smanager" |
17 dotest "core.configmanager" | 17 dotest "core.configmanager" |
18 dotest "util.stanza" | 18 dotest "util.stanza" |
19 | 19 |
20 dosingletest("test_sasl.lua", "latin1toutf8"); | 20 dosingletest("test_sasl.lua", "latin1toutf8"); |
21 end | 21 end |
22 | 22 |
23 local verbosity = tonumber(arg[1]) or 2; | 23 local verbosity = tonumber(arg[1]) or 2; |
24 | 24 |
104 line_info(name, success, report_file); | 104 line_info(name, success, report_file); |
105 end | 105 end |
106 end | 106 end |
107 | 107 |
108 function dotest(unitname) | 108 function dotest(unitname) |
109 local tests = setmetatable({}, { __index = _realG }); | 109 local _fakeG = setmetatable({}, {__index = _realG}); |
110 _fakeG._G = _fakeG; | |
111 local tests = setmetatable({}, { __index = _fakeG }); | |
110 tests.__unit = unitname; | 112 tests.__unit = unitname; |
111 local chunk, err = loadfile("test_"..unitname:gsub("%.", "_")..".lua"); | 113 local chunk, err = loadfile("test_"..unitname:gsub("%.", "_")..".lua"); |
112 if not chunk then | 114 if not chunk then |
113 print("WARNING: ", "Failed to load tests for "..unitname, err); | 115 print("WARNING: ", "Failed to load tests for "..unitname, err); |
114 return; | 116 return; |
118 local success, err = pcall(chunk); | 120 local success, err = pcall(chunk); |
119 if not success then | 121 if not success then |
120 print("WARNING: ", "Failed to initialise tests for "..unitname, err); | 122 print("WARNING: ", "Failed to initialise tests for "..unitname, err); |
121 return; | 123 return; |
122 end | 124 end |
123 | |
124 if tests.env then setmetatable(tests.env, { __index = _realG }); end | 125 if tests.env then setmetatable(tests.env, { __index = _realG }); end |
125 local unit = setmetatable({}, { __index = setmetatable({ _G = tests.env or _G }, { __index = tests.env or _G }) }); | 126 local unit = setmetatable({}, { __index = setmetatable({ _G = tests.env or _fakeG }, { __index = tests.env or _fakeG }) }); |
126 unit._G = unit; _realG._G = unit; | |
127 local fn = "../"..unitname:gsub("%.", "/")..".lua"; | 127 local fn = "../"..unitname:gsub("%.", "/")..".lua"; |
128 local chunk, err = loadfile(fn); | 128 local chunk, err = loadfile(fn); |
129 if not chunk then | 129 if not chunk then |
130 print("WARNING: ", "Failed to load module: "..unitname, err); | 130 print("WARNING: ", "Failed to load module: "..unitname, err); |
131 return; | 131 return; |
132 end | 132 end |
133 | 133 |
134 local oldmodule, old_M = _fakeG.module, _fakeG._M; | |
135 _fakeG.module = function () _M = _G end | |
134 setfenv(chunk, unit); | 136 setfenv(chunk, unit); |
135 local success, err = pcall(chunk); | 137 local success, err = pcall(chunk); |
138 _fakeG.module, _fakeG._M = oldmodule, old_M; | |
136 if not success then | 139 if not success then |
137 print("WARNING: ", "Failed to initialise module: "..unitname, err); | 140 print("WARNING: ", "Failed to initialise module: "..unitname, err); |
138 return; | 141 return; |
139 end | 142 end |
140 | 143 |