Skip to content
Snippets Groups Projects
Verified Commit 96293a60 authored by Dave Long's avatar Dave Long
Browse files

Issue #3425860 by mondrake: Remove deprecated TestRequirementsTrait::check(Module)Requirements

parent 991ec831
No related branches found
No related tags found
No related merge requests found
<?php
namespace Drupal\KernelTests\Core\Test;
use Drupal\FunctionalTests\BrowserMissingDependentModuleMethodTest;
use Drupal\FunctionalTests\BrowserMissingDependentModuleTest;
use Drupal\KernelTests\KernelTestBase;
use PHPUnit\Framework\SkippedTestError;
/**
* @group Test
* @group FunctionalTests
* @group legacy
*
* @coversDefaultClass \Drupal\Tests\BrowserTestBase
*/
class BrowserTestBaseTest extends KernelTestBase {
/**
* Tests that a test method is skipped when it requires a module not present.
*
* In order to catch checkRequirements() regressions, we have to make a new
* test object and run checkRequirements() here.
*
* @covers ::checkRequirements
* @covers ::checkModuleRequirements
*/
public function testMethodRequiresModule() {
$this->expectDeprecation('Drupal\Tests\TestRequirementsTrait::checkModuleRequirements() is deprecated in drupal:10.3.0 and is removed from drupal:11.0.0. There is no replacement. See https://www.drupal.org/node/3418480');
require __DIR__ . '/../../../../fixtures/BrowserMissingDependentModuleMethodTest.php';
// @phpstan-ignore-next-line
$stub_test = new BrowserMissingDependentModuleMethodTest();
// We have to setName() to the method name we're concerned with.
$stub_test->setName('testRequiresModule');
// We cannot use $this->setExpectedException() because PHPUnit would skip
// the test before comparing the exception type.
try {
$stub_test->publicCheckRequirements();
$this->fail('Missing required module throws skipped test exception.');
}
catch (SkippedTestError $e) {
$this->assertEquals('Required modules: module_does_not_exist', $e->getMessage());
}
}
/**
* Tests that a test case is skipped when it requires a module not present.
*
* In order to catch checkRequirements() regressions, we have to make a new
* test object and run checkRequirements() here.
*
* @covers ::checkRequirements
* @covers ::checkModuleRequirements
*/
public function testRequiresModule() {
$this->expectDeprecation('Drupal\Tests\TestRequirementsTrait::checkModuleRequirements() is deprecated in drupal:10.3.0 and is removed from drupal:11.0.0. There is no replacement. See https://www.drupal.org/node/3418480');
require __DIR__ . '/../../../../fixtures/BrowserMissingDependentModuleTest.php';
// @phpstan-ignore-next-line
$stub_test = new BrowserMissingDependentModuleTest();
// We have to setName() to the method name we're concerned with.
$stub_test->setName('testRequiresModule');
// We cannot use $this->setExpectedException() because PHPUnit would skip
// the test before comparing the exception type.
try {
$stub_test->publicCheckRequirements();
$this->fail('Missing required module throws skipped test exception.');
}
catch (SkippedTestError $e) {
$this->assertEquals('Required modules: module_does_not_exist', $e->getMessage());
}
}
}
......@@ -9,7 +9,6 @@
use Drupal\user\Entity\Role;
use org\bovigo\vfs\vfsStream;
use org\bovigo\vfs\visitor\vfsStreamStructureVisitor;
use PHPUnit\Framework\SkippedTestError;
use Psr\Http\Client\ClientExceptionInterface;
use Symfony\Component\HttpFoundation\Request;
......@@ -273,70 +272,6 @@ public function testLocalTimeZone() {
$this->assertEquals('Australia/Sydney', date_default_timezone_get());
}
/**
* Tests that a test method is skipped when it requires a module not present.
*
* In order to catch checkRequirements() regressions, we have to make a new
* test object and run checkRequirements() here.
*
* @covers ::checkRequirements
* @covers ::checkModuleRequirements
*
* @group legacy
*/
public function testMethodRequiresModule() {
$this->expectDeprecation('Drupal\Tests\TestRequirementsTrait::checkModuleRequirements() is deprecated in drupal:10.3.0 and is removed from drupal:11.0.0. There is no replacement. See https://www.drupal.org/node/3418480');
require __DIR__ . '/../../fixtures/KernelMissingDependentModuleMethodTest.php';
// @phpstan-ignore-next-line
$stub_test = new KernelMissingDependentModuleMethodTest();
// We have to setName() to the method name we're concerned with.
$stub_test->setName('testRequiresModule');
// We cannot use $this->setExpectedException() because PHPUnit would skip
// the test before comparing the exception type.
try {
$stub_test->publicCheckRequirements();
$this->fail('Missing required module throws skipped test exception.');
}
catch (SkippedTestError $e) {
$this->assertEquals('Required modules: module_does_not_exist', $e->getMessage());
}
}
/**
* Tests that a test case is skipped when it requires a module not present.
*
* In order to catch checkRequirements() regressions, we have to make a new
* test object and run checkRequirements() here.
*
* @covers ::checkRequirements
* @covers ::checkModuleRequirements
*
* @group legacy
*/
public function testRequiresModule() {
$this->expectDeprecation('Drupal\Tests\TestRequirementsTrait::checkModuleRequirements() is deprecated in drupal:10.3.0 and is removed from drupal:11.0.0. There is no replacement. See https://www.drupal.org/node/3418480');
require __DIR__ . '/../../fixtures/KernelMissingDependentModuleTest.php';
// @phpstan-ignore-next-line
$stub_test = new KernelMissingDependentModuleTest();
// We have to setName() to the method name we're concerned with.
$stub_test->setName('testRequiresModule');
// We cannot use $this->setExpectedException() because PHPUnit would skip
// the test before comparing the exception type.
try {
$stub_test->publicCheckRequirements();
$this->fail('Missing required module throws skipped test exception.');
}
catch (SkippedTestError $e) {
$this->assertEquals('Required modules: module_does_not_exist', $e->getMessage());
}
}
/**
* {@inheritdoc}
*/
......
......@@ -4,10 +4,6 @@
namespace Drupal\Tests;
use Drupal\Core\Extension\ExtensionDiscovery;
use PHPUnit\Util\Test;
use PHPUnit\Framework\SkippedTestError;
/**
* Allows test classes to require Drupal modules as dependencies.
*
......@@ -26,95 +22,4 @@ protected static function getDrupalRoot() {
return dirname(substr(__DIR__, 0, -strlen(__NAMESPACE__)), 2);
}
/**
* Check module requirements for the Drupal use case.
*
* This method is assumed to override
* \PHPUnit\Framework\TestCase::checkRequirements().
*
* @throws \PHPUnit\Framework\SkippedTestError
* Thrown when the requirements are not met, and this test should be
* skipped. Callers should not catch this exception.
*
* @deprecated in drupal:10.3.0 and is removed from drupal:11.0.0. There is
* no replacement.
*
* @see https://www.drupal.org/node/3418480
*/
protected function checkRequirements() {
@trigger_error(__METHOD__ . '() is deprecated in drupal:10.3.0 and is removed from drupal:11.0.0. There is no replacement. See https://www.drupal.org/node/3418480', E_USER_DEPRECATED);
if (!$this->getName(FALSE) || !method_exists($this, $this->getName(FALSE))) {
return;
}
$missingRequirements = Test::getMissingRequirements(
static::class,
$this->getName(FALSE)
);
if (!empty($missingRequirements)) {
$this->markTestSkipped(implode(PHP_EOL, $missingRequirements));
}
$root = static::getDrupalRoot();
// Check if required dependencies exist.
$annotations = Test::parseTestMethodAnnotations(
static::class,
$this->getName()
);
if (!empty($annotations['class']['requires'])) {
$this->checkModuleRequirements($root, $annotations['class']['requires']);
}
if (!empty($annotations['method']['requires'])) {
$this->checkModuleRequirements($root, $annotations['method']['requires']);
}
}
/**
* Checks missing module requirements.
*
* Iterates through a list of requires annotations and looks for missing
* modules. The test will be skipped if any of the required modules is
* missing.
*
* @param string $root
* The path to the root of the Drupal installation to scan.
* @param string[] $annotations
* A list of requires annotations from either a method or class annotation.
*
* @throws \PHPUnit\Framework\SkippedTestError
* Thrown when the requirements are not met, and this test should be
* skipped. Callers should not catch this exception.
*
* @deprecated in drupal:10.3.0 and is removed from drupal:11.0.0. There is
* no replacement.
*
* @see https://www.drupal.org/node/3418480
*/
private function checkModuleRequirements($root, array $annotations) {
@trigger_error(__METHOD__ . '() is deprecated in drupal:10.3.0 and is removed from drupal:11.0.0. There is no replacement. See https://www.drupal.org/node/3418480', E_USER_DEPRECATED);
// Make a list of required modules.
$required_modules = [];
foreach ($annotations as $requirement) {
if (str_starts_with($requirement, 'module ')) {
$required_modules[] = trim(str_replace('module ', '', $requirement));
}
}
// If there are required modules, check if they're available.
if (!empty($required_modules)) {
// Scan for modules.
$discovery = new ExtensionDiscovery($root, FALSE);
$discovery->setProfileDirectories([]);
$list = array_keys($discovery->scan('module'));
$not_available = array_diff($required_modules, $list);
if (!empty($not_available)) {
throw new SkippedTestError('Required modules: ' . implode(', ', $not_available));
}
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment