Files
testium/src/lua_func/handle.lua
2026-02-12 22:21:56 +01:00

74 lines
2.0 KiB
Lua

local utils = require("utils")
local tm = require("tm")
local unpack = unpack or table.unpack
local handle = {}
local function _get_func_by_path(file_path, func_name)
-- 1. Load the file from the path
-- loadfile returns a 'chunk' (a function that runs the file's code)
local chunk, load_err = loadfile(file_path)
if not chunk then
return nil, "Failed to load file: " .. tostring(load_err)
end
-- 2. Execute the chunk to get the module's return value
-- Most Lua modules end with 'return { ... }'
local ok, module = pcall(chunk)
if not ok then
return nil, "Error executing file: " .. tostring(module)
end
-- 3. Validate the module is a table and contains the function
if type(module) ~= "table" then
return nil, "Module did not return a table (returned " .. type(module) .. ")"
end
local target_func = module[func_name]
if type(target_func) ~= "function" then
return nil, "Function '" .. func_name .. "' not found in '" .. file_path .. "'"
end
return target_func
end
function handle.func_call(params)
local file = params.file
local fname = params.fname
local prms = params.params
local res = nil
local succ, ret
local pfile = file
-- 1. modify the file path if it is relative
if utils.is_relative_path(pfile) then
local td = tm.gd("test_directory")
pfile = utils.join_paths(td, file)
end
-- 2. retrieve the function "fname"
local func, err = _get_func_by_path(pfile, fname)
-- 3. Execute the function
if err == nil then
print(string.format("Function executed from '%s'", pfile))
utils.log("func_call function found '%s', '%s'", file, fname)
succ, ret = pcall(func, unpack(prms))
utils.log("func_call returned '%s', '%s'", tostring(succ), tostring(ret))
if succ then
res = ret
else
err = ret
end
end
-- 4. Returns result
return res, err
end
return handle