(NFC) CiviEventDispatcher - Update type declaration. Add test demonstration.
authorTim Otten <totten@civicrm.org>
Fri, 19 May 2023 23:03:04 +0000 (16:03 -0700)
committerTim Otten <totten@civicrm.org>
Fri, 19 May 2023 23:03:04 +0000 (16:03 -0700)
Civi/Core/CiviEventDispatcherInterface.php
tests/phpunit/Civi/Core/CiviEventDispatcherTest.php

index fdd9238009c8d18f1a5630183957724580a8e6b5..d662e6574e88bcbb4438ac4d427910858a7bc3ff 100644 (file)
@@ -26,10 +26,12 @@ interface CiviEventDispatcherInterface {
    *
    * @param string $eventName The name of the event to dispatch. The name of
    *   the event is the name of the method that is invoked on listeners.
-   * @param Event|null $event The event to pass to the event handlers/listeners
-   *   If not supplied, an empty Event instance is created
-   *
-   * @return Event
+   * @param object|null $event The event to pass to the event handlers/listeners
+   *   The dispatcher accepts any kind of event-object.
+   *   Events defined by CiviCRM-core are usually based on `GenericHookEvent`.
+   *   If $event is a null, then an empty `GenericHookEvent` is created.
+   * @return object
+   *   The final event object.
    */
   public function dispatch($eventName, $event = NULL);
 
index 3b1bc47fac44dc1a830f406325b4cd0fdd7a4d46..5eea810a66c0ac9a3babf80c3e2a0accdf7d2483 100644 (file)
@@ -51,4 +51,20 @@ class CiviEventDispatcherTest extends \CiviUnitTestCase {
     }
   }
 
+  /**
+   * This checks whether Civi's dispatcher can be used as a backend for
+   * routing other event-objects (as in PSR-14).
+   */
+  public function testBasicEventObject(): void {
+    $d = new CiviEventDispatcher(\Civi::container());
+    $count = 0;
+    $d->addListener('testBasicEventObject', function($e) use (&$count) {
+      $this->assertTrue(is_object($e));
+      $count += $e->number;
+    });
+    $d->dispatch('testBasicEventObject', (object) ['number' => 100]);
+    $d->dispatch('testBasicEventObject', (object) ['number' => 200]);
+    $this->assertEquals(300, $count, '100 + 200 = 300.');
+  }
+
 }