createMock(Server::class); $mockPlugin = self::createStub(Plugin::class); $mockPlugin->method('isEnabled')->willReturn(true); $pluginManager = new PluginManager($mockServer, null); $expectedOrder = [ TestGrandchildEvent::class, TestChildEvent::class, TestParentEvent::class ]; $actualOrder = []; foreach($expectedOrder as $class){ $pluginManager->registerEvent( $class, function(TestParentEvent $event) use (&$actualOrder, $class) : void{ $actualOrder[] = $class; }, EventPriority::NORMAL, $mockPlugin ); } $event = new TestGrandchildEvent(); $event->call(); self::assertSame($expectedOrder, $actualOrder, "Expected event handlers to be called from most specific to least specific"); } }