diff --git a/tests/wplua/meson.build b/tests/wplua/meson.build index 0e5ab11d..94d2f62b 100644 --- a/tests/wplua/meson.build +++ b/tests/wplua/meson.build @@ -55,3 +55,9 @@ test( args: ['settings.lua'], env: common_env, ) +test( + 'test-lua-event-hooks', + script_tester, + args: ['event-hooks.lua'], + env: common_env, +) diff --git a/tests/wplua/scripts/event-hooks.lua b/tests/wplua/scripts/event-hooks.lua new file mode 100644 index 00000000..71a82e7b --- /dev/null +++ b/tests/wplua/scripts/event-hooks.lua @@ -0,0 +1,77 @@ +Script.async_activation = true + +local tags = {} + +local function checkpoint(tag) + Log.info("at " .. tag) + table.insert(tags, tag) +end + +local function check_results() + local i = 0 + local function inc() + i = i+1 + return i + end + + assert(tags[inc()] == "simple-1") + assert(tags[inc()] == "async-start") + assert(tags[inc()] == "async-start-advance") + assert(tags[inc()] == "async-step2") + assert(tags[inc()] == "simple-2") +end + +local common_interests = { + Interest { + type = "event", + Constraint { "event.type", "=", "test-event" }, + }, +} + +AsyncEventHook { + priority = 10, + type = "on-event", + interests = common_interests, + steps = { + start = { + next = "step2", + execute = function (event, transition) + checkpoint("async-start") + Core.idle_add(function () + checkpoint("async-start-advance") + transition:advance() + return false + end) + end, + }, + step2 = { + next = "none", + execute = function (event, transition) + checkpoint("async-step2") + transition:advance() + end, + }, + }, +}:register() + +SimpleEventHook { + priority = 15, + type = "on-event", + interests = common_interests, + execute = function (event) + checkpoint("simple-1") + end +}:register() + +SimpleEventHook { + priority = 1, + type = "after-events", + interests = common_interests, + execute = function (event) + checkpoint("simple-2") + check_results() + Script:finish_activation() + end +}:register() + +EventDispatcher.push_event { type = "test-event", priority = 1 }