tests/test.lua

Mon, 23 Nov 2009 02:58:42 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Mon, 23 Nov 2009 02:58:42 +0000
changeset 2146
5c54097ef84a
parent 1972
26d4b99ba211
child 2246
eb047fe305aa
child 2923
b7049746bd29
permissions
-rw-r--r--

util.dependencies: Make the commands line up properly in the "missing dependency" output. Yes, this was the commit you didn't know you were waiting for!

1523
841d61be198f Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents: 894
diff changeset
1 -- Prosody IM
760
90ce865eebd8 Update copyright notices for 2009
Matthew Wild <mwild1@gmail.com>
parents: 759
diff changeset
2 -- Copyright (C) 2008-2009 Matthew Wild
90ce865eebd8 Update copyright notices for 2009
Matthew Wild <mwild1@gmail.com>
parents: 759
diff changeset
3 -- Copyright (C) 2008-2009 Waqas Hussain
519
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 509
diff changeset
4 --
758
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 681
diff changeset
5 -- This project is MIT/X11 licensed. Please see the
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 681
diff changeset
6 -- COPYING file in the source package for more information.
519
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 509
diff changeset
7 --
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 509
diff changeset
8
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 509
diff changeset
9
361
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
10
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
11 function run_all_tests()
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
12 dotest "util.jid"
569
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
13 dotest "util.multitable"
1961
3652ef68c361 tests: Add tests for new modulemanager load_modules_for_host code
Matthew Wild <mwild1@gmail.com>
parents: 1523
diff changeset
14 dotest "core.modulemanager"
361
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
15 dotest "core.stanza_router"
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
16 dotest "core.s2smanager"
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
17 dotest "core.configmanager"
681
686b73503ce8 Add test for previous commit
Matthew Wild <mwild1@gmail.com>
parents: 615
diff changeset
18 dotest "util.stanza"
686b73503ce8 Add test for previous commit
Matthew Wild <mwild1@gmail.com>
parents: 615
diff changeset
19
509
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
20 dosingletest("test_sasl.lua", "latin1toutf8");
361
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
21 end
28
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 local verbosity = tonumber(arg[1]) or 2;
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24
807
ce39abe0259a Fixed tests/test.lua to work on Windows
Waqas Hussain <waqas20@gmail.com>
parents: 787
diff changeset
25 if os.getenv("WINDIR") then
ce39abe0259a Fixed tests/test.lua to work on Windows
Waqas Hussain <waqas20@gmail.com>
parents: 787
diff changeset
26 package.path = package.path..";..\\?.lua";
ce39abe0259a Fixed tests/test.lua to work on Windows
Waqas Hussain <waqas20@gmail.com>
parents: 787
diff changeset
27 package.cpath = package.cpath..";..\\?.dll";
ce39abe0259a Fixed tests/test.lua to work on Windows
Waqas Hussain <waqas20@gmail.com>
parents: 787
diff changeset
28 else
ce39abe0259a Fixed tests/test.lua to work on Windows
Waqas Hussain <waqas20@gmail.com>
parents: 787
diff changeset
29 package.path = package.path..";../?.lua";
ce39abe0259a Fixed tests/test.lua to work on Windows
Waqas Hussain <waqas20@gmail.com>
parents: 787
diff changeset
30 package.cpath = package.cpath..";../?.so";
ce39abe0259a Fixed tests/test.lua to work on Windows
Waqas Hussain <waqas20@gmail.com>
parents: 787
diff changeset
31 end
271
396edd2f9d2e Some fixes for our test runner
Matthew Wild <mwild1@gmail.com>
parents: 28
diff changeset
32
1972
26d4b99ba211 tests: More environment magic to help get stuff working in a sandbox
Matthew Wild <mwild1@gmail.com>
parents: 1963
diff changeset
33 local _realG = _G;
26d4b99ba211 tests: More environment magic to help get stuff working in a sandbox
Matthew Wild <mwild1@gmail.com>
parents: 1963
diff changeset
34
271
396edd2f9d2e Some fixes for our test runner
Matthew Wild <mwild1@gmail.com>
parents: 28
diff changeset
35 require "util.import"
396edd2f9d2e Some fixes for our test runner
Matthew Wild <mwild1@gmail.com>
parents: 28
diff changeset
36
1972
26d4b99ba211 tests: More environment magic to help get stuff working in a sandbox
Matthew Wild <mwild1@gmail.com>
parents: 1963
diff changeset
37 local env_mt = { __index = function (t,k) return rawget(_realG, k) or print("WARNING: Attempt to access nil global '"..tostring(k).."'"); end };
271
396edd2f9d2e Some fixes for our test runner
Matthew Wild <mwild1@gmail.com>
parents: 28
diff changeset
38 function testlib_new_env(t)
396edd2f9d2e Some fixes for our test runner
Matthew Wild <mwild1@gmail.com>
parents: 28
diff changeset
39 return setmetatable(t or {}, env_mt);
396edd2f9d2e Some fixes for our test runner
Matthew Wild <mwild1@gmail.com>
parents: 28
diff changeset
40 end
396edd2f9d2e Some fixes for our test runner
Matthew Wild <mwild1@gmail.com>
parents: 28
diff changeset
41
569
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
42 function assert_equal(a, b, message, level)
28
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43 if not (a == b) then
569
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
44 error("\n assert_equal failed: "..tostring(a).." ~= "..tostring(b)..(message and ("\n Message: "..message) or ""), (level or 1) + 1);
28
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 elseif verbosity >= 4 then
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
46 print("assert_equal succeeded: "..tostring(a).." == "..tostring(b));
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47 end
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
48 end
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
49
569
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
50 function assert_table(a, message, level)
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
51 assert_equal(type(a), "table", message, (level or 1) + 1);
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
52 end
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
53 function assert_function(a, message, level)
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
54 assert_equal(type(a), "function", message, (level or 1) + 1);
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
55 end
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
56 function assert_string(a, message, level)
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
57 assert_equal(type(a), "string", message, (level or 1) + 1);
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
58 end
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
59 function assert_boolean(a, message)
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
60 assert_equal(type(a), "boolean", message);
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
61 end
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
62 function assert_is(a, message)
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
63 assert_equal(not not a, true, message);
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
64 end
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
65 function assert_is_not(a, message)
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
66 assert_equal(not not a, false, message);
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
67 end
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
68
5216efe6088b Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents: 519
diff changeset
69
509
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
70 function dosingletest(testname, fname)
1972
26d4b99ba211 tests: More environment magic to help get stuff working in a sandbox
Matthew Wild <mwild1@gmail.com>
parents: 1963
diff changeset
71 local tests = setmetatable({}, { __index = _realG });
509
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
72 tests.__unit = testname;
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
73 tests.__test = fname;
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
74 local chunk, err = loadfile(testname);
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
75 if not chunk then
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
76 print("WARNING: ", "Failed to load tests for "..testname, err);
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
77 return;
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
78 end
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
79
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
80 setfenv(chunk, tests);
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
81 local success, err = pcall(chunk);
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
82 if not success then
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
83 print("WARNING: ", "Failed to initialise tests for "..testname, err);
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
84 return;
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
85 end
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
86
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
87 if type(tests[fname]) ~= "function" then
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
88 error(testname.." has no test '"..fname.."'", 0);
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
89 end
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
90
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
91
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
92 local line_hook, line_info = new_line_coverage_monitor(testname);
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
93 debug.sethook(line_hook, "l")
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
94 local success, ret = pcall(tests[fname]);
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
95 debug.sethook();
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
96 if not success then
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
97 print("TEST FAILED! Unit: ["..testname.."] Function: ["..fname.."]");
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
98 print(" Location: "..ret:gsub(":%s*\n", "\n"));
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
99 line_info(fname, false, report_file);
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
100 elseif verbosity >= 2 then
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
101 print("TEST SUCCEEDED: ", testname, fname);
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
102 print(string.format("TEST COVERED %d/%d lines", line_info(fname, true, report_file)));
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
103 else
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
104 line_info(name, success, report_file);
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
105 end
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
106 end
32899c8a6fe5 Add test for latin1toutf8 (which passes)
Matthew Wild <mwild1@gmail.com>
parents: 470
diff changeset
107
28
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
108 function dotest(unitname)
1972
26d4b99ba211 tests: More environment magic to help get stuff working in a sandbox
Matthew Wild <mwild1@gmail.com>
parents: 1963
diff changeset
109 local tests = setmetatable({}, { __index = _realG });
28
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
110 tests.__unit = unitname;
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
111 local chunk, err = loadfile("test_"..unitname:gsub("%.", "_")..".lua");
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
112 if not chunk then
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
113 print("WARNING: ", "Failed to load tests for "..unitname, err);
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
114 return;
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
115 end
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
116
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
117 setfenv(chunk, tests);
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
118 local success, err = pcall(chunk);
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
119 if not success then
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
120 print("WARNING: ", "Failed to initialise tests for "..unitname, err);
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
121 return;
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
122 end
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
123
1972
26d4b99ba211 tests: More environment magic to help get stuff working in a sandbox
Matthew Wild <mwild1@gmail.com>
parents: 1963
diff changeset
124 if tests.env then setmetatable(tests.env, { __index = _realG }); end
26d4b99ba211 tests: More environment magic to help get stuff working in a sandbox
Matthew Wild <mwild1@gmail.com>
parents: 1963
diff changeset
125 local unit = setmetatable({}, { __index = setmetatable({ _G = tests.env or _G }, { __index = tests.env or _G }) });
26d4b99ba211 tests: More environment magic to help get stuff working in a sandbox
Matthew Wild <mwild1@gmail.com>
parents: 1963
diff changeset
126 unit._G = unit; _realG._G = unit;
361
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
127 local fn = "../"..unitname:gsub("%.", "/")..".lua";
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
128 local chunk, err = loadfile(fn);
28
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
129 if not chunk then
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
130 print("WARNING: ", "Failed to load module: "..unitname, err);
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
131 return;
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
132 end
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
133
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
134 setfenv(chunk, unit);
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
135 local success, err = pcall(chunk);
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
136 if not success then
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
137 print("WARNING: ", "Failed to initialise module: "..unitname, err);
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
138 return;
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
139 end
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
140
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
141 for name, f in pairs(unit) do
361
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
142 local test = rawget(tests, name);
28
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
143 if type(f) ~= "function" then
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
144 if verbosity >= 3 then
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
145 print("INFO: ", "Skipping "..unitname.."."..name.." because it is not a function");
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
146 end
361
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
147 elseif type(test) ~= "function" then
28
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
148 if verbosity >= 1 then
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
149 print("WARNING: ", unitname.."."..name.." has no test!");
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
150 end
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
151 else
361
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
152 local line_hook, line_info = new_line_coverage_monitor(fn);
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
153 debug.sethook(line_hook, "l")
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
154 local success, ret = pcall(test, f, unit);
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
155 debug.sethook();
28
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
156 if not success then
271
396edd2f9d2e Some fixes for our test runner
Matthew Wild <mwild1@gmail.com>
parents: 28
diff changeset
157 print("TEST FAILED! Unit: ["..unitname.."] Function: ["..name.."]");
396edd2f9d2e Some fixes for our test runner
Matthew Wild <mwild1@gmail.com>
parents: 28
diff changeset
158 print(" Location: "..ret:gsub(":%s*\n", "\n"));
370
9ade55e059ea Update test.lua with a work-in-progress
Matthew Wild <mwild1@gmail.com>
parents: 361
diff changeset
159 line_info(name, false, report_file);
28
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
160 elseif verbosity >= 2 then
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
161 print("TEST SUCCEEDED: ", unitname, name);
370
9ade55e059ea Update test.lua with a work-in-progress
Matthew Wild <mwild1@gmail.com>
parents: 361
diff changeset
162 print(string.format("TEST COVERED %d/%d lines", line_info(name, true, report_file)));
361
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
163 else
370
9ade55e059ea Update test.lua with a work-in-progress
Matthew Wild <mwild1@gmail.com>
parents: 361
diff changeset
164 line_info(name, success, report_file);
28
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
165 end
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
166 end
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
167 end
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
168 end
4a238233f278 Adding initial unit testing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
169
271
396edd2f9d2e Some fixes for our test runner
Matthew Wild <mwild1@gmail.com>
parents: 28
diff changeset
170 function runtest(f, msg)
301
fcb7e63630ae Warn when subtest function does not exist
Matthew Wild <mwild1@gmail.com>
parents: 271
diff changeset
171 if not f then print("SUBTEST NOT FOUND: "..(msg or "(no description)")); return; end
271
396edd2f9d2e Some fixes for our test runner
Matthew Wild <mwild1@gmail.com>
parents: 28
diff changeset
172 local success, ret = pcall(f);
396edd2f9d2e Some fixes for our test runner
Matthew Wild <mwild1@gmail.com>
parents: 28
diff changeset
173 if success and verbosity >= 2 then
396edd2f9d2e Some fixes for our test runner
Matthew Wild <mwild1@gmail.com>
parents: 28
diff changeset
174 print("SUBTEST PASSED: "..(msg or "(no description)"));
787
c4a4d5604549 Small fix to change verbosity level of subtests
Matthew Wild <mwild1@gmail.com>
parents: 760
diff changeset
175 elseif (not success) and verbosity >= 0 then
271
396edd2f9d2e Some fixes for our test runner
Matthew Wild <mwild1@gmail.com>
parents: 28
diff changeset
176 print("SUBTEST FAILED: "..(msg or "(no description)"));
396edd2f9d2e Some fixes for our test runner
Matthew Wild <mwild1@gmail.com>
parents: 28
diff changeset
177 error(ret, 0);
396edd2f9d2e Some fixes for our test runner
Matthew Wild <mwild1@gmail.com>
parents: 28
diff changeset
178 end
396edd2f9d2e Some fixes for our test runner
Matthew Wild <mwild1@gmail.com>
parents: 28
diff changeset
179 end
396edd2f9d2e Some fixes for our test runner
Matthew Wild <mwild1@gmail.com>
parents: 28
diff changeset
180
361
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
181 function new_line_coverage_monitor(file)
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
182 local lines_hit, funcs_hit = {}, {};
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
183 local total_lines, covered_lines = 0, 0;
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
184
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
185 for line in io.lines(file) do
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
186 total_lines = total_lines + 1;
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
187 end
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
188
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
189 return function (event, line) -- Line hook
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
190 if not lines_hit[line] then
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
191 local info = debug.getinfo(2, "fSL")
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
192 if not info.source:find(file) then return; end
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
193 if not funcs_hit[info.func] and info.activelines then
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
194 funcs_hit[info.func] = true;
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
195 for line in pairs(info.activelines) do
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
196 lines_hit[line] = false; -- Marks it as hittable, but not hit yet
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
197 end
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
198 end
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
199 if lines_hit[line] == false then
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
200 --print("New line hit: "..line.." in "..debug.getinfo(2, "S").source);
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
201 lines_hit[line] = true;
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
202 covered_lines = covered_lines + 1;
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
203 end
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
204 end
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
205 end,
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
206 function (test_name, success) -- Get info
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
207 local fn = file:gsub("^%W*", "");
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
208 local total_active_lines = 0;
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
209 local coverage_file = io.open("reports/coverage_"..fn:gsub("%W+", "_")..".report", "a+");
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
210 for line, active in pairs(lines_hit) do
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
211 if active ~= nil then total_active_lines = total_active_lines + 1; end
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
212 if coverage_file then
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
213 if active == false then coverage_file:write(fn, "|", line, "|", name or "", "|miss\n");
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
214 else coverage_file:write(fn, "|", line, "|", name or "", "|", tostring(success), "\n"); end
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
215 end
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
216 end
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
217 if coverage_file then coverage_file:close(); end
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
218 return covered_lines, total_active_lines, lines_hit;
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
219 end
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
220 end
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
221
a2d83b04d769 Update unit testing to output coverage reports
Matthew Wild <mwild1@gmail.com>
parents: 337
diff changeset
222 run_all_tests()

mercurial