From 1c0eed56f1eb2940c0b5ffdc9c4df794bd14eaa4 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Tue, 11 Apr 2023 13:52:37 +0100 Subject: [PATCH] Added runtime test for event handler inheritance, to ensure I don't accidentally break it with optimisations --- .../src/EventHandlerInheritanceTest.php | 88 +++++++++++++++++++ tests/plugins/TesterPlugin/src/Main.php | 4 +- .../TesterPlugin/src/event/ChildEvent.php | 28 ++++++ .../src/event/GrandchildEvent.php | 28 ++++++ .../TesterPlugin/src/event/ParentEvent.php | 28 ++++++ 5 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 tests/plugins/TesterPlugin/src/EventHandlerInheritanceTest.php create mode 100644 tests/plugins/TesterPlugin/src/event/ChildEvent.php create mode 100644 tests/plugins/TesterPlugin/src/event/GrandchildEvent.php create mode 100644 tests/plugins/TesterPlugin/src/event/ParentEvent.php diff --git a/tests/plugins/TesterPlugin/src/EventHandlerInheritanceTest.php b/tests/plugins/TesterPlugin/src/EventHandlerInheritanceTest.php new file mode 100644 index 000000000..efe20f8d8 --- /dev/null +++ b/tests/plugins/TesterPlugin/src/EventHandlerInheritanceTest.php @@ -0,0 +1,88 @@ +getPlugin(); + $plugin->getServer()->getPluginManager()->registerEvent( + ParentEvent::class, + function(ParentEvent $event) : void{ + $this->callOrder[] = ParentEvent::class; + }, + EventPriority::NORMAL, + $plugin + ); + $plugin->getServer()->getPluginManager()->registerEvent( + ChildEvent::class, + function(ChildEvent $event) : void{ + $this->callOrder[] = ChildEvent::class; + }, + EventPriority::NORMAL, + $plugin + ); + $plugin->getServer()->getPluginManager()->registerEvent( + GrandchildEvent::class, + function(GrandchildEvent $event) : void{ + $this->callOrder[] = GrandchildEvent::class; + }, + EventPriority::NORMAL, + $plugin + ); + + $event = new GrandchildEvent(); + $event->call(); + + if($this->callOrder === self::EXPECTED_ORDER){ + $this->setResult(Test::RESULT_OK); + }else{ + $plugin->getLogger()->error("Expected order: " . implode(", ", self::EXPECTED_ORDER) . ", got: " . implode(", ", $this->callOrder)); + $this->setResult(Test::RESULT_FAILED); + } + } +} diff --git a/tests/plugins/TesterPlugin/src/Main.php b/tests/plugins/TesterPlugin/src/Main.php index 2afd9d6ae..26d3441f4 100644 --- a/tests/plugins/TesterPlugin/src/Main.php +++ b/tests/plugins/TesterPlugin/src/Main.php @@ -56,7 +56,9 @@ class Main extends PluginBase implements Listener{ } }), 10); - $this->waitingTests = []; + $this->waitingTests = [ + new EventHandlerInheritanceTest($this), + ]; } public function onServerCommand(CommandEvent $event) : void{ diff --git a/tests/plugins/TesterPlugin/src/event/ChildEvent.php b/tests/plugins/TesterPlugin/src/event/ChildEvent.php new file mode 100644 index 000000000..b71d2627f --- /dev/null +++ b/tests/plugins/TesterPlugin/src/event/ChildEvent.php @@ -0,0 +1,28 @@ +