mirror of
https://github.com/zoriya/lz.n.git
synced 2025-12-06 06:36:11 +00:00
87 lines
3.0 KiB
Lua
87 lines
3.0 KiB
Lua
---@diagnostic disable: invisible
|
|
vim.g.lz_n = {
|
|
load = function() end,
|
|
}
|
|
local keys = require("lz.n.handler.keys")
|
|
local loader = require("lz.n.loader")
|
|
local spy = require("luassert.spy")
|
|
|
|
describe("handlers.keys", function()
|
|
it("parses ids correctly", function()
|
|
local tests = {
|
|
{ "<C-/>", "<c-/>", true },
|
|
{ "<C-h>", "<c-H>", true },
|
|
{ "<C-h>k", "<c-H>K", false },
|
|
}
|
|
for _, test in ipairs(tests) do
|
|
if test[3] then
|
|
local plguin = {}
|
|
keys.parse(plguin, { test[1], test[2] })
|
|
assert.same(plguin.keys[1].id, plguin.keys[2].id)
|
|
else
|
|
local plugin = {}
|
|
keys.parse(plugin, { test[1], test[2] })
|
|
assert.is_not.same(plugin.keys[1].id, plugin.keys[2].id)
|
|
end
|
|
end
|
|
end)
|
|
it("Key only loads plugin once", function()
|
|
local lhs = "<leader>tt"
|
|
---@type lz.n.Plugin
|
|
local plugin = {
|
|
name = "foo",
|
|
}
|
|
keys.parse(plugin, lhs)
|
|
local spy_load = spy.on(loader, "_load")
|
|
keys.add(plugin)
|
|
local feed = vim.api.nvim_replace_termcodes("<Ignore>" .. lhs, true, true, true)
|
|
vim.api.nvim_feedkeys(feed, "ix", false)
|
|
vim.api.nvim_feedkeys(feed, "ix", false)
|
|
assert.spy(spy_load).called(1)
|
|
--
|
|
end)
|
|
it("Multiple keys only load plugin once", function()
|
|
---@param fst string
|
|
---@param snd string
|
|
local function itt(fst, snd)
|
|
---@type lz.n.Plugin
|
|
local plugin = {
|
|
name = "foo",
|
|
}
|
|
keys.parse(plugin, { fst, snd })
|
|
local spy_load = spy.on(loader, "_load")
|
|
keys.add(plugin)
|
|
local feed1 = vim.api.nvim_replace_termcodes("<Ignore>" .. plugin.keys[1].lhs, true, true, true)
|
|
vim.api.nvim_feedkeys(feed1, "ix", false)
|
|
local feed2 = vim.api.nvim_replace_termcodes("<Ignore>" .. plugin.keys[2].lhs, true, true, true)
|
|
vim.api.nvim_feedkeys(feed2, "ix", false)
|
|
assert.spy(spy_load).called(1)
|
|
end
|
|
itt("<leader>tt", "<leader>ff")
|
|
itt("<leader>ff", "<leader>tt")
|
|
end)
|
|
it("Plugins' keymaps are triggered", function()
|
|
local lhs = "<leader>xy"
|
|
---@type lz.n.Plugin
|
|
local plugin = {
|
|
name = "baz",
|
|
}
|
|
keys.parse(plugin, lhs)
|
|
local triggered = false
|
|
local orig_load = loader._load
|
|
---@diagnostic disable-next-line: duplicate-set-field
|
|
loader._load = function(...)
|
|
vim.keymap.set("n", lhs, function()
|
|
triggered = true
|
|
end)
|
|
orig_load(...)
|
|
end
|
|
keys.add(plugin)
|
|
local feed = vim.api.nvim_replace_termcodes("<Ignore>" .. lhs, true, true, true)
|
|
vim.api.nvim_feedkeys(feed, "ix", false)
|
|
vim.api.nvim_feedkeys(feed, "x", false)
|
|
assert.True(triggered)
|
|
loader._load = orig_load
|
|
end)
|
|
end)
|