Changeset

28:4a238233f278

Adding initial unit testing scripts
author Matthew Wild <mwild1@gmail.com>
date Sat, 27 Sep 2008 19:18:05 +0100
parents 27:859b316e2fb0
children 29:b847875801e5
files tests/test.lua tests/test_util_jid.lua
diffstat 2 files changed, 77 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test.lua	Sat Sep 27 19:18:05 2008 +0100
@@ -0,0 +1,64 @@
+
+local verbosity = tonumber(arg[1]) or 2;
+
+function assert_equal(a, b)
+	if not (a == b) then
+		error(getfenv(2).__unit.."assert_equal failed: "..tostring(a).." ~= "..tostring(b), 2);
+	elseif verbosity >= 4 then
+		print("assert_equal succeeded: "..tostring(a).." == "..tostring(b));
+	end
+end
+
+function dotest(unitname)
+	local tests = setmetatable({}, { __index = _G });
+	tests.__unit = unitname;
+	local chunk, err = loadfile("test_"..unitname:gsub("%.", "_")..".lua");
+	if not chunk then
+		print("WARNING: ", "Failed to load tests for "..unitname, err);
+		return;
+	end
+
+	setfenv(chunk, tests);
+	local success, err = pcall(chunk);
+	if not success then
+		print("WARNING: ", "Failed to initialise tests for "..unitname, err);
+		return;
+	end
+	
+	local unit = setmetatable({}, { __index = setmetatable({ module = function () end }, { __index = _G }) });
+
+	local chunk, err = loadfile("../"..unitname:gsub("%.", "/")..".lua");
+	if not chunk then
+		print("WARNING: ", "Failed to load module: "..unitname, err);
+		return;
+	end
+
+	setfenv(chunk, unit);
+	local success, err = pcall(chunk);
+	if not success then
+		print("WARNING: ", "Failed to initialise module: "..unitname, err);
+		return;
+	end
+	
+	for name, f in pairs(unit) do
+		if type(f) ~= "function" then
+			if verbosity >= 3 then
+				print("INFO: ", "Skipping "..unitname.."."..name.." because it is not a function");
+			end
+		elseif type(tests[name]) ~= "function" then
+			if verbosity >= 1 then
+				print("WARNING: ", unitname.."."..name.." has no test!");
+			end
+		else
+			local success, ret = pcall(tests[name], f, unit);
+			if not success then
+				print("TEST FAILED: ", unitname, name, ret);
+			elseif verbosity >= 2 then
+				print("TEST SUCCEEDED: ", unitname, name);
+			end
+		end
+	end
+end
+
+dotest "util.jid"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_util_jid.lua	Sat Sep 27 19:18:05 2008 +0100
@@ -0,0 +1,13 @@
+
+function split(split)
+	function test(jid, node, server, resource)
+		local rnode, rserver, rresource = split(jid);
+		assert_equal(node, rnode, "split("..jid..") failed");
+		assert_equal(server, rserver, "split("..jid..") failed");
+		assert_equal(resource, rresource, "split("..jid..") failed");
+	end
+	test("node@server", 		"node", "server", nil		);
+	test("node@server/resource", 	"node", "server", "resource"	);
+	test("server", 			nil, 	"server", nil		);
+	test("server/resource", 	nil, 	"server", "resource"	);
+end