--- a/main.lua Fri Dec 28 11:38:56 2018 +0000 +++ b/main.lua Fri Dec 28 16:00:01 2018 -0500 @@ -140,9 +140,10 @@ return assert(parser.parse(data)); end -local function initialize_script(script) +local function initialize_script(script, context) local c = 0; for name, object in pairs(script.objects) do --luacheck: ignore name + context.line = object.defined_line local o = require("scansion.objects."..object.type); object.handler = o; object.script = script; @@ -181,11 +182,13 @@ return verse; end -local function main(log_data, script) +local function main(log_data, script, context) local ok, err = true; - initialize_script(script); + initialize_script(script, context); + + context.line = nil; if server_log_reader then if skip_server_startup_log then @@ -200,8 +203,21 @@ local runner = async.runner(function () for i, action in ipairs(script.actions) do + context.line = action.line_start; + local object = script.objects[action.object_name]; local handler = object.handler; + + log_data("action", { + action = action.action; + object = object.name; + object_type = object.type; + extra = action.extra; + annotation = action.annotation; + line_start = action.line_start; + line_end = action.line_end; + }); + if not handler[action.action] then local e = new_error("unsupported-action", { text = "Objects of type '"..object.type.."' do not support action '"..action.action.."'"; @@ -211,15 +227,6 @@ if server_log_reader then log_data("server", { lines = server_log_reader() }); end - log_data("action", { - action = action.action; - object = object.name; - object_type = object.type; - extra = action.extra; - annotation = action.annotation; - line_start = action.line_start; - line_end = action.line_end; - }); if action_timeout and action_timeout > 0 then local action_number = i; @@ -237,11 +244,12 @@ log_data("server", { lines = server_log_reader() }); end if not ok then - log_data("error", { message = err }); + log_data("error", { message = err, line = context.line }); error(err); end end end + context.line = nil; script.finished = true; verse.log("info", "Completed script!"); verse.quit(); @@ -328,7 +336,8 @@ log_data("script", script_data); - local ok, result, err = pcall(main, log_data, script); + local context = { line = nil }; + local ok, result, err = pcall(main, log_data, script, context); local event, status, reason; if not ok then @@ -339,7 +348,7 @@ event, status, reason = "test-passed", "ok", nil; end - local result_data = { name = script.title or script_name, status = status, reason = reason }; + local result_data = { name = script.title or script_name, status = status, reason = reason, line = context.line }; log_data(event, result_data);