summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@digital-scurf.org>2012-05-13 20:44:56 +0100
committerDaniel Silverstone <dsilvers@digital-scurf.org>2012-05-13 20:44:56 +0100
commit3db82b74ef702ad04da1d0b88f9092097e30dcae (patch)
tree76596aa1d3488bb08560e77f5b99cad886060183
parent83efa26e56e108f32da37c79bdeeb809e1dcae12 (diff)
downloadlace-3db82b74ef702ad04da1d0b88f9092097e30dcae.tar.gz
Handle the last unconditional result for allow/deny in builtin
-rw-r--r--lib/lace/builtin.lua21
-rw-r--r--test/test-lace.builtin.lua22
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")