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

merge-requests/2249/merge
Dave Long 2024-10-07 12:52:32 +01:00
parent ea261a9d1a
commit 97775e78a5
No known key found for this signature in database
GPG Key ID: ED52AE211E142771
3 changed files with 30 additions and 8 deletions

View File

@ -127,9 +127,14 @@ class ErrorHandlerTest extends BrowserTestBase {
'%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 @@ class ErrorHandlerTest extends BrowserTestBase {
$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',
];

View File

@ -92,11 +92,20 @@ class UncaughtExceptionTest extends BrowserTestBase {
* Tests displaying an uncaught fatal error.
*/
public function testUncaughtFatalError(): void {
$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}()',
];
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 @@ class UncaughtExceptionTest extends BrowserTestBase {
$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);

View File

@ -47,6 +47,8 @@ class CallableResolverTest extends UnitTestCase {
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 @@ class CallableResolverTest extends UnitTestCase {
],
'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' => [