addListener($event::class, function($e) { $e->count++; }); $dispatchedEvent = $dispatcher->dispatch($event); $this->assertSame($event, $dispatchedEvent); $this->assertEquals(1, $event->count); } public function test_it_respects_stoppable_events(): void { $provider = new ListenerProvider(); $dispatcher = new EventDispatcher($provider); $event = new class implements StoppableEventInterface { use CanStopPropagation; public int $count = 0; }; $provider->addListener($event::class, function($e) { $e->count++; $e->stopPropagation(); }); $provider->addListener($event::class, function($e) { $e->count++; // Should not run }); $dispatcher->dispatch($event); $this->assertEquals(1, $event->count); $this->assertTrue($event->isPropagationStopped()); } public function test_it_returns_the_event_object(): void { $provider = new ListenerProvider(); $dispatcher = new EventDispatcher($provider); $event = new \stdClass(); $result = $dispatcher->dispatch($event); $this->assertSame($event, $result); } }