summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJackson Moore <jacksonmoore@tuta.io>2026-09-04 12:50:23 +0200
committerJackson Moore <jacksonmoore@tuta.io>2026-09-04 12:50:23 +0200
commit5ce0c3b70a58ca2da9084c1e1fbc9f52607fe066 (patch)
tree09cf695106fa80a31a5916332cf5bfa7e19c85c5
parenta3127187d21b6095db9314fd036b38a95b26df4a (diff)
Fix buffer-scoped event delivery
-rw-r--r--lua/clever_f/testing/memory_host.lua7
-rw-r--r--tests/run.lua16
2 files changed, 22 insertions, 1 deletions
diff --git a/lua/clever_f/testing/memory_host.lua b/lua/clever_f/testing/memory_host.lua
index 8d92697..4c95721 100644
--- a/lua/clever_f/testing/memory_host.lua
+++ b/lua/clever_f/testing/memory_host.lua
@@ -909,9 +909,14 @@ end
function MemoryHost:_deliver_event_now(name, payload)
self:_record("event", { name = name, payload = payload })
local order = list_copy(self._event_registration_order)
+ local event_buffer = payload.buffer or self._buffer
for _, identity in ipairs(order) do
local registration = self._event_registrations[identity]
- if registration.active and registration.name_set[name] then
+ local registration_buffer = registration.options.buffer
+ if registration.active
+ and registration.name_set[name]
+ and (registration_buffer == nil or registration_buffer == event_buffer)
+ then
registration.callback(name, payload)
end
end
diff --git a/tests/run.lua b/tests/run.lua
index 38edcda..99674a5 100644
--- a/tests/run.lua
+++ b/tests/run.lua
@@ -6998,6 +6998,22 @@ test("Enabled eager events remove overlays and cancel timers", function()
end
end)
+test("MemoryHost limits scoped events to their buffer", function()
+ local host = MemoryHost.new({ buffer = "buffer-1" })
+ local deliveries = 0
+ host:register_events("TextChanged", function()
+ deliveries = deliveries + 1
+ end, { buffer = "buffer-1" })
+
+ host:deliver_event("TextChanged", {})
+ same(1, deliveries)
+ host:set_buffer("buffer-2")
+ host:deliver_event("TextChanged", {})
+ same(1, deliveries)
+ host:deliver_event("TextChanged", { buffer = "buffer-1" })
+ same(2, deliveries)
+end)
+
for _, item in ipairs(tests) do
local ok, failure = xpcall(item.body, debug.traceback)
if not ok then