Skip to content
This repository was archived by the owner on Jan 29, 2020. It is now read-only.

Commit 6e0b2f6

Browse files
committed
Adapted EventListenerIntrospectionTrait to v3 API
This patch ports the changes from #19 to the develop branch, and adapts them for the v3 API.
1 parent 27400e1 commit 6e0b2f6

File tree

1 file changed

+27
-18
lines changed

1 file changed

+27
-18
lines changed

src/Test/EventListenerIntrospectionTrait.php

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
use PHPUnit_Framework_TestCase as TestCase;
1313
use ReflectionProperty;
1414
use Zend\EventManager\EventManager;
15-
use Zend\Stdlib\PriorityQueue;
1615

1716
/**
1817
* Trait providing utility methods and assertions for use in PHPUnit test cases.
@@ -24,10 +23,7 @@
2423
*
2524
* Some functionality in this trait duplicates functionality present in the
2625
* version 2 EventManagerInterface and/or EventManager implementation, but
27-
* abstracts that functionality for use in v3. As such, components or code
28-
* that is testing for listener registration should use the methods in this
29-
* trait to ensure tests are forwards-compatible between zend-eventmanager
30-
* versions.
26+
* abstracts that functionality for use in v3.
3127
*/
3228
trait EventListenerIntrospectionTrait
3329
{
@@ -39,7 +35,10 @@ trait EventListenerIntrospectionTrait
3935
*/
4036
private function getEventsFromEventManager(EventManager $events)
4137
{
42-
return $events->getEvents();
38+
$r = new ReflectionProperty($events, 'events');
39+
$r->setAccessible(true);
40+
$listeners = $r->getValue($events);
41+
return array_keys($listeners);
4342
}
4443

4544
/**
@@ -62,8 +61,15 @@ private function getEventsFromEventManager(EventManager $events)
6261
*/
6362
private function getListenersForEvent($event, EventManager $events, $withPriority = false)
6463
{
65-
$listeners = $events->getListeners($event);
66-
return $this->traverseListeners($listeners, $withPriority);
64+
$r = new ReflectionProperty($events, 'events');
65+
$r->setAccessible(true);
66+
$listeners = $r->getValue($events);
67+
68+
if (! isset($listeners[$event])) {
69+
return $this->traverseListeners([]);
70+
}
71+
72+
return $this->traverseListeners($listeners[$event], $withPriority);
6773
}
6874

6975
/**
@@ -82,7 +88,7 @@ private function assertListenerAtPriority(
8288
EventManager $events,
8389
$message = ''
8490
) {
85-
$message = $message ?: sprintf(
91+
$message = $message ?: sprintf(
8692
'Listener not found for event "%s" and priority %d',
8793
$event,
8894
$expectedPriority
@@ -119,18 +125,21 @@ private function getArrayOfListenersForEvent($event, EventManager $events)
119125
/**
120126
* Generator for traversing listeners in priority order.
121127
*
122-
* @param PriorityQueue $listeners
128+
* @param array $listeners
123129
* @param bool $withPriority When true, yields priority as key.
124130
*/
125-
public function traverseListeners(PriorityQueue $queue, $withPriority = false)
131+
public function traverseListeners(array $queue, $withPriority = false)
126132
{
127-
foreach ($queue as $handler) {
128-
$listener = $handler->getCallback();
129-
if ($withPriority) {
130-
$priority = (int) $handler->getMetadatum('priority');
131-
yield $priority => $listener;
132-
} else {
133-
yield $listener;
133+
krsort($queue, SORT_NUMERIC);
134+
135+
foreach ($queue as $priority => $listeners) {
136+
$priority = (int) $priority;
137+
foreach ($listeners as $listener) {
138+
if ($withPriority) {
139+
yield $priority => $listener;
140+
} else {
141+
yield $listener;
142+
}
134143
}
135144
}
136145
}

0 commit comments

Comments
 (0)