Issue #3375693 by andypost, catch, longwave, quietone: Fix deprecated assert_options() function usage for PHP 8.3
parent
666f9e9897
commit
8f50a5caaf
|
|
@ -174,6 +174,24 @@ stages:
|
|||
_TARGET_PHP: "8.2"
|
||||
_TARGET_DB: "sqlite-3"
|
||||
|
||||
'PHP 8.3 MySQL 8':
|
||||
<<: [ *default-stage, *run-daily ]
|
||||
variables:
|
||||
_TARGET_PHP: "8.3"
|
||||
_TARGET_DB: "mysql-8"
|
||||
|
||||
'PHP 8.3 PostgreSQL 16':
|
||||
<<: [ *default-stage, *run-daily ]
|
||||
variables:
|
||||
_TARGET_PHP: "8.3"
|
||||
_TARGET_DB: "pgsql-16"
|
||||
|
||||
'PHP 8.3 SQLite 3':
|
||||
<<: [ *default-stage, *run-daily ]
|
||||
variables:
|
||||
_TARGET_PHP: "8.3"
|
||||
_TARGET_DB: "sqlite-3"
|
||||
|
||||
# Run daily, or manually.
|
||||
# 'PHP 8.1 MariaDB 10.3.22':
|
||||
# <<: [ *default-stage, *run-daily ]
|
||||
|
|
|
|||
|
|
@ -29,11 +29,7 @@
|
|||
* It is strongly recommended that you set zend.assertions=1 in the PHP.ini file
|
||||
* (It cannot be changed from .htaccess or runtime) on development machines and
|
||||
* to 0 or -1 in production.
|
||||
*
|
||||
* @see https://wiki.php.net/rfc/expectations
|
||||
*/
|
||||
assert_options(ASSERT_ACTIVE, TRUE);
|
||||
assert_options(ASSERT_EXCEPTION, TRUE);
|
||||
|
||||
/**
|
||||
* Enable local development services.
|
||||
|
|
|
|||
|
|
@ -21,9 +21,11 @@ class Handle {
|
|||
*/
|
||||
public static function register() {
|
||||
// Since we're using exceptions, turn error warnings off.
|
||||
// phpcs:ignore Generic.PHP.DeprecatedFunctions.Deprecated
|
||||
assert_options(ASSERT_WARNING, FALSE);
|
||||
|
||||
// Turn exception throwing on.
|
||||
// phpcs:ignore Generic.PHP.DeprecatedFunctions.Deprecated
|
||||
assert_options(ASSERT_EXCEPTION, TRUE);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1058,11 +1058,6 @@ class DrupalKernel implements DrupalKernelInterface, TerminableInterface {
|
|||
// the internal browser.
|
||||
define('DRUPAL_TEST_IN_CHILD_SITE', TRUE);
|
||||
|
||||
// Web tests are to be conducted with runtime assertions active.
|
||||
assert_options(ASSERT_ACTIVE, TRUE);
|
||||
// Force assertion failures to be thrown as exceptions.
|
||||
assert_options(ASSERT_EXCEPTION, TRUE);
|
||||
|
||||
// Log fatal errors to the test site directory.
|
||||
ini_set('log_errors', 1);
|
||||
ini_set('error_log', $app_root . '/' . $test_db->getTestSitePath() . '/error.log');
|
||||
|
|
|
|||
|
|
@ -469,9 +469,12 @@ abstract class ContentEntityBase extends EntityBase implements \IteratorAggregat
|
|||
public function preSave(EntityStorageInterface $storage) {
|
||||
// An entity requiring validation should not be saved if it has not been
|
||||
// actually validated.
|
||||
assert(!$this->validationRequired || $this->validated, 'Entity validation was skipped.');
|
||||
|
||||
$this->validated = FALSE;
|
||||
if ($this->validationRequired && !$this->validated) {
|
||||
throw new \LogicException('Entity validation is required, but was skipped.');
|
||||
}
|
||||
else {
|
||||
$this->validated = FALSE;
|
||||
}
|
||||
|
||||
parent::preSave($storage);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -105,16 +105,8 @@ class ResourceResponseValidator implements EventSubscriberInterface {
|
|||
return;
|
||||
}
|
||||
|
||||
$this->doValidateResponse($response, $event->getRequest());
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps validation in an assert to prevent execution in production.
|
||||
*
|
||||
* @see self::validateResponse
|
||||
*/
|
||||
public function doValidateResponse(Response $response, Request $request) {
|
||||
assert($this->validateResponse($response, $request), 'A JSON:API response failed validation (see the logs for details). Report this in the issue queue on drupal.org');
|
||||
// Wraps validation in an assert to prevent execution in production.
|
||||
assert($this->validateResponse($response, $event->getRequest()), 'A JSON:API response failed validation (see the logs for details). Report this in the Drupal issue queue at https://www.drupal.org/project/issues/drupal');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -5,12 +5,10 @@ namespace Drupal\Tests\jsonapi\Unit\EventSubscriber;
|
|||
use Drupal\jsonapi\EventSubscriber\ResourceResponseValidator;
|
||||
use Drupal\jsonapi\ResourceType\ResourceType;
|
||||
use Drupal\jsonapi\Routing\Routes;
|
||||
use JsonSchema\Validator;
|
||||
use Drupal\Core\Extension\Extension;
|
||||
use Drupal\Core\Extension\ModuleHandlerInterface;
|
||||
use Drupal\rest\ResourceResponse;
|
||||
use Drupal\Tests\UnitTestCase;
|
||||
use Prophecy\Argument;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Drupal\Core\Routing\RouteObjectInterface;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
|
|
@ -54,47 +52,6 @@ class ResourceResponseValidatorTest extends UnitTestCase {
|
|||
$this->subscriber = $subscriber;
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::doValidateResponse
|
||||
*/
|
||||
public function testDoValidateResponse() {
|
||||
$request = $this->createRequest(
|
||||
'jsonapi.node--article.individual',
|
||||
new ResourceType('node', 'article', NULL)
|
||||
);
|
||||
|
||||
$response = $this->createResponse('{"data":null}');
|
||||
|
||||
// Capture the default assert settings.
|
||||
$zend_assertions_default = ini_get('zend.assertions');
|
||||
$assert_active_default = assert_options(ASSERT_ACTIVE);
|
||||
|
||||
// The validator *should* be called when asserts are active.
|
||||
$validator = $this->prophesize(Validator::class);
|
||||
$validator->check(Argument::any(), Argument::any())->shouldBeCalled('Validation should be run when asserts are active.');
|
||||
$validator->isValid()->willReturn(TRUE);
|
||||
$this->subscriber->setValidator($validator->reveal());
|
||||
|
||||
// Ensure asset is active.
|
||||
ini_set('zend.assertions', 1);
|
||||
assert_options(ASSERT_ACTIVE, 1);
|
||||
$this->subscriber->doValidateResponse($response, $request);
|
||||
|
||||
// The validator should *not* be called when asserts are inactive.
|
||||
$validator = $this->prophesize(Validator::class);
|
||||
$validator->check(Argument::any(), Argument::any())->shouldNotBeCalled('Validation should not be run when asserts are not active.');
|
||||
$this->subscriber->setValidator($validator->reveal());
|
||||
|
||||
// Ensure asset is inactive.
|
||||
ini_set('zend.assertions', 0);
|
||||
assert_options(ASSERT_ACTIVE, 0);
|
||||
$this->subscriber->doValidateResponse($response, $request);
|
||||
|
||||
// Reset the original assert values.
|
||||
ini_set('zend.assertions', $zend_assertions_default);
|
||||
assert_options(ASSERT_ACTIVE, $assert_active_default);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::validateResponse
|
||||
* @dataProvider validateResponseProvider
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ class EntityTestForm extends ContentEntityForm {
|
|||
$form_state->setRebuild();
|
||||
}
|
||||
}
|
||||
catch (\AssertionError $e) {
|
||||
catch (\Exception $e) {
|
||||
\Drupal::state()->set('entity_test.form.save.exception', get_class($e) . ': ' . $e->getMessage());
|
||||
}
|
||||
return $status ?? FALSE;
|
||||
|
|
|
|||
|
|
@ -229,7 +229,7 @@ class EntityFormTest extends BrowserTestBase {
|
|||
$state->set('entity_test.form.validate.test', 'button-level');
|
||||
$this->drupalGet('entity_test/add');
|
||||
$this->submitForm([], 'Save');
|
||||
$this->assertEquals('AssertionError: Entity validation was skipped.', $state->get('entity_test.form.save.exception'), 'Button-level validation handlers behave correctly.');
|
||||
$this->assertEquals('Drupal\\Core\\Entity\\EntityStorageException: Entity validation is required, but was skipped.', $state->get('entity_test.form.save.exception'), 'Button-level validation handlers behave correctly.');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -489,8 +489,8 @@ class ContentEntityBaseUnitTest extends UnitTestCase {
|
|||
// that trying to save a non-validated entity when validation is required
|
||||
// results in an exception.
|
||||
$this->assertTrue($this->entity->isValidationRequired());
|
||||
$this->expectException(\AssertionError::class);
|
||||
$this->expectExceptionMessage('Entity validation was skipped.');
|
||||
$this->expectException(\LogicException::class);
|
||||
$this->expectExceptionMessage('Entity validation is required, but was skipped.');
|
||||
$this->entity->save();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -147,17 +147,14 @@ class FieldTypePluginManagerTest extends UnitTestCase {
|
|||
]);
|
||||
|
||||
$zend_assertions_default = ini_get('zend.assertions');
|
||||
$assert_active_default = assert_options(ASSERT_ACTIVE);
|
||||
|
||||
// Test behavior when assertions are not enabled.
|
||||
ini_set('zend.assertions', 0);
|
||||
assert_options(ASSERT_ACTIVE, 0);
|
||||
$grouped_definitions = $this->fieldTypeManager->getGroupedDefinitions();
|
||||
$this->assertEquals(['General'], array_keys($grouped_definitions));
|
||||
|
||||
// Test behavior when assertions are enabled.
|
||||
ini_set('zend.assertions', 1);
|
||||
assert_options(ASSERT_ACTIVE, 1);
|
||||
$this->expectException(\AssertionError::class);
|
||||
try {
|
||||
$this->fieldTypeManager->getGroupedDefinitions();
|
||||
|
|
@ -165,7 +162,6 @@ class FieldTypePluginManagerTest extends UnitTestCase {
|
|||
catch (\Exception $e) {
|
||||
// Reset the original assert values.
|
||||
ini_set('zend.assertions', $zend_assertions_default);
|
||||
assert_options(ASSERT_ACTIVE, $assert_active_default);
|
||||
|
||||
throw $e;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -173,11 +173,6 @@ mb_language('uni');
|
|||
// reduce the fragility of the testing system in general.
|
||||
date_default_timezone_set('Australia/Sydney');
|
||||
|
||||
// Runtime assertions. PHPUnit follows the php.ini assert.active setting for
|
||||
// runtime assertions. By default this setting is on. Ensure exceptions are
|
||||
// thrown if an assert fails.
|
||||
assert_options(ASSERT_EXCEPTION, TRUE);
|
||||
|
||||
// Ensure ignored deprecation patterns listed in .deprecation-ignore.txt are
|
||||
// considered in testing.
|
||||
if (getenv('SYMFONY_DEPRECATIONS_HELPER') === FALSE) {
|
||||
|
|
|
|||
|
|
@ -29,11 +29,7 @@
|
|||
* It is strongly recommended that you set zend.assertions=1 in the PHP.ini file
|
||||
* (It cannot be changed from .htaccess or runtime) on development machines and
|
||||
* to 0 or -1 in production.
|
||||
*
|
||||
* @see https://wiki.php.net/rfc/expectations
|
||||
*/
|
||||
assert_options(ASSERT_ACTIVE, TRUE);
|
||||
assert_options(ASSERT_EXCEPTION, TRUE);
|
||||
|
||||
/**
|
||||
* Enable local development services.
|
||||
|
|
|
|||
Loading…
Reference in New Issue