Tue, 11 Sep 2018 21:02:18 +0100
scansion.console: Print summary at end of test run
local pretty = require "scansion.pretty".new({}); local function lines(l) return table.concat(l, "\n"); end local handlers = { ["script"] = function (data) return "TEST: "..(data.title or data.filename); end; ["test-passed"] = function () return "PASS"; end; ["test-failed"] = function (data) local error_text; if data.error and data.error.type == "unexpected-stanza" then error_text = "Received unexpected stanza:\n\n"..pretty(data.error.data.stanza, 4); if data.error.data.expected then error_text = error_text.."\n\nExpected:\n\n"..pretty(data.error.data.expected, 4); end else error_text = tostring(data.error); end return "FAIL: "..error_text end; ["test-error"] = function (data) return "ERROR: "..tostring(data.error); 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", "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; }; return { handlers = handlers; }