Verified Commit 97775e78 authored by Dave Long's avatar Dave Long
Browse files

Issue #3477366 by andypost: Fix closures in tests for PHP 8.4

parent ea261a9d
Loading
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -127,9 +127,14 @@ public function testExceptionHandler(): void {
      '%line' => 56,
      '%file' => $this->getModulePath('error_test') . '/error_test.module',
    ];
    $select = \Drupal::database()->select('bananas_are_awesome', 'b')->fields('b');
    $message = \Drupal::database()->prepareStatement((string) $select, [])->getQueryString();
    $message = str_replace(["\r", "\n"], ' ', $message);
    $error_pdo_exception = [
      '%type' => 'DatabaseExceptionWrapper',
      '@message' => 'SELECT "b".* FROM {bananas_are_awesome} "b"',
      '@message' => PHP_VERSION_ID >= 80400 ?
      $message :
      'SELECT "b".* FROM {bananas_are_awesome} "b"',
      '%function' => 'Drupal\error_test\Controller\ErrorTestController->triggerPDOException()',
      '%line' => 64,
      '%file' => $this->getModulePath('error_test') . '/error_test.module',
@@ -137,7 +142,9 @@ public function testExceptionHandler(): void {
    $error_renderer_exception = [
      '%type' => 'Exception',
      '@message' => 'This is an exception that occurs during rendering',
      '%function' => 'Drupal\error_test\Controller\ErrorTestController->Drupal\error_test\Controller\{closure}()',
      '%function' => PHP_VERSION_ID >= 80400 ?
      'Drupal\error_test\Controller\ErrorTestController->{closure:Drupal\error_test\Controller\ErrorTestController::triggerRendererException():104}()' :
      'Drupal\error_test\Controller\ErrorTestController->Drupal\error_test\Controller\{closure}()',
      '%line' => 82,
      '%file' => $this->getModulePath('error_test') . '/error_test.module',
    ];
+17 −6
Original line number Diff line number Diff line
@@ -92,11 +92,20 @@ public function testUncaughtException(): void {
   * Tests displaying an uncaught fatal error.
   */
  public function testUncaughtFatalError(): void {
    if (PHP_VERSION_ID >= 80400) {
      $fatal_error = [
        '%type' => 'TypeError',
        '@message' => 'Drupal\error_test\Controller\ErrorTestController::{closure:Drupal\error_test\Controller\ErrorTestController::generateFatalErrors():64}(): Argument #1 ($test) must be of type array, string given, called in ' . \Drupal::root() . '/core/modules/system/tests/modules/error_test/src/Controller/ErrorTestController.php on line 67',
        '%function' => 'Drupal\error_test\Controller\ErrorTestController->{closure:Drupal\error_test\Controller\ErrorTestController::generateFatalErrors():64}()',
      ];
    }
    else {
      $fatal_error = [
        '%type' => 'TypeError',
        '@message' => 'Drupal\error_test\Controller\ErrorTestController::Drupal\error_test\Controller\{closure}(): Argument #1 ($test) must be of type array, string given, called in ' . \Drupal::root() . '/core/modules/system/tests/modules/error_test/src/Controller/ErrorTestController.php on line 67',
        '%function' => 'Drupal\error_test\Controller\ErrorTestController->Drupal\error_test\Controller\{closure}()',
      ];
    }
    $this->drupalGet('error-test/generate-fatal-errors');
    $this->assertSession()->statusCodeEquals(500);
    $message = new FormattableMarkup('%type: @message in %function (line ', $fatal_error);
@@ -155,7 +164,9 @@ public function testErrorContainer(): void {
    $this->writeSettings($settings);
    \Drupal::service('kernel')->invalidateContainer();

    $this->expectedExceptionMessage = 'Drupal\FunctionalTests\Bootstrap\ErrorContainer::Drupal\FunctionalTests\Bootstrap\{closure}(): Argument #1 ($container) must be of type Drupal\FunctionalTests\Bootstrap\ErrorContainer';
    $this->expectedExceptionMessage = PHP_VERSION_ID >= 80400 ?
    'Drupal\FunctionalTests\Bootstrap\ErrorContainer::{closure:Drupal\FunctionalTests\Bootstrap\ErrorContainer::get():21}(): Argument #1 ($container) must be of type Drupal\FunctionalTests\Bootstrap\ErrorContainer' :
    'Drupal\FunctionalTests\Bootstrap\ErrorContainer::Drupal\FunctionalTests\Bootstrap\{closure}(): Argument #1 ($container) must be of type Drupal\FunctionalTests\Bootstrap\ErrorContainer';
    $this->drupalGet('');
    $this->assertSession()->statusCodeEquals(500);

+4 −0
Original line number Diff line number Diff line
@@ -47,6 +47,8 @@ public function testCallbackResolver(): void {
        function ($suffix) {
          return __METHOD__ . '+' . $suffix;
        },
        PHP_VERSION_ID >= 80400 ?
        '{closure:Drupal\Tests\Core\Utility\CallableResolverTest::testCallbackResolver():47}' :
        'Drupal\Tests\Core\Utility\{closure}',
      ],
      'First-class callable function' => [
@@ -59,6 +61,8 @@ function ($suffix) {
      ],
      'Arrow function' => [
        fn($suffix) => __METHOD__ . '+' . $suffix,
        PHP_VERSION_ID >= 80400 ?
        '{closure:Drupal\Tests\Core\Utility\CallableResolverTest::testCallbackResolver():63}' :
        'Drupal\Tests\Core\Utility\{closure}',
      ],
      'Static function' => [