main.lua

changeset 162
f888f236321f
parent 161
fadae5511044
child 173
14ed4cb241f4
--- 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);
 

mercurial