From dcf41091ef62baf59caada4b9702708c9606e83c Mon Sep 17 00:00:00 2001 From: sunxyw <31698606+sunxyw@users.noreply.github.com> Date: Sat, 24 Dec 2022 13:34:53 +0800 Subject: [PATCH] add event provider test (#195) --- src/ZM/Event/EventProvider.php | 1 + tests/ZM/Event/EventProviderTest.php | 75 ++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 tests/ZM/Event/EventProviderTest.php diff --git a/src/ZM/Event/EventProvider.php b/src/ZM/Event/EventProvider.php index e14031b7..1d973343 100644 --- a/src/ZM/Event/EventProvider.php +++ b/src/ZM/Event/EventProvider.php @@ -34,6 +34,7 @@ class EventProvider implements SortedProviderInterface self::$_event_map[$event->class][$event->method][] = $event; } elseif (is_array($callback) && is_object($callback[0] ?? '') && is_string($callback[1] ?? null)) { // 如果没有上面两个属性,则可能是回调函数是一个数组,如果是这样,则可以直接使用回调函数 + self::$_events[$event::class][] = [$level, $callback]; self::$_event_map[$callback[0]::class][$callback[1]][] = $event; $event->class = $callback[0]::class; $event->method = $callback[1]; diff --git a/tests/ZM/Event/EventProviderTest.php b/tests/ZM/Event/EventProviderTest.php new file mode 100644 index 00000000..28157a3b --- /dev/null +++ b/tests/ZM/Event/EventProviderTest.php @@ -0,0 +1,75 @@ +ep = new EventProvider(); + } + + public function testAddEventListenerWithCallback(): void + { + $event = 'test'; + $callback = fn () => null; + $this->ep->addEventListener($event, $callback, 2496); + $l = $this->ep->getEventListeners($event); + $this->assertSame([ + [2496, $callback], + ], $l); + } + + public function testAddEventListenerWithObject(): void + { + // no meaning for using ZMUtil, just for testing + $event = new BindEvent(ZMUtil::class, 2496); + $event->class = self::class; + $event->method = 'testAddEventListenerWithObject'; + $callback = fn () => null; + $this->ep->addEventListener($event, $callback, 2496); + $l = $this->ep->getEventListeners($event::class); + $this->assertIsArray($l); + $this->assertSame(self::class, $l[0][1][0]::class); + $this->assertSame('testAddEventListenerWithObject', $l[0][1][1]); + } + + public function testAddEventListenerWithCallableArray(): void + { + // no meaning for using ZMUtil, just for testing + $event = new ZMUtil(); + $callback = [$this, 'testAddEventListenerWithCallableArray']; + $this->ep->addEventListener($event, $callback, 2496); + $l = $this->ep->getEventListeners(ZMUtil::class); + $this->assertIsArray($l); + $this->assertSame('testAddEventListenerWithCallableArray', $l[0][1][1]); + } + + public function testAddEventListenerWithCustomName(): void + { + $event = new class() { + public function getName(): string + { + return 'test'; + } + }; + $callback = fn () => null; + $this->ep->addEventListener('test', $callback, 2496); + $l = $this->ep->getEventListeners('test'); + $ll = $this->ep->getListenersForEvent($event); + $this->assertSame($l, $ll); + } +}