1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
<?php declare(strict_types=1);
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PHPUnit\Event;
use PHPUnit\Event\Tracer\Tracer;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Small;
use PHPUnit\Framework\TestCase;
use PHPUnit\TestFixture\DummyEvent;
use PHPUnit\TestFixture\DummySubscriber;
use RuntimeException;
#[CoversClass(DirectDispatcher::class)]
#[Small]
final class DirectDispatcherTest extends TestCase
{
public function testDispatchesEventToKnownSubscribers(): void
{
$event = new DummyEvent;
$typeMap = $this->typeMap();
$dispatcher = new DirectDispatcher($typeMap);
$subscriber = $this->createMock(DummySubscriber::class);
$subscriber
->expects($this->once())
->method('notify')
->with($this->identicalTo($event));
$dispatcher->registerSubscriber($subscriber);
$dispatcher->dispatch($event);
}
public function testDispatchesEventToTracers(): void
{
$event = new DummyEvent;
$typeMap = $this->typeMap();
$dispatcher = new DirectDispatcher($typeMap);
$tracer = $this->createMock(Tracer::class);
$tracer
->expects($this->once())
->method('trace')
->with($this->identicalTo($event));
$dispatcher->registerTracer($tracer);
$dispatcher->dispatch($event);
}
public function testRegisterRejectsUnknownSubscriber(): void
{
$subscriber = $this->createStub(Subscriber::class);
$dispatcher = new DirectDispatcher(new TypeMap);
$this->expectException(RuntimeException::class);
$dispatcher->registerSubscriber($subscriber);
}
public function testDispatchRejectsUnknownEventType(): void
{
$event = new DummyEvent;
$dispatcher = new DirectDispatcher(new TypeMap);
$this->expectException(RuntimeException::class);
$dispatcher->dispatch($event);
}
private function typeMap(): TypeMap
{
$typeMap = new TypeMap;
$typeMap->addMapping(DummySubscriber::class, DummyEvent::class);
return $typeMap;
}
}
|