diff --git a/core/modules/system/tests/src/Functional/Theme/ThemeLegacyTest.php b/core/modules/system/tests/src/Functional/Theme/ThemeLegacyTest.php index 7de359c95b..f7b0cbfe46 100644 --- a/core/modules/system/tests/src/Functional/Theme/ThemeLegacyTest.php +++ b/core/modules/system/tests/src/Functional/Theme/ThemeLegacyTest.php @@ -33,6 +33,8 @@ protected function setUp(): void { /** * Ensures a theme template can override a theme function. + * + * @expectedDeprecation Theme functions are deprecated in drupal:8.0.0 and are removed from drupal:10.0.0. Use Twig templates instead of theme_theme_test_render_element_children(). See https://www.drupal.org/node/1831138 */ public function testFunctionOverride() { $this->drupalGet('theme-test/function-template-overridden'); @@ -41,6 +43,8 @@ public function testFunctionOverride() { /** * Tests that theme suggestion alter hooks work for theme functions. + * + * @expectedDeprecation Theme functions are deprecated in drupal:8.0.0 and are removed from drupal:10.0.0. Use Twig templates instead of theme_theme_test_render_element_children(). See https://www.drupal.org/node/1831138 */ public function testThemeFunctionSuggestionsAlter() { $this->drupalGet('theme-test/function-suggestion-alter'); @@ -63,6 +67,8 @@ public function testThemeFunctionSuggestionsAlter() { /** * Tests that theme suggestion alter hooks work with theme hook includes. + * + * @expectedDeprecation Theme functions are deprecated in drupal:8.0.0 and are removed from drupal:10.0.0. Use Twig templates instead of theme_theme_test_render_element_children(). See https://www.drupal.org/node/1831138 */ public function testSuggestionsAlterInclude() { // Check the original theme output. diff --git a/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php b/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php index d6d8e44246..897a07dfd2 100644 --- a/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php +++ b/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php @@ -799,6 +799,7 @@ public function testEscapingAssertions() { /** * Tests that deprecation headers do not get duplicated. * + * @expectedDeprecation Test deprecation message * @group legacy * * @see \Drupal\Core\Test\HttpClientMiddleware\TestHttpClientMiddleware::__invoke() diff --git a/core/tests/Drupal/Tests/Listeners/DeprecationListenerTrait.php b/core/tests/Drupal/Tests/Listeners/DeprecationListenerTrait.php index f28f28f92e..3de5673ee4 100644 --- a/core/tests/Drupal/Tests/Listeners/DeprecationListenerTrait.php +++ b/core/tests/Drupal/Tests/Listeners/DeprecationListenerTrait.php @@ -209,8 +209,19 @@ protected function registerErrorHandler() { } $deprecation_handler = function ($type, $msg, $file, $line, $context = []) { // Skip listed deprecations. - if ($type === E_USER_DEPRECATED && static::isDeprecationSkipped($msg)) { - return; + if ($type === E_USER_DEPRECATED) { + $message = $msg; + // @todo long and winding comment. + if (strpos($message, 'a:') === 0) { + $deprecation_array = @unserialize($message, ['allowed_classes' => FALSE]); + if (isset($deprecation_array['deprecation'])) { + $message = $deprecation_array['deprecation']; + } + } + + if (static::isDeprecationSkipped($message)) { + return; + } } return call_user_func($this->previousHandler, $type, $msg, $file, $line, $context); }; diff --git a/core/tests/Drupal/Tests/Listeners/DrupalListener.php b/core/tests/Drupal/Tests/Listeners/DrupalListener.php index 04254b24c3..5a70cfe637 100644 --- a/core/tests/Drupal/Tests/Listeners/DrupalListener.php +++ b/core/tests/Drupal/Tests/Listeners/DrupalListener.php @@ -6,7 +6,7 @@ use PHPUnit\Framework\TestListenerDefaultImplementation; use PHPUnit\Framework\Test; use PHPUnit\Framework\TestSuite; -use Symfony\Bridge\PhpUnit\Legacy\SymfonyTestsListenerTrait; +use Symfony\Bridge\PhpUnit\SymfonyTestsListener; /** * Listens to PHPUnit test runs. @@ -36,22 +36,22 @@ class DrupalListener implements TestListener { ]; /** - * @var \Symfony\Bridge\PhpUnit\Legacy\SymfonyTestsListenerTrait + * @var \Symfony\Bridge\PhpUnit\SymfonyTestsListener */ - private $symfonyTrait; + private $symfonyListener; /** * {@inheritdoc} */ public function __construct() { - $this->symfonyTrait = new SymfonyTestsListenerTrait(); + $this->symfonyListener = new SymfonyTestsListener(); } /** * {@inheritdoc} */ public function startTestSuite(TestSuite $suite): void { - $this->symfonyTrait->startTestSuite($suite); + $this->symfonyListener->startTestSuite($suite); $this->registerErrorHandler(); } @@ -59,7 +59,7 @@ public function startTestSuite(TestSuite $suite): void { * {@inheritdoc} */ public function addSkippedTest(Test $test, \Throwable $t, float $time): void { - $this->symfonyTrait->addSkippedTest($test, $t, $time); + $this->symfonyListener->addSkippedTest($test, $t, $time); } /** @@ -68,7 +68,7 @@ public function addSkippedTest(Test $test, \Throwable $t, float $time): void { public function startTest(Test $test): void { $this->registerErrorHandler(); $this->deprecationStartTest($test); - $this->symfonyTrait->startTest($test); + $this->symfonyListener->startTest($test); // Check for missing void return typehints in concrete test classes' // methods. If the method is inherited from a base test class, do @@ -91,10 +91,20 @@ public function startTest(Test $test): void { */ public function endTest(Test $test, float $time): void { $this->deprecationEndTest($test, $time); - $this->symfonyTrait->endTest($test, $time); + $this->symfonyListener->endTest($test, $time); $this->componentEndTest($test, $time); $this->standardsEndTest($test, $time); $this->removeErrorHandler(); } + /** + * Gets the wrapped symfony listener. + * + * @return \Symfony\Bridge\PhpUnit\SymfonyTestsListener + * The Symfony test listener. + */ + public function getSymfonyTestListener() { + return $this->symfonyListener; + } + } diff --git a/core/tests/Drupal/Tests/Traits/ExpectDeprecationTrait.php b/core/tests/Drupal/Tests/Traits/ExpectDeprecationTrait.php index 0aab5cade2..e9bff32fd3 100644 --- a/core/tests/Drupal/Tests/Traits/ExpectDeprecationTrait.php +++ b/core/tests/Drupal/Tests/Traits/ExpectDeprecationTrait.php @@ -100,10 +100,11 @@ private function getSymfonyTestListenerTrait() { $listeners = $reflection_property->getValue($test_result_object); foreach ($listeners as $listener) { if ($listener instanceof DrupalListener) { - $reflection_class = new \ReflectionClass($listener); - $reflection_property = $reflection_class->getProperty('symfonyTrait'); + $sf_listener = $listener->getSymfonyTestListener(); + $reflection_class = new \ReflectionClass($sf_listener); + $reflection_property = $reflection_class->getProperty('trait'); $reflection_property->setAccessible(TRUE); - return $reflection_property->getValue($listener); + return $reflection_property->getValue($sf_listener); } } }