hook_event_dispatcher-8.x-2.04/tests/src/Kernel/ListenerTrait.php

tests/src/Kernel/ListenerTrait.php
<?php

namespace Drupal\Tests\hook_event_dispatcher\Kernel;

use PHPUnit\Framework\MockObject\Rule\InvocationOrder;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;

/**
 * ListenerTrait.
 */
trait ListenerTrait {

  /**
   * The event dispatcher.
   *
   * @var \Symfony\Component\EventDispatcher\EventDispatcherInterface
   */
  protected EventDispatcherInterface $eventDispatcher;

  /**
   * Listens to event name with callable method.
   *
   * @param string|string[] $events
   *   The event name.
   * @param string $method
   *   The callable method.
   * @param \PHPUnit\Framework\MockObject\Rule\InvocationOrder|null $expects
   *   The mock object expectation.
   *
   * @throws \Exception
   */
  protected function listen($events, string $method, ?InvocationOrder $expects = NULL): void {
    if (!$expects) {
      $expects = $this->once();
    }

    $listener = $this->createMock(self::class);
    $listener->expects($expects)
      ->method($method)
      ->willReturnCallback([$this, $method]);

    if (is_string($events)) {
      $events = [$events];
    }

    foreach ($events as $event) {
      $this->doListen($event, [$listener, $method]);
    }
  }

  /**
   * Listens to event name with callback.
   *
   * @param string $eventName
   *   The event to listen on.
   * @param callable $callback
   *   The listener.
   *
   * @throws \Exception
   */
  private function doListen(string $eventName, callable $callback): void {
    $this->getEventDispatcher()->addListener($eventName, $callback);
  }

  /**
   * Get the event dispatcher service.
   *
   * @return \Symfony\Component\EventDispatcher\EventDispatcherInterface
   *   The event dispatcher.
   *
   * @throws \Exception
   */
  public function getEventDispatcher(): EventDispatcherInterface {
    if (!isset($this->eventDispatcher)) {
      $this->eventDispatcher = $this->container->get('event_dispatcher');
    }

    return $this->eventDispatcher;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc