mirror of
https://github.com/sbrl/Minetest-WorldEditAdditions.git
synced 2024-11-26 17:12:59 +00:00
68 lines
No EOL
2.2 KiB
Lua
68 lines
No EOL
2.2 KiB
Lua
-- ████████ ███████ ███████ ████████
|
|
-- ██ ██ ██ ██
|
|
-- ██ █████ ███████ ██
|
|
-- ██ ██ ██ ██
|
|
-- ██ ███████ ███████ ██
|
|
|
|
-- ██ ██ █████ ███ ██ ██████ ██ ███████ ██████
|
|
-- ██ ██ ██ ██ ████ ██ ██ ██ ██ ██ ██ ██
|
|
-- ███████ ███████ ██ ██ ██ ██ ██ ██ █████ ██████
|
|
-- ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
|
|
-- ██ ██ ██ ██ ██ ████ ██████ ███████ ███████ ██ ██
|
|
|
|
-- Metatable for tests
|
|
local metatable = {
|
|
__call = function(self,name, ...)
|
|
return xpcall(self.func, debug.traceback, name, ...)
|
|
end,
|
|
help = function(self)
|
|
return "Params: " .. self.params .. "\n" .. self.description
|
|
end
|
|
}
|
|
metatable.__index = metatable
|
|
|
|
local registered_tests = {}
|
|
|
|
local register_test = function(test_name, def)
|
|
---
|
|
-- 1: Validation
|
|
---
|
|
if type(test_name) ~= "string" then
|
|
error("The test name is not a string.")
|
|
end
|
|
if type(def) ~= "table" then
|
|
error("The test definition is not a table.")
|
|
end
|
|
if type(def.description) ~= "string" then
|
|
error("The test description is not a string.")
|
|
end
|
|
if type(def.params) ~= "string" or #def.params == 0 then
|
|
error("The test params param is not valid.")
|
|
end
|
|
if type(def.func) ~= "function" then
|
|
error("The test function is not a function.")
|
|
end
|
|
|
|
---
|
|
-- 2: Normalisation
|
|
---
|
|
setmetatable(def, metatable)
|
|
registered_tests[test_name] = def
|
|
end
|
|
|
|
local normalize_test = {}
|
|
normalize_test.__index = normalize_test
|
|
|
|
normalize_test.__call = function(self, test_name, def)
|
|
register_test(test_name, def)
|
|
end
|
|
|
|
normalize_test.get_registered_tests = function()
|
|
local ret = {}
|
|
for k, v in pairs(registered_tests) do
|
|
ret[k] = v
|
|
end
|
|
return ret
|
|
end
|
|
|
|
return setmetatable({}, normalize_test) |