HookOrderTestTrait.php

Namespace

Drupal\KernelTests\Core\Hook

File

core/tests/Drupal/KernelTests/Core/Hook/HookOrderTestTrait.php

View source
<?php

declare (strict_types=1);
namespace Drupal\KernelTests\Core\Hook;


/**
 * @group Hook
 */
trait HookOrderTestTrait {
  
  /**
   * Asserts that two lists of call strings are the same.
   *
   * It is meant for strings produced with __FUNCTION__ or __METHOD__.
   *
   * The assertion fails exactly when a regular ->assertSame() would fail, but
   * it provides a more useful output on failure.
   *
   * @param list<string> $expected
   *   Expected list of strings.
   * @param list<string> $actual
   *   Actual list of strings.
   * @param string $message
   *   Message to pass to ->assertSame().
   */
  protected function assertSameCallList(array $expected, array $actual, string $message = '') : void {
    // Format without the numeric array keys, but in a way that can be easily
    // copied into the test.
    $format = function (array $strings) : string {
      if (!$strings) {
        return '[]';
      }
      $parts = array_map(static function (string $call_string) {
        if (preg_match('@^(\\w+\\\\)*(\\w+)::(\\w+)@', $call_string, $matches)) {
          [
            ,
            ,
            $class_shortname,
            $method,
          ] = $matches;
          return $class_shortname . '::class . ' . var_export('::' . $method, TRUE);
        }
        return var_export($call_string, TRUE);
      }, $strings);
      return "[\n  " . implode(",\n  ", $parts) . ",\n]";
    };
    $this->assertSame($format($expected), $format($actual), $message);
    // Finally, assert that array keys and the full class names are really the
    // same, in a way that provides useful output on failure.
    $this->assertSame($expected, $actual, $message);
  }

}

Traits

Title Deprecated Summary
HookOrderTestTrait @group Hook

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.