Software /
code /
prosody
Comparison
tests/test.lua @ 28:4a238233f278
Adding initial unit testing scripts
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 27 Sep 2008 19:18:05 +0100 |
child | 271:396edd2f9d2e |
comparison
equal
deleted
inserted
replaced
27:859b316e2fb0 | 28:4a238233f278 |
---|---|
1 | |
2 local verbosity = tonumber(arg[1]) or 2; | |
3 | |
4 function assert_equal(a, b) | |
5 if not (a == b) then | |
6 error(getfenv(2).__unit.."assert_equal failed: "..tostring(a).." ~= "..tostring(b), 2); | |
7 elseif verbosity >= 4 then | |
8 print("assert_equal succeeded: "..tostring(a).." == "..tostring(b)); | |
9 end | |
10 end | |
11 | |
12 function dotest(unitname) | |
13 local tests = setmetatable({}, { __index = _G }); | |
14 tests.__unit = unitname; | |
15 local chunk, err = loadfile("test_"..unitname:gsub("%.", "_")..".lua"); | |
16 if not chunk then | |
17 print("WARNING: ", "Failed to load tests for "..unitname, err); | |
18 return; | |
19 end | |
20 | |
21 setfenv(chunk, tests); | |
22 local success, err = pcall(chunk); | |
23 if not success then | |
24 print("WARNING: ", "Failed to initialise tests for "..unitname, err); | |
25 return; | |
26 end | |
27 | |
28 local unit = setmetatable({}, { __index = setmetatable({ module = function () end }, { __index = _G }) }); | |
29 | |
30 local chunk, err = loadfile("../"..unitname:gsub("%.", "/")..".lua"); | |
31 if not chunk then | |
32 print("WARNING: ", "Failed to load module: "..unitname, err); | |
33 return; | |
34 end | |
35 | |
36 setfenv(chunk, unit); | |
37 local success, err = pcall(chunk); | |
38 if not success then | |
39 print("WARNING: ", "Failed to initialise module: "..unitname, err); | |
40 return; | |
41 end | |
42 | |
43 for name, f in pairs(unit) do | |
44 if type(f) ~= "function" then | |
45 if verbosity >= 3 then | |
46 print("INFO: ", "Skipping "..unitname.."."..name.." because it is not a function"); | |
47 end | |
48 elseif type(tests[name]) ~= "function" then | |
49 if verbosity >= 1 then | |
50 print("WARNING: ", unitname.."."..name.." has no test!"); | |
51 end | |
52 else | |
53 local success, ret = pcall(tests[name], f, unit); | |
54 if not success then | |
55 print("TEST FAILED: ", unitname, name, ret); | |
56 elseif verbosity >= 2 then | |
57 print("TEST SUCCEEDED: ", unitname, name); | |
58 end | |
59 end | |
60 end | |
61 end | |
62 | |
63 dotest "util.jid" | |
64 |