From 8c89ac4680b1657d372eba6bc5b983bd7e3f89cb Mon Sep 17 00:00:00 2001 From: Marc Jakobi Date: Wed, 28 Aug 2024 11:37:08 +0200 Subject: [PATCH] tests: add trigger_load in before spec --- spec/trigger_load_in_hook_spec.lua | 83 ++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 spec/trigger_load_in_hook_spec.lua diff --git a/spec/trigger_load_in_hook_spec.lua b/spec/trigger_load_in_hook_spec.lua new file mode 100644 index 0000000..b30540b --- /dev/null +++ b/spec/trigger_load_in_hook_spec.lua @@ -0,0 +1,83 @@ +---@diagnostic disable: invisible +vim.g.lz_n = { + load = function() end, +} +local lz = require("lz.n") + +describe("trigger_load in before/after hooks", function() + for _, hook in ipairs({ "before", "after", "load" }) do + it("resilient against state updates with a single event in " .. hook .. " hook", function() + local i = 0 + while i < 50 do -- make sure it's not flaky + i = i + 1 + local foo_load_count = 0 + local zoo_load_count = 0 + local hoo_load_count = 0 + local ignored_by_trigger_load + lz.load({ + { + "bar", + [hook] = function() + -- This should remove bar from the event handler's list + ignored_by_trigger_load = lz.trigger_load({ "foo", "zoo", "hoo" }) + end, + event = "BufEnter", + }, + { + "foo", + event = "BufEnter", + load = function() + foo_load_count = foo_load_count + 1 + end, + }, + { + "zoo", + event = "BufEnter", + load = function() + zoo_load_count = zoo_load_count + 1 + end, + }, + { + "hoo", + event = "BufEnter", + load = function() + hoo_load_count = hoo_load_count + 1 + end, + }, + }) + vim.api.nvim_exec_autocmds("BufEnter", {}) + assert.is_not_nil(ignored_by_trigger_load) -- before invoked + assert.same(1, foo_load_count) + assert.same(1, zoo_load_count) + assert.same(1, hoo_load_count) + end + end) + it("resilient against state updates with multiple events in " .. hook .. " hook", function() + local i = 0 + while i < 50 do -- make sure it's not flaky + i = i + 1 + local load_count = 0 + lz.load({ + { + "foo", + [hook] = function() + -- This should remove bar from the event handler's list + lz.trigger_load("bar") + end, + event = "BufReadPre", + }, + { + "bar", + event = "BufEnter", + load = function() + load_count = load_count + 1 + end, + }, + }) + vim.api.nvim_exec_autocmds("BufReadPre", {}) + vim.api.nvim_exec_autocmds("BufEnter", {}) + assert.same(1, load_count) + end + end) + end +end)