Skip to content

Commit ca0d60a

Browse files
committed
qa: provide tests for ListenerProviderAggregate
Creates ListenerProviderAggregateTest, which tests the behavior of ListenerProviderAggregate. Discovered two issues while doing so, which are now resolved.
1 parent 67eff9b commit ca0d60a

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

src/ListenerProvider/ListenerProviderAggregate.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,15 @@
1313

1414
class ListenerProviderAggregate implements ListenerProviderInterface
1515
{
16+
/**
17+
* @var ListenerProviderInterface[]
18+
*/
1619
private $providers = [];
1720

1821
public function getListenersForEvent(object $event) : iterable
1922
{
20-
foreach ($providers as $provider) {
21-
yield from $provider;
23+
foreach ($this->providers as $provider) {
24+
yield from $provider->getListenersForEvent($event);
2225
}
2326
}
2427

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
/**
3+
* @see https://github.com/phly/phly-event-dispatcher for the canonical source repository
4+
* @copyright Copyright (c) 2018-2019 Matthew Weier O'Phinney (https:/mwop.net)
5+
* @license https://github.com/phly/phly-event-dispatcher/blob/master/LICENSE.md New BSD License
6+
*/
7+
8+
declare(strict_types=1);
9+
10+
namespace PhlyTest\EventDispatcher\ListenerProvider;
11+
12+
use Phly\EventDispatcher\ListenerProvider\ListenerProviderAggregate;
13+
use PHPUnit\Framework\TestCase;
14+
use Psr\EventDispatcher\ListenerProviderInterface;
15+
use PhlyTest\EventDispatcher\TestAsset\TestEvent;
16+
17+
class ListenerProviderAggregateTest extends TestCase
18+
{
19+
public function testAggregateYieldsFromAttachedProviders()
20+
{
21+
$event = new TestEvent();
22+
$listener = function (TestEvent $event) {
23+
};
24+
25+
$provider = $this->prophesize(ListenerProviderInterface::class);
26+
$provider
27+
->getListenersForEvent($event)
28+
->willReturn([$listener]);
29+
30+
$aggregate = new ListenerProviderAggregate();
31+
$aggregate->attach($provider->reveal());
32+
33+
$listeners = iterator_to_array($aggregate->getListenersForEvent($event));
34+
35+
$this->assertSame([$listener], $listeners);
36+
}
37+
}

0 commit comments

Comments
 (0)