diff options
-rw-r--r-- | lib/lace/builtin.lua | 21 | ||||
-rw-r--r-- | test/test-lace.builtin.lua | 22 |
2 files changed, 38 insertions, 5 deletions
diff --git a/lib/lace/builtin.lua b/lib/lace/builtin.lua index a45051f..e99105b 100644 --- a/lib/lace/builtin.lua +++ b/lib/lace/builtin.lua @@ -15,6 +15,14 @@ end --[ Allow and Deny ]------------------------------------------------ +local unconditional_result = nil + +local function get_set_last_unconditional_result(newv) + local ret = unconditional_result + unconditional_result = newv + return ret +end + local function _do_return(exec_context, result, reason, cond) if #cond > 0 then -- Run the conditions @@ -29,13 +37,15 @@ local function _return(compcontext, result, reason, ...) if type(reason) ~= "string" then return compiler().error("Expected reason, got nothing") end + + local cond = {...} + if #cond == 0 then + unconditional_result = result + end + return { fn = _do_return, - args = { - result, - reason, - {...} - } + args = { result, reason, cond } } end @@ -73,4 +83,5 @@ end return { commands = builtin, + get_set_last_unconditional_result = get_set_last_unconditional_result, } diff --git a/test/test-lace.builtin.lua b/test/test-lace.builtin.lua index 10c5c8f..6f5ff00 100644 --- a/test/test-lace.builtin.lua +++ b/test/test-lace.builtin.lua @@ -61,6 +61,28 @@ function suite.run_builtin_allow_deny_novariables() assert(msg == "because", "Expected reason should be 'because'") end +function suite.builtin_get_set_unconditional() + builtin.get_set_last_unconditional_result("FOO") + assert(builtin.get_set_last_unconditional_result() == "FOO", + "Result not saved") +end + +function suite.run_builtin_allow_deny_unconditional_saved() + -- Clear + builtin.get_set_last_unconditional_result() + + local cmdtab, msg = builtin.commands.allow({}, "allow", "because") + assert(type(cmdtab) == "table", "Result should be a table") + assert(type(cmdtab.fn) == "function", "Result should contain a function") + assert(type(cmdtab.args) == "table", "Result table should contain an args table") + local result, msg = cmdtab.fn({}, unpack(cmdtab.args)) + assert(result == "allow", "Expected result should be 'allow'") + assert(msg == "because", "Expected reason should be 'because'") + + local last = builtin.get_set_last_unconditional_result() + assert(last == "allow", "The last unconditional result was not allow?") +end + function suite.compile_builtin_default_noresult() local compctx = {[".lace"] = {}} local cmdtab, msg = builtin.commands.default(compctx, "default") |