scansion/console.lua

changeset 174
662bd8c5ae28
parent 148
e2c85e095a4c
child 181
3a9b9c98304a
--- a/scansion/console.lua	Thu Mar 23 15:09:10 2023 +0000
+++ b/scansion/console.lua	Thu Mar 23 15:12:30 2023 +0000
@@ -1,86 +1,90 @@
-local pretty = require "scansion.pretty".new({});
 
 local function lines(l, indent)
 	return table.concat(l, "\n"..string.rep(" ", indent or 0));
 end
 
-local handlers = {
-	["script"] = function (data)
-		return "TEST: "..(data.title or data.filename or "untitled");
-	end;
-	["test-passed"] = function ()
-		return "PASS";
-	end;
-	["test-failed"] = function (data)
-		local error_text;
-		if data.reason and data.reason.type == "unexpected-stanza" then
-			error_text = "Received unexpected stanza:\n\n"..pretty(data.reason.data.stanza, 4);
-			if data.reason.data.expected then
-				error_text = error_text.."\n\nExpected:\n\n"..pretty(data.reason.data.expected, 4);
-			end
-		else
-			error_text = tostring(data.reason);
-		end
-		return lines({
-			"FAILED: "..data.name;
-			"";
-			(error_text:gsub("\n", "\n    "));
-			"";
-		}, 4);
-	end;
-	["test-error"] = function (data)
-		return lines({
-			"ERROR: "..data.name;
-			"";
-			(tostring(data.reason):gsub("\n", "\n    "));
-			"";
-		}, 4);
-	end;
-
-	["action"] = function (data)
-		local action = data.action;
-		local obj_type = data.object_type;
-		local l = {};
-		if data.annotation then
-			table.insert(l, action.annotation);
-		end
-		table.insert(l, data.object.." "..action);
-		if data.extra and obj_type == "client" and (action == "sends" or action == "receives") then
-			table.insert(l, "\n"..pretty(lines(data.extra), 4).."\n");
-		end
-		return lines(l);
-	end;
-
-	["end"] = function (data)
-		local r = {};
-
-		local all_results = {};
-		for k, v in pairs(data.summary.all) do
-			table.insert(all_results, v);
-		end
-		table.sort(all_results, function (a, b) return a.name < b.name end);
-
-		print("");
-		print("Summary");
-		print("-------");
-
-		for _, test_result in ipairs(all_results) do
-			print("", test_result.status, test_result.name);
-		end
-
-		print("");
-
-		for _, test_result in ipairs{ "ok", "fail", "error", "skipped", "total" } do
-			local count = data.summary[test_result] and #data.summary[test_result] or 0;
-			table.insert(r, tostring(count).." "..test_result);
-		end
-		return table.concat(r, " / ");
-	end;
-};
-
 local quiet_handlers = { "test-failed", "test-error" };
 
 local function new(config)
+	local pretty = require "scansion.pretty".new({
+		sorted = config.ordered;
+	});
+
+	local handlers = {
+		["script"] = function (data)
+			return "TEST: "..(data.title or data.filename or "untitled");
+		end;
+		["test-passed"] = function ()
+			return "PASS";
+		end;
+		["test-failed"] = function (data)
+			local error_text;
+			if data.reason and data.reason.type == "unexpected-stanza" then
+				error_text = "Received unexpected stanza:\n\n"..pretty(data.reason.data.stanza, 4);
+				if data.reason.data.expected then
+					error_text = error_text.."\n\nExpected:\n\n"..pretty(data.reason.data.expected, 4);
+				end
+			else
+				error_text = tostring(data.reason);
+			end
+			return lines({
+				"FAILED: "..data.name;
+				"";
+				(error_text:gsub("\n", "\n    "));
+				"";
+			}, 4);
+		end;
+		["test-error"] = function (data)
+			return lines({
+				"ERROR: "..data.name;
+				"";
+				(tostring(data.reason):gsub("\n", "\n    "));
+				"";
+			}, 4);
+		end;
+
+		["action"] = function (data)
+			local action = data.action;
+			local obj_type = data.object_type;
+			local l = {};
+			if data.annotation then
+				table.insert(l, action.annotation);
+			end
+			table.insert(l, data.object.." "..action);
+			if data.extra and obj_type == "client" and (action == "sends" or action == "receives") then
+				table.insert(l, "\n"..pretty(lines(data.extra), 4).."\n");
+			end
+			return lines(l);
+		end;
+
+		["end"] = function (data)
+			local r = {};
+
+			local all_results = {};
+			for _, v in pairs(data.summary.all) do
+				table.insert(all_results, v);
+			end
+			table.sort(all_results, function (a, b) return a.name < b.name end);
+
+			print("");
+			print("Summary");
+			print("-------");
+
+			for _, test_result in ipairs(all_results) do
+				print("", test_result.status, test_result.name);
+			end
+
+			print("");
+
+			for _, test_result in ipairs{ "ok", "fail", "error", "skipped", "total" } do
+				local count = data.summary[test_result] and #data.summary[test_result] or 0;
+				table.insert(r, tostring(count).." "..test_result);
+			end
+			return table.concat(r, " / ");
+		end;
+	};
+
+
 	local h = {};
 	if config.quiet then
 		for _, handler_name in ipairs(quiet_handlers) do

mercurial