diff --git a/composer.json b/composer.json
index 2dc16113..aa3a6816 100644
--- a/composer.json
+++ b/composer.json
@@ -21,7 +21,7 @@
"composer/composer": "^1.9.1",
"drupal/coder": "^8.3.7",
"mikey179/vfsstream": "^1.6.8",
- "phpunit/phpunit": "^8.4.1",
+ "phpunit/phpunit": "^8.4.1 || ^9",
"phpspec/prophecy": "^1.7",
"symfony/css-selector": "^4.4",
"symfony/phpunit-bridge": "^4.4",
diff --git a/core/lib/Drupal/Component/Utility/NestedArray.php b/core/lib/Drupal/Component/Utility/NestedArray.php
index 86c73099..1778706e 100644
--- a/core/lib/Drupal/Component/Utility/NestedArray.php
+++ b/core/lib/Drupal/Component/Utility/NestedArray.php
@@ -366,4 +366,24 @@ public static function filter(array $array, callable $callable = NULL) {
return $array;
}
+ /**
+ * Sorts the keys of a nested array recursively.
+ *
+ * @param array $array
+ * The nested array.
+ *
+ * @return array
+ * The filtered array.
+ */
+ public static function sortKeys(array $array, $sort_flags = SORT_REGULAR) {
+ ksort($array, $sort_flags);
+ foreach ($array as &$element) {
+ if (is_array($element)) {
+ $element = static::sortKeys($element, $sort_flags);
+ }
+ }
+
+ return $array;
+ }
+
}
diff --git a/core/lib/Drupal/Core/Composer/Composer.php b/core/lib/Drupal/Core/Composer/Composer.php
index bd87d539..aa191646 100644
--- a/core/lib/Drupal/Core/Composer/Composer.php
+++ b/core/lib/Drupal/Core/Composer/Composer.php
@@ -316,7 +316,7 @@ public static function upgradePHPUnit(Event $event) {
return;
}
- // If the PHP version is 7.3 or above and PHPUnit is less than version 7
+ // If the PHP version is 7.4 or above and PHPUnit is less than version 9
// call the drupal-phpunit-upgrade script to upgrade PHPUnit.
if (!static::upgradePHPUnitCheck($phpunit_package->getVersion())) {
$event->getComposer()
@@ -338,7 +338,7 @@ public static function upgradePHPUnit(Event $event) {
* TRUE if the PHPUnit needs to be upgraded, FALSE if not.
*/
public static function upgradePHPUnitCheck($phpunit_version) {
- return !(version_compare(PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION, '7.3') >= 0 && version_compare($phpunit_version, '7.0') < 0);
+ return !(version_compare(PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION, '7.4') >= 0 && version_compare($phpunit_version, '9.0') < 0);
}
}
diff --git a/core/modules/hal/tests/src/Kernel/EntityTranslationNormalizeTest.php b/core/modules/hal/tests/src/Kernel/EntityTranslationNormalizeTest.php
index bd31f529..edb4c080 100644
--- a/core/modules/hal/tests/src/Kernel/EntityTranslationNormalizeTest.php
+++ b/core/modules/hal/tests/src/Kernel/EntityTranslationNormalizeTest.php
@@ -2,6 +2,7 @@
namespace Drupal\Tests\hal\Kernel;
+use Drupal\Component\Utility\NestedArray;
use Drupal\node\Entity\Node;
use Drupal\node\NodeInterface;
use Drupal\user\Entity\User;
@@ -70,8 +71,8 @@ public function testNodeTranslation() {
$normalized = $this->serializer->normalize($node, $this->format);
- $this->assertContains(['lang' => 'en', 'value' => $node->getTitle()], $normalized['title'], 'Original language title has been normalized.');
- $this->assertContains(['lang' => 'de', 'value' => $translation->getTitle()], $normalized['title'], 'Translation language title has been normalized.');
+ $this->assertContains(['lang' => 'en', 'value' => $node->getTitle()], NestedArray::sortKeys($normalized['title']), 'Original language title has been normalized.');
+ $this->assertContains(['lang' => 'de', 'value' => $translation->getTitle()], NestedArray::sortKeys($normalized['title']), 'Translation language title has been normalized.');
/** @var \Drupal\node\NodeInterface $denormalized_node */
$denormalized_node = $this->serializer->denormalize($normalized, 'Drupal\node\Entity\Node', $this->format);
diff --git a/core/modules/migrate/tests/src/Unit/MigrateStubTest.php b/core/modules/migrate/tests/src/Unit/MigrateStubTest.php
index fcf171b1..dbdc5e8e 100644
--- a/core/modules/migrate/tests/src/Unit/MigrateStubTest.php
+++ b/core/modules/migrate/tests/src/Unit/MigrateStubTest.php
@@ -3,6 +3,7 @@
namespace Drupal\Tests\migrate\Unit;
use Drupal\Component\Plugin\Exception\PluginNotFoundException;
+use Drupal\Tests\Traits\PhpUnitWarningsCompatibilityTrait;
use Drupal\migrate\MigrateStub;
use Drupal\migrate\Plugin\MigrateDestinationInterface;
use Drupal\migrate\Plugin\MigrateIdMapInterface;
@@ -22,6 +23,8 @@
*/
class MigrateStubTest extends TestCase {
+ use PhpUnitWarningsCompatibilityTrait;
+
/**
* The plugin manager prophecy.
*
diff --git a/core/modules/views/tests/src/Kernel/Plugin/ViewsSqlExceptionTest.php b/core/modules/views/tests/src/Kernel/Plugin/ViewsSqlExceptionTest.php
index 39574d65..f08ac5be 100644
--- a/core/modules/views/tests/src/Kernel/Plugin/ViewsSqlExceptionTest.php
+++ b/core/modules/views/tests/src/Kernel/Plugin/ViewsSqlExceptionTest.php
@@ -47,7 +47,7 @@ public function testSqlException() {
]);
$this->expectException(DatabaseExceptionWrapper::class);
- $this->expectExceptionMessageRegExp('/^Exception in Test filters\[test_filter\]:/');
+ $this->expectExceptionMessageMatches('/^Exception in Test filters\[test_filter\]:/');
$this->executeView($view);
}
diff --git a/core/scripts/run-tests.sh b/core/scripts/run-tests.sh
index 955eb5bf..91b47782 100755
--- a/core/scripts/run-tests.sh
+++ b/core/scripts/run-tests.sh
@@ -149,7 +149,7 @@
}
if (!Composer::upgradePHPUnitCheck(Version::id())) {
- simpletest_script_print_error("PHPUnit testing framework version 7 or greater is required when running on PHP 7.3 or greater. Run the command 'composer run-script drupal-phpunit-upgrade' in order to fix this.");
+ simpletest_script_print_error("PHPUnit testing framework version 9 or greater is required when running on PHP 7.4 or greater. Run the command 'composer run-script drupal-phpunit-upgrade' in order to fix this.");
exit(SIMPLETEST_SCRIPT_EXIT_FAILURE);
}
diff --git a/core/tests/Drupal/BuildTests/Framework/BuildTestBase.php b/core/tests/Drupal/BuildTests/Framework/BuildTestBase.php
index cddc6d58..be8ae2e4 100644
--- a/core/tests/Drupal/BuildTests/Framework/BuildTestBase.php
+++ b/core/tests/Drupal/BuildTests/Framework/BuildTestBase.php
@@ -7,7 +7,7 @@
use Behat\Mink\Mink;
use Behat\Mink\Session;
use Drupal\Component\FileSystem\FileSystem as DrupalFilesystem;
-use Drupal\Tests\Traits\PHPUnit8Warnings;
+use Drupal\Tests\Traits\PhpUnitWarningsCompatibilityTrait;
use PHPUnit\Framework\TestCase;
use Symfony\Component\BrowserKit\Client as SymfonyClient;
use Symfony\Component\Filesystem\Filesystem as SymfonyFilesystem;
@@ -53,7 +53,7 @@
abstract class BuildTestBase extends TestCase {
use ExternalCommandRequirementsTrait;
- use PHPUnit8Warnings;
+ use PhpUnitWarningsCompatibilityTrait;
/**
* The working directory where this test will manipulate files.
diff --git a/core/tests/Drupal/KernelTests/Core/Messenger/MessengerTest.php b/core/tests/Drupal/KernelTests/Core/Messenger/MessengerTest.php
index ac305022..e5d33de2 100644
--- a/core/tests/Drupal/KernelTests/Core/Messenger/MessengerTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Messenger/MessengerTest.php
@@ -49,7 +49,7 @@ public function testRemoveSingleMessage() {
// Check we only have the second one.
$this->assertCount(1, $this->messenger->messagesByType(MessengerInterface::TYPE_STATUS));
- $this->assertContains('Second message with markup! (not removed).', $this->messenger->deleteByType(MessengerInterface::TYPE_STATUS));
+ $this->assertContains((new TranslatableMarkup('Second message with markup! (not removed).'))->render(), $this->messenger->deleteByType(MessengerInterface::TYPE_STATUS));
}
diff --git a/core/tests/Drupal/KernelTests/KernelTestBase.php b/core/tests/Drupal/KernelTests/KernelTestBase.php
index d5f6ca69..14351d35 100644
--- a/core/tests/Drupal/KernelTests/KernelTestBase.php
+++ b/core/tests/Drupal/KernelTests/KernelTestBase.php
@@ -21,7 +21,7 @@
use Drupal\Tests\ConfigTestTrait;
use Drupal\Tests\RandomGeneratorTrait;
use Drupal\Tests\TestRequirementsTrait;
-use Drupal\Tests\Traits\PHPUnit8Warnings;
+use Drupal\Tests\Traits\PhpUnitWarningsCompatibilityTrait;
use Drupal\TestTools\Comparator\MarkupInterfaceComparator;
use PHPUnit\Framework\Exception;
use PHPUnit\Framework\TestCase;
@@ -81,7 +81,7 @@
use RandomGeneratorTrait;
use ConfigTestTrait;
use TestRequirementsTrait;
- use PHPUnit8Warnings;
+ use PhpUnitWarningsCompatibilityTrait;
/**
* {@inheritdoc}
diff --git a/core/tests/Drupal/Tests/BrowserTestBase.php b/core/tests/Drupal/Tests/BrowserTestBase.php
index de215ad0..d3578e05 100644
--- a/core/tests/Drupal/Tests/BrowserTestBase.php
+++ b/core/tests/Drupal/Tests/BrowserTestBase.php
@@ -16,7 +16,7 @@
use Drupal\Tests\block\Traits\BlockCreationTrait;
use Drupal\Tests\node\Traits\ContentTypeCreationTrait;
use Drupal\Tests\node\Traits\NodeCreationTrait;
-use Drupal\Tests\Traits\PHPUnit8Warnings;
+use Drupal\Tests\Traits\PhpUnitWarningsCompatibilityTrait;
use Drupal\Tests\user\Traits\UserCreationTrait;
use Drupal\TestTools\Comparator\MarkupInterfaceComparator;
use GuzzleHttp\Cookie\CookieJar;
@@ -64,7 +64,7 @@
createUser as drupalCreateUser;
}
use XdebugRequestTrait;
- use PHPUnit8Warnings;
+ use PhpUnitWarningsCompatibilityTrait;
/**
* The database prefix of this test run.
diff --git a/core/tests/Drupal/Tests/Component/Annotation/Plugin/Discovery/AnnotationBridgeDecoratorTest.php b/core/tests/Drupal/Tests/Component/Annotation/Plugin/Discovery/AnnotationBridgeDecoratorTest.php
index 12732e11..5cbfa08e 100644
--- a/core/tests/Drupal/Tests/Component/Annotation/Plugin/Discovery/AnnotationBridgeDecoratorTest.php
+++ b/core/tests/Drupal/Tests/Component/Annotation/Plugin/Discovery/AnnotationBridgeDecoratorTest.php
@@ -6,6 +6,7 @@
use Drupal\Component\Annotation\Plugin\Discovery\AnnotationBridgeDecorator;
use Drupal\Component\Plugin\Definition\PluginDefinition;
use Drupal\Component\Plugin\Discovery\DiscoveryInterface;
+use Drupal\Tests\Traits\PhpUnitWarningsCompatibilityTrait;
use PHPUnit\Framework\TestCase;
/**
@@ -14,6 +15,8 @@
*/
class AnnotationBridgeDecoratorTest extends TestCase {
+ use PhpUnitWarningsCompatibilityTrait;
+
/**
* @covers ::getDefinitions
*/
diff --git a/core/tests/Drupal/Tests/Component/DependencyInjection/ContainerTest.php b/core/tests/Drupal/Tests/Component/DependencyInjection/ContainerTest.php
index 6f9e3f27..b40a6dc9 100644
--- a/core/tests/Drupal/Tests/Component/DependencyInjection/ContainerTest.php
+++ b/core/tests/Drupal/Tests/Component/DependencyInjection/ContainerTest.php
@@ -8,6 +8,7 @@
namespace Drupal\Tests\Component\DependencyInjection;
use Drupal\Component\Utility\Crypt;
+use Drupal\Tests\Traits\PhpUnitWarningsCompatibilityTrait;
use PHPUnit\Framework\TestCase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
@@ -24,6 +25,8 @@
*/
class ContainerTest extends TestCase {
+ use PhpUnitWarningsCompatibilityTrait;
+
/**
* The tested container.
*
diff --git a/core/tests/Drupal/Tests/Component/DependencyInjection/Dumper/OptimizedPhpArrayDumperTest.php b/core/tests/Drupal/Tests/Component/DependencyInjection/Dumper/OptimizedPhpArrayDumperTest.php
index 12c847d3..1a12ac25 100644
--- a/core/tests/Drupal/Tests/Component/DependencyInjection/Dumper/OptimizedPhpArrayDumperTest.php
+++ b/core/tests/Drupal/Tests/Component/DependencyInjection/Dumper/OptimizedPhpArrayDumperTest.php
@@ -8,6 +8,7 @@
namespace Drupal\Tests\Component\DependencyInjection\Dumper {
use Drupal\Component\Utility\Crypt;
+ use Drupal\Tests\Traits\PhpUnitWarningsCompatibilityTrait;
use PHPUnit\Framework\TestCase;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;
@@ -24,6 +25,8 @@
*/
class OptimizedPhpArrayDumperTest extends TestCase {
+ use PhpUnitWarningsCompatibilityTrait;
+
/**
* The container builder instance.
*
diff --git a/core/tests/Drupal/Tests/Component/Diff/Engine/DiffOpTest.php b/core/tests/Drupal/Tests/Component/Diff/Engine/DiffOpTest.php
index be205481..76f0064e 100644
--- a/core/tests/Drupal/Tests/Component/Diff/Engine/DiffOpTest.php
+++ b/core/tests/Drupal/Tests/Component/Diff/Engine/DiffOpTest.php
@@ -4,7 +4,6 @@
use Drupal\Component\Diff\Engine\DiffOp;
use PHPUnit\Framework\TestCase;
-use PHPUnit\Framework\Error\Error;
/**
* Test DiffOp base class.
@@ -25,7 +24,7 @@ class DiffOpTest extends TestCase {
* @covers ::reverse
*/
public function testReverse() {
- $this->expectException(Error::class);
+ $this->expectError();
$op = new DiffOp();
$result = $op->reverse();
}
diff --git a/core/tests/Drupal/Tests/Component/Gettext/PoStreamWriterTest.php b/core/tests/Drupal/Tests/Component/Gettext/PoStreamWriterTest.php
index 75f50d5b..d2482a20 100644
--- a/core/tests/Drupal/Tests/Component/Gettext/PoStreamWriterTest.php
+++ b/core/tests/Drupal/Tests/Component/Gettext/PoStreamWriterTest.php
@@ -4,6 +4,7 @@
use Drupal\Component\Gettext\PoItem;
use Drupal\Component\Gettext\PoStreamWriter;
+use Drupal\Tests\Traits\PhpUnitWarningsCompatibilityTrait;
use org\bovigo\vfs\vfsStream;
use org\bovigo\vfs\vfsStreamFile;
use PHPUnit\Framework\TestCase;
@@ -14,6 +15,8 @@
*/
class PoStreamWriterTest extends TestCase {
+ use PhpUnitWarningsCompatibilityTrait;
+
/**
* The PO writer object under test.
*
diff --git a/core/tests/Drupal/Tests/Component/PhpStorage/FileStorageTest.php b/core/tests/Drupal/Tests/Component/PhpStorage/FileStorageTest.php
index 17272f3e..a4eac854 100644
--- a/core/tests/Drupal/Tests/Component/PhpStorage/FileStorageTest.php
+++ b/core/tests/Drupal/Tests/Component/PhpStorage/FileStorageTest.php
@@ -5,7 +5,6 @@
use Drupal\Component\PhpStorage\FileStorage;
use Drupal\Component\Utility\Random;
use org\bovigo\vfs\vfsStreamDirectory;
-use PHPUnit\Framework\Error\Warning;
/**
* @coversDefaultClass \Drupal\Component\PhpStorage\FileStorage
@@ -99,8 +98,8 @@ public function testCreateDirectoryFailWarning() {
'bin' => 'test',
]);
$code = "expectException(Warning::class);
- $this->expectExceptionMessage('mkdir(): Permission Denied');
+ $this->expectWarning();
+ $this->expectWarningMessage('mkdir(): Permission Denied');
$storage->save('subdirectory/foo.php', $code);
}
diff --git a/core/tests/Drupal/Tests/Component/Plugin/PluginManagerBaseTest.php b/core/tests/Drupal/Tests/Component/Plugin/PluginManagerBaseTest.php
index 954ff701..64586b29 100644
--- a/core/tests/Drupal/Tests/Component/Plugin/PluginManagerBaseTest.php
+++ b/core/tests/Drupal/Tests/Component/Plugin/PluginManagerBaseTest.php
@@ -5,6 +5,7 @@
use Drupal\Component\Plugin\Exception\PluginNotFoundException;
use Drupal\Component\Plugin\Mapper\MapperInterface;
use Drupal\Component\Plugin\PluginManagerBase;
+use Drupal\Tests\Traits\PhpUnitWarningsCompatibilityTrait;
use PHPUnit\Framework\TestCase;
/**
@@ -13,6 +14,8 @@
*/
class PluginManagerBaseTest extends TestCase {
+ use PhpUnitWarningsCompatibilityTrait;
+
/**
* A callback method for mocking FactoryInterface objects.
*/
diff --git a/core/tests/Drupal/Tests/Component/Serialization/YamlTest.php b/core/tests/Drupal/Tests/Component/Serialization/YamlTest.php
index 860c3d6e..e8743587 100644
--- a/core/tests/Drupal/Tests/Component/Serialization/YamlTest.php
+++ b/core/tests/Drupal/Tests/Component/Serialization/YamlTest.php
@@ -103,7 +103,7 @@ public function testObjectSupportDisabledPecl() {
*/
public function testObjectSupportDisabledSymfony() {
$this->expectException(InvalidDataTypeException::class);
- $this->expectExceptionMessageRegExp('/^Object support when parsing a YAML file has been disabled/');
+ $this->expectExceptionMessageMatches('/^Object support when parsing a YAML file has been disabled/');
$object = new \stdClass();
$object->foo = 'bar';
// In core all Yaml encoding is done via Symfony and it does not support
diff --git a/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/AssertUtilsTrait.php b/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/AssertUtilsTrait.php
index 96dab849..6119fe2a 100644
--- a/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/AssertUtilsTrait.php
+++ b/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/AssertUtilsTrait.php
@@ -2,13 +2,13 @@
namespace Drupal\Tests\Composer\Plugin\Scaffold;
-use Drupal\Tests\Traits\PHPUnit8Warnings;
+use Drupal\Tests\Traits\PhpUnitWarningsCompatibilityTrait;
/**
* Convenience class for creating fixtures.
*/
trait AssertUtilsTrait {
- use PHPUnit8Warnings;
+ use PhpUnitWarningsCompatibilityTrait;
/**
* Asserts that a given file exists and is/is not a symlink.
diff --git a/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Integration/AppendOpTest.php b/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Integration/AppendOpTest.php
index e6f7bd67..f5b3d21d 100644
--- a/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Integration/AppendOpTest.php
+++ b/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Integration/AppendOpTest.php
@@ -5,7 +5,7 @@
use Drupal\Composer\Plugin\Scaffold\Operations\AppendOp;
use Drupal\Composer\Plugin\Scaffold\ScaffoldOptions;
use Drupal\Tests\Composer\Plugin\Scaffold\Fixtures;
-use Drupal\Tests\Traits\PHPUnit8Warnings;
+use Drupal\Tests\Traits\PhpUnitWarningsCompatibilityTrait;
use PHPUnit\Framework\TestCase;
/**
@@ -14,7 +14,7 @@
* @group Scaffold
*/
class AppendOpTest extends TestCase {
- use PHPUnit8Warnings;
+ use PhpUnitWarningsCompatibilityTrait;
/**
* @covers ::process
diff --git a/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Integration/ReplaceOpTest.php b/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Integration/ReplaceOpTest.php
index cb5d6c7c..1df61ff7 100644
--- a/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Integration/ReplaceOpTest.php
+++ b/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Integration/ReplaceOpTest.php
@@ -5,7 +5,7 @@
use Drupal\Composer\Plugin\Scaffold\Operations\ReplaceOp;
use Drupal\Composer\Plugin\Scaffold\ScaffoldOptions;
use Drupal\Tests\Composer\Plugin\Scaffold\Fixtures;
-use Drupal\Tests\Traits\PHPUnit8Warnings;
+use Drupal\Tests\Traits\PhpUnitWarningsCompatibilityTrait;
use PHPUnit\Framework\TestCase;
/**
@@ -14,7 +14,7 @@
* @group Scaffold
*/
class ReplaceOpTest extends TestCase {
- use PHPUnit8Warnings;
+ use PhpUnitWarningsCompatibilityTrait;
/**
* @covers ::process
diff --git a/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Integration/SkipOpTest.php b/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Integration/SkipOpTest.php
index ba8313bb..859f931d 100644
--- a/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Integration/SkipOpTest.php
+++ b/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Integration/SkipOpTest.php
@@ -5,7 +5,7 @@
use Drupal\Composer\Plugin\Scaffold\Operations\SkipOp;
use Drupal\Composer\Plugin\Scaffold\ScaffoldOptions;
use Drupal\Tests\Composer\Plugin\Scaffold\Fixtures;
-use Drupal\Tests\Traits\PHPUnit8Warnings;
+use Drupal\Tests\Traits\PhpUnitWarningsCompatibilityTrait;
use PHPUnit\Framework\TestCase;
/**
@@ -14,7 +14,7 @@
* @group Scaffold
*/
class SkipOpTest extends TestCase {
- use PHPUnit8Warnings;
+ use PhpUnitWarningsCompatibilityTrait;
/**
* @covers ::process
diff --git a/core/tests/Drupal/Tests/Composer/Plugin/VendorHardening/ConfigTest.php b/core/tests/Drupal/Tests/Composer/Plugin/VendorHardening/ConfigTest.php
index 9755278b..0962a438 100644
--- a/core/tests/Drupal/Tests/Composer/Plugin/VendorHardening/ConfigTest.php
+++ b/core/tests/Drupal/Tests/Composer/Plugin/VendorHardening/ConfigTest.php
@@ -113,7 +113,7 @@ public function testMixedCaseConfigCleanupPackages() {
$plugin_config = $ref_plugin_config->invoke($config);
foreach (array_keys($plugin_config) as $package_name) {
- $this->assertNotRegExp('/[A-Z]/', $package_name);
+ $this->assertDoesNotMatchRegularExpression('/[A-Z]/', $package_name);
}
}
diff --git a/core/tests/Drupal/Tests/Composer/Plugin/VendorHardening/VendorHardeningPluginTest.php b/core/tests/Drupal/Tests/Composer/Plugin/VendorHardening/VendorHardeningPluginTest.php
index 089b9067..4378c1bd 100644
--- a/core/tests/Drupal/Tests/Composer/Plugin/VendorHardening/VendorHardeningPluginTest.php
+++ b/core/tests/Drupal/Tests/Composer/Plugin/VendorHardening/VendorHardeningPluginTest.php
@@ -8,6 +8,7 @@
use Composer\Package\RootPackageInterface;
use Drupal\Composer\VendorHardening\Config;
use Drupal\Composer\Plugin\VendorHardening\VendorHardeningPlugin;
+use Drupal\Tests\Traits\PhpUnitWarningsCompatibilityTrait;
use org\bovigo\vfs\vfsStream;
use PHPUnit\Framework\TestCase;
@@ -17,6 +18,8 @@
*/
class VendorHardeningPluginTest extends TestCase {
+ use PhpUnitWarningsCompatibilityTrait;
+
public function setUp(): void {
parent::setUp();
vfsStream::setup('vendor', NULL, [
diff --git a/core/tests/Drupal/Tests/Core/Asset/CssCollectionGrouperUnitTest.php b/core/tests/Drupal/Tests/Core/Asset/CssCollectionGrouperUnitTest.php
index 0396cc01..927d8e31 100644
--- a/core/tests/Drupal/Tests/Core/Asset/CssCollectionGrouperUnitTest.php
+++ b/core/tests/Drupal/Tests/Core/Asset/CssCollectionGrouperUnitTest.php
@@ -2,6 +2,7 @@
namespace Drupal\Tests\Core\Asset;
+use Drupal\Component\Utility\NestedArray;
use Drupal\Core\Asset\CssCollectionGrouper;
use Drupal\Tests\UnitTestCase;
@@ -113,8 +114,8 @@ public function testGrouper() {
$this->assertSame('all', $group['media']);
$this->assertTrue($group['preprocess']);
$this->assertSame(3, count($group['items']));
- $this->assertContains($css_assets['system.base.css'], $group['items']);
- $this->assertContains($css_assets['js.module.css'], $group['items']);
+ $this->assertContains(NestedArray::sortKeys($css_assets['system.base.css']), NestedArray::sortKeys($group['items']));
+ $this->assertContains(NestedArray::sortKeys($css_assets['js.module.css']), NestedArray::sortKeys($group['items']));
// Check group 2.
$group = $groups[1];
@@ -123,7 +124,7 @@ public function testGrouper() {
$this->assertSame('all', $group['media']);
$this->assertTrue($group['preprocess']);
$this->assertSame(1, count($group['items']));
- $this->assertContains($css_assets['field.css'], $group['items']);
+ $this->assertContains(NestedArray::sortKeys($css_assets['field.css']), NestedArray::sortKeys($group['items']));
// Check group 3.
$group = $groups[2];
@@ -132,7 +133,7 @@ public function testGrouper() {
$this->assertSame('all', $group['media']);
$this->assertTrue($group['preprocess']);
$this->assertSame(1, count($group['items']));
- $this->assertContains($css_assets['external.css'], $group['items']);
+ $this->assertContains(NestedArray::sortKeys($css_assets['external.css']), NestedArray::sortKeys($group['items']));
// Check group 4.
$group = $groups[3];
@@ -141,7 +142,7 @@ public function testGrouper() {
$this->assertSame('all', $group['media']);
$this->assertTrue($group['preprocess']);
$this->assertSame(1, count($group['items']));
- $this->assertContains($css_assets['elements.css'], $group['items']);
+ $this->assertContains(NestedArray::sortKeys($css_assets['elements.css']), NestedArray::sortKeys($group['items']));
// Check group 5.
$group = $groups[4];
@@ -150,7 +151,7 @@ public function testGrouper() {
$this->assertSame('print', $group['media']);
$this->assertTrue($group['preprocess']);
$this->assertSame(1, count($group['items']));
- $this->assertContains($css_assets['print.css'], $group['items']);
+ $this->assertContains(NestedArray::sortKeys($css_assets['print.css']), NestedArray::sortKeys($group['items']));
}
}
diff --git a/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityBaseUnitTest.php b/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityBaseUnitTest.php
index 3f36ec29..6d36191e 100644
--- a/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityBaseUnitTest.php
+++ b/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityBaseUnitTest.php
@@ -636,7 +636,7 @@ public function testToArraySchemaException() {
->method('getPropertiesToExport')
->willReturn(NULL);
$this->expectException(SchemaIncompleteException::class);
- $this->expectExceptionMessageRegExp("/Entity type 'Mock_ConfigEntityTypeInterface_[^']*' is missing 'config_export' definition in its annotation/");
+ $this->expectExceptionMessageMatches("/Entity type 'Mock_ConfigEntityTypeInterface_[^']*' is missing 'config_export' definition in its annotation/");
$this->entity->toArray();
}
diff --git a/core/tests/Drupal/Tests/Listeners/DeprecationListenerTrait.php b/core/tests/Drupal/Tests/Listeners/DeprecationListenerTrait.php
index 8135e779..2a2fc45d 100644
--- a/core/tests/Drupal/Tests/Listeners/DeprecationListenerTrait.php
+++ b/core/tests/Drupal/Tests/Listeners/DeprecationListenerTrait.php
@@ -172,6 +172,8 @@ public static function getSkippedDeprecations() {
"The \"Drupal\Tests\Listeners\DrupalListener\" class implements \"PHPUnit\Framework\TestListener\" that is deprecated Use the `TestHook` interfaces instead.",
"The \"Drupal\Tests\Listeners\DrupalListener\" class uses \"PHPUnit\Framework\TestListenerDefaultImplementation\" that is deprecated The `TestListener` interface is deprecated.",
"The \"PHPUnit\Framework\TestSuite\" class is considered internal This class is not covered by the backward compatibility promise for PHPUnit. It may change without further notice. You should not use it from \"Drupal\Tests\TestSuites\TestSuiteBase\".",
+ // PHPUnit 9.
+ "The \"PHPUnit\TextUI\DefaultResultPrinter\" class is considered internal This class is not covered by the backward compatibility promise for PHPUnit. It may change without further notice. You should not use it from \"Drupal\Tests\Listeners\HtmlOutputPrinter\".",
];
}
diff --git a/core/tests/Drupal/Tests/Listeners/HtmlOutputPrinter.php b/core/tests/Drupal/Tests/Listeners/HtmlOutputPrinter.php
index a3f7916e..a85c3204 100644
--- a/core/tests/Drupal/Tests/Listeners/HtmlOutputPrinter.php
+++ b/core/tests/Drupal/Tests/Listeners/HtmlOutputPrinter.php
@@ -2,15 +2,27 @@
namespace Drupal\Tests\Listeners;
+use Drupal\TestTools\PhpUnitCompatibility\RunnerVersion;
use PHPUnit\Framework\TestResult;
-use PHPUnit\TextUI\ResultPrinter;
+
+// In order to manage different implementations across PHPUnit versions, we
+// dynamically load the base ResultPrinter class dependent on the PHPUnit runner
+// version.
+if (!class_exists(ResultPrinterBase::class, FALSE)) {
+ if (RunnerVersion::getMajor() < 9) {
+ class_alias('PHPUnit\TextUI\ResultPrinter', ResultPrinterBase::class);
+ }
+ else {
+ class_alias('PHPUnit\TextUI\DefaultResultPrinter', ResultPrinterBase::class);
+ }
+}
/**
* Defines a class for providing html output results for functional tests.
*
* @internal
*/
-class HtmlOutputPrinter extends ResultPrinter {
+class HtmlOutputPrinter extends ResultPrinterBase {
use HtmlOutputPrinterTrait;
diff --git a/core/tests/Drupal/Tests/Traits/PHPUnit8Warnings.php b/core/tests/Drupal/Tests/Traits/PHPUnit8Warnings.php
deleted file mode 100644
index c5d3610e..00000000
--- a/core/tests/Drupal/Tests/Traits/PHPUnit8Warnings.php
+++ /dev/null
@@ -1,43 +0,0 @@
-