mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-04-28 04:19:27 -07:00
135 lines
3.0 KiB
Lua
135 lines
3.0 KiB
Lua
package.path = "plugin/subminer/?.lua;" .. package.path
|
|
|
|
local session_bindings = require("session_bindings")
|
|
|
|
local function assert_true(condition, message)
|
|
if condition then
|
|
return
|
|
end
|
|
error(message)
|
|
end
|
|
|
|
local artifact_path = ".tmp/test-plugin-session-bindings.json"
|
|
os.execute("mkdir -p .tmp")
|
|
local handle = assert(io.open(artifact_path, "w"))
|
|
handle:write("__SESSION_BINDINGS__")
|
|
handle:close()
|
|
|
|
local recorded = {
|
|
bindings = {},
|
|
removed = {},
|
|
async_calls = {},
|
|
osd = {},
|
|
}
|
|
|
|
local mp = {}
|
|
|
|
function mp.add_forced_key_binding(keys, name, fn)
|
|
recorded.bindings[#recorded.bindings + 1] = {
|
|
keys = keys,
|
|
name = name,
|
|
fn = fn,
|
|
}
|
|
end
|
|
|
|
function mp.remove_key_binding(name)
|
|
recorded.removed[#recorded.removed + 1] = name
|
|
end
|
|
|
|
function mp.add_timeout(seconds, callback)
|
|
return {
|
|
seconds = seconds,
|
|
callback = callback,
|
|
killed = false,
|
|
kill = function(self)
|
|
self.killed = true
|
|
end,
|
|
}
|
|
end
|
|
|
|
function mp.osd_message(message)
|
|
recorded.osd[#recorded.osd + 1] = message
|
|
end
|
|
|
|
local ctx = {
|
|
mp = mp,
|
|
utils = {
|
|
parse_json = function(raw)
|
|
if raw ~= "__SESSION_BINDINGS__" then
|
|
return nil, "unexpected artifact"
|
|
end
|
|
return {
|
|
numericSelectionTimeoutMs = 3000,
|
|
bindings = {
|
|
{
|
|
key = {
|
|
code = "KeyS",
|
|
modifiers = { "ctrl", "shift" },
|
|
},
|
|
actionType = "session-action",
|
|
actionId = "mineSentenceMultiple",
|
|
},
|
|
},
|
|
}, nil
|
|
end,
|
|
},
|
|
state = {
|
|
binary_path = "/tmp/subminer",
|
|
session_binding_names = {},
|
|
session_numeric_binding_names = {},
|
|
session_numeric_selection = nil,
|
|
},
|
|
process = {
|
|
check_binary_available = function()
|
|
return true
|
|
end,
|
|
run_binary_command_async = function(args)
|
|
recorded.async_calls[#recorded.async_calls + 1] = args
|
|
end,
|
|
},
|
|
environment = {
|
|
resolve_session_bindings_artifact_path = function()
|
|
return artifact_path
|
|
end,
|
|
},
|
|
log = {
|
|
subminer_log = function() end,
|
|
show_osd = function(message)
|
|
recorded.osd[#recorded.osd + 1] = message
|
|
end,
|
|
},
|
|
}
|
|
|
|
local bindings = session_bindings.create(ctx)
|
|
assert_true(bindings.register_bindings(), "session bindings should register")
|
|
|
|
local starter = nil
|
|
for _, binding in ipairs(recorded.bindings) do
|
|
if binding.keys == "Ctrl+Shift+s" then
|
|
starter = binding
|
|
break
|
|
end
|
|
end
|
|
assert_true(starter ~= nil, "multi-mine starter binding should be registered")
|
|
|
|
starter.fn()
|
|
|
|
local modified_digit = nil
|
|
for _, binding in ipairs(recorded.bindings) do
|
|
if binding.keys == "Ctrl+Shift+3" then
|
|
modified_digit = binding
|
|
break
|
|
end
|
|
end
|
|
assert_true(modified_digit ~= nil, "numeric selection should bind Ctrl+Shift+3")
|
|
|
|
modified_digit.fn()
|
|
|
|
local call = recorded.async_calls[#recorded.async_calls]
|
|
assert_true(call ~= nil, "modified digit should invoke CLI action")
|
|
assert_true(call[1] == "/tmp/subminer", "CLI action should use configured binary")
|
|
assert_true(call[2] == "--mine-sentence-count", "CLI action should mine sentence count")
|
|
assert_true(call[3] == "3", "CLI action should pass selected count")
|
|
|
|
print("plugin session binding regression tests: OK")
|