diff --git a/core/lib/Drupal/Core/Extension/Exception/ObsoleteExtensionException.php b/core/lib/Drupal/Core/Extension/Exception/ObsoleteExtensionException.php
new file mode 100644
index 0000000..6c2829d
--- /dev/null
+++ b/core/lib/Drupal/Core/Extension/Exception/ObsoleteExtensionException.php
@@ -0,0 +1,8 @@
+info['core_incompatible'])) {
throw new MissingDependencyException("Unable to install modules: module '$module' is incompatible with this version of Drupal core.");
}
+ if ($module_data[$module]->info['status'] === ExtensionStatus::OBSOLETE) {
+ throw new ObsoleteExtensionException("Unable to install modules: module '$module' is obsolete.");
+ }
}
if ($enable_dependencies) {
$module_list = $module_list ? array_combine($module_list, $module_list) : [];
diff --git a/core/modules/entity_reference/entity_reference.info.yml b/core/modules/entity_reference/entity_reference.info.yml
index 717ef21..cb3fdfe 100644
--- a/core/modules/entity_reference/entity_reference.info.yml
+++ b/core/modules/entity_reference/entity_reference.info.yml
@@ -1,6 +1,7 @@
name: 'Entity Reference'
type: module
-description: 'Deprecated. All the functionality has been moved to Core.'
+description: 'Obsolete. All the functionality has been moved to Core.'
+status: obsolete
package: Field types
version: VERSION
hidden: true
diff --git a/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFileUploadTest.php b/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFileUploadTest.php
index 80ad399..68d0464 100644
--- a/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFileUploadTest.php
+++ b/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFileUploadTest.php
@@ -17,7 +17,7 @@ class EntityReferenceFileUploadTest extends BrowserTestBase {
use TestFileCreationTrait;
- protected static $modules = ['entity_reference', 'node', 'file'];
+ protected static $modules = ['node', 'file'];
/**
* {@inheritdoc}
diff --git a/core/modules/field_layout/field_layout.info.yml b/core/modules/field_layout/field_layout.info.yml
index f4b676f..ae1386a 100644
--- a/core/modules/field_layout/field_layout.info.yml
+++ b/core/modules/field_layout/field_layout.info.yml
@@ -2,6 +2,7 @@ name: 'Field Layout'
type: module
description: 'Allows users to configure the display and form display by arranging fields in several columns.'
package: Core (Experimental)
+status: experimental
version: VERSION
dependencies:
- drupal:layout_discovery
diff --git a/core/modules/help/src/Controller/HelpController.php b/core/modules/help/src/Controller/HelpController.php
index 2c925a6..fcce940 100644
--- a/core/modules/help/src/Controller/HelpController.php
+++ b/core/modules/help/src/Controller/HelpController.php
@@ -4,6 +4,7 @@
use Drupal\Core\Cache\CacheableMetadata;
use Drupal\Core\Controller\ControllerBase;
+use Drupal\Core\Extension\ExtensionStatus;
use Drupal\Core\Extension\ModuleExtensionList;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\help\HelpSectionManager;
@@ -132,7 +133,7 @@ public function helpPage($name) {
$build['#title'] = $module_name;
$info = $this->moduleExtensionList->getExtensionInfo($name);
- if ($info['package'] === 'Core (Experimental)') {
+ if ($info['status'] === ExtensionStatus::EXPERIMENTAL) {
$this->messenger()->addWarning($this->t('This module is experimental. Experimental modules are provided for testing purposes only. Use at your own risk.', [':url' => 'https://www.drupal.org/core/experimental']));
}
diff --git a/core/modules/help_topics/help_topics.info.yml b/core/modules/help_topics/help_topics.info.yml
index 819aef1..d7dd205 100644
--- a/core/modules/help_topics/help_topics.info.yml
+++ b/core/modules/help_topics/help_topics.info.yml
@@ -2,6 +2,7 @@ name: Help Topics
type: module
description: 'Displays help topics provided by themes and modules.'
package: Core (Experimental)
+status: experimental
version: VERSION
dependencies:
- drupal:help
diff --git a/core/modules/help_topics/tests/src/Functional/HelpTopicsSyntaxTest.php b/core/modules/help_topics/tests/src/Functional/HelpTopicsSyntaxTest.php
index a442319..a6d3ae1 100644
--- a/core/modules/help_topics/tests/src/Functional/HelpTopicsSyntaxTest.php
+++ b/core/modules/help_topics/tests/src/Functional/HelpTopicsSyntaxTest.php
@@ -2,6 +2,7 @@
namespace Drupal\Tests\help_topics\Functional;
+use Drupal\Core\Extension\ExtensionStatus;
use Drupal\Tests\BrowserTestBase;
use Drupal\help_topics\HelpTopicDiscovery;
use PHPUnit\Framework\ExpectationFailedException;
@@ -278,7 +279,11 @@ protected function listDirectories($type) {
// Find the extensions of this type, even if they are not installed, but
// excluding test ones.
$lister = \Drupal::service('extension.list.' . $type);
- foreach (array_keys($lister->getAllAvailableInfo()) as $name) {
+ foreach ($lister->getAllAvailableInfo() as $name => $info) {
+ // Skip obsolete modules.
+ if (isset($info['status']) && $info['status'] === ExtensionStatus::OBSOLETE) {
+ continue;
+ }
$path = $lister->getPath($name);
// You can tell test modules because they are in package 'Testing', but
// test themes are only known by being found in test directories. So...
diff --git a/core/modules/jsonapi/tests/src/Functional/TestCoverageTest.php b/core/modules/jsonapi/tests/src/Functional/TestCoverageTest.php
index 1a306bb..2a5f668 100644
--- a/core/modules/jsonapi/tests/src/Functional/TestCoverageTest.php
+++ b/core/modules/jsonapi/tests/src/Functional/TestCoverageTest.php
@@ -3,6 +3,7 @@
namespace Drupal\Tests\jsonapi\Functional;
use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\Core\Extension\ExtensionStatus;
use Drupal\Tests\BrowserTestBase;
/**
@@ -38,7 +39,7 @@ protected function setUp(): void {
&& empty($module->info['hidden'])
&& $module->status == FALSE
&& $module->info['package'] !== 'Testing'
- && $module->info['package'] !== 'Core (Experimental)';
+ && $module->info['status'] !== ExtensionStatus::EXPERIMENTAL;
});
$this->container->get('module_installer')->install(array_keys($stable_core_modules));
diff --git a/core/modules/migrate_drupal_multilingual/migrate_drupal_multilingual.info.yml b/core/modules/migrate_drupal_multilingual/migrate_drupal_multilingual.info.yml
index 7f7b59e..622c198 100644
--- a/core/modules/migrate_drupal_multilingual/migrate_drupal_multilingual.info.yml
+++ b/core/modules/migrate_drupal_multilingual/migrate_drupal_multilingual.info.yml
@@ -2,6 +2,7 @@ name: 'Migrate Drupal Multilingual'
type: module
description: 'Provides a requirement for multilingual migrations.'
package: 'Core (Experimental)'
+status: experimental
version: VERSION
dependencies:
- drupal:migrate_drupal
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/EntityResourceRestTestCoverageTest.php b/core/modules/rest/tests/src/Functional/EntityResource/EntityResourceRestTestCoverageTest.php
index d84edf3..c130b2f 100644
--- a/core/modules/rest/tests/src/Functional/EntityResource/EntityResourceRestTestCoverageTest.php
+++ b/core/modules/rest/tests/src/Functional/EntityResource/EntityResourceRestTestCoverageTest.php
@@ -3,6 +3,7 @@
namespace Drupal\Tests\rest\Functional\EntityResource;
use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\Core\Extension\ExtensionStatus;
use Drupal\Tests\BrowserTestBase;
/**
@@ -42,7 +43,7 @@ protected function setUp(): void {
empty($module->info['hidden']) &&
$module->status == FALSE &&
$module->info['package'] !== 'Testing' &&
- $module->info['package'] !== 'Core (Experimental)';
+ $module->info['status'] !== ExtensionStatus::EXPERIMENTAL;
});
$this->container->get('module_installer')->install(array_keys($stable_core_modules));
diff --git a/core/modules/search/tests/src/Functional/SearchPageCacheTagsTest.php b/core/modules/search/tests/src/Functional/SearchPageCacheTagsTest.php
index fd45196..f7e1580 100644
--- a/core/modules/search/tests/src/Functional/SearchPageCacheTagsTest.php
+++ b/core/modules/search/tests/src/Functional/SearchPageCacheTagsTest.php
@@ -136,8 +136,8 @@ public function testSearchText() {
*/
public function testSearchTagsBubbling() {
- // Install field UI and entity reference modules.
- $this->container->get('module_installer')->install(['field_ui', 'entity_reference']);
+ // Install field UI module.
+ $this->container->get('module_installer')->install(['field_ui']);
$this->resetAll();
// Creates a new content type that will have an entity reference.
diff --git a/core/modules/simpletest/simpletest.info.yml b/core/modules/simpletest/simpletest.info.yml
index 6cb3548..9cbdc55 100644
--- a/core/modules/simpletest/simpletest.info.yml
+++ b/core/modules/simpletest/simpletest.info.yml
@@ -1,6 +1,7 @@
name: Testing
type: module
-description: 'Deprecated. SimpleTest has been removed from core.'
+description: 'Obsolete. SimpleTest has been removed from core.'
+status: obsolete
package: Core
version: VERSION
hidden: true
diff --git a/core/modules/system/src/Form/ModulesListForm.php b/core/modules/system/src/Form/ModulesListForm.php
index 66e0fbc..5468923 100644
--- a/core/modules/system/src/Form/ModulesListForm.php
+++ b/core/modules/system/src/Form/ModulesListForm.php
@@ -6,6 +6,7 @@
use Drupal\Core\Config\UnmetDependenciesException;
use Drupal\Core\Access\AccessManagerInterface;
use Drupal\Core\Extension\Extension;
+use Drupal\Core\Extension\ExtensionStatus;
use Drupal\Core\Extension\InfoParserException;
use Drupal\Core\Extension\ModuleExtensionList;
use Drupal\Core\Extension\ModuleHandlerInterface;
@@ -404,7 +405,7 @@ protected function buildModuleList(FormStateInterface $form_state) {
elseif (($checkbox = $form_state->getValue(['modules', $name], FALSE)) && $checkbox['enable']) {
$modules['install'][$name] = $data[$name]->info['name'];
// Identify experimental modules.
- if ($data[$name]->info['package'] == 'Core (Experimental)') {
+ if ($data[$name]->info['status'] === ExtensionStatus::EXPERIMENTAL) {
$modules['experimental'][$name] = $data[$name]->info['name'];
}
}
@@ -418,7 +419,7 @@ protected function buildModuleList(FormStateInterface $form_state) {
$modules['install'][$dependency] = $data[$dependency]->info['name'];
// Identify experimental modules.
- if ($data[$dependency]->info['package'] == 'Core (Experimental)') {
+ if ($data[$dependency]->info['status'] === ExtensionStatus::EXPERIMENTAL) {
$modules['experimental'][$dependency] = $data[$dependency]->info['name'];
}
}
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index e4cb7ce..9e1fdeb 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -15,6 +15,7 @@
use Drupal\Core\DrupalKernel;
use Drupal\Core\Entity\Sql\SqlContentEntityStorage;
use Drupal\Core\Entity\Sql\SqlContentEntityStorageSchema;
+use Drupal\Core\Extension\ExtensionStatus;
use Drupal\Core\File\FileSystemInterface;
use Drupal\Core\Site\Settings;
use Drupal\Core\StreamWrapper\PrivateStream;
@@ -65,7 +66,7 @@ function system_requirements($phase) {
$enabled_modules = \Drupal::moduleHandler()->getModuleList();
foreach ($enabled_modules as $module => $data) {
$info = \Drupal::service('extension.list.module')->getExtensionInfo($module);
- if (isset($info['package']) && $info['package'] === 'Core (Experimental)') {
+ if (isset($info['status']) && $info['status'] === ExtensionStatus::EXPERIMENTAL) {
$experimental_modules[$module] = $info['name'];
}
}
diff --git a/core/modules/system/tests/modules/experimental_module_requirements_test/experimental_module_requirements_test.info.yml b/core/modules/system/tests/modules/experimental_module_requirements_test/experimental_module_requirements_test.info.yml
index 7d94791..2b625dc 100644
--- a/core/modules/system/tests/modules/experimental_module_requirements_test/experimental_module_requirements_test.info.yml
+++ b/core/modules/system/tests/modules/experimental_module_requirements_test/experimental_module_requirements_test.info.yml
@@ -2,4 +2,5 @@ name: 'Experimental Requirements Test'
type: module
description: 'Module in the experimental package to test hook_requirements() with an experimental module.'
package: Core (Experimental)
+status: experimental
version: VERSION
diff --git a/core/modules/system/tests/modules/experimental_module_test/experimental_module_test.info.yml b/core/modules/system/tests/modules/experimental_module_test/experimental_module_test.info.yml
index c00a800..80c97d7 100644
--- a/core/modules/system/tests/modules/experimental_module_test/experimental_module_test.info.yml
+++ b/core/modules/system/tests/modules/experimental_module_test/experimental_module_test.info.yml
@@ -2,4 +2,5 @@ name: 'Experimental Test'
type: module
description: 'Module in the experimental package to test experimental functionality.'
package: Core (Experimental)
+status: experimental
version: 8.y.x-unstable
diff --git a/core/modules/system/tests/modules/system_status_obsolete_test/system_status_obsolete_test.info.yml b/core/modules/system/tests/modules/system_status_obsolete_test/system_status_obsolete_test.info.yml
new file mode 100644
index 0000000..e053435
--- /dev/null
+++ b/core/modules/system/tests/modules/system_status_obsolete_test/system_status_obsolete_test.info.yml
@@ -0,0 +1,6 @@
+name: 'System obsolete status test'
+type: module
+description: 'Support module for testing an obsolete module extension.'
+package: Testing
+version: VERSION
+status: obsolete
diff --git a/core/modules/system/tests/src/Functional/Module/InstallUninstallTest.php b/core/modules/system/tests/src/Functional/Module/InstallUninstallTest.php
index 5c41c29..4762fb6 100644
--- a/core/modules/system/tests/src/Functional/Module/InstallUninstallTest.php
+++ b/core/modules/system/tests/src/Functional/Module/InstallUninstallTest.php
@@ -2,6 +2,7 @@
namespace Drupal\Tests\system\Functional\Module;
+use Drupal\Core\Extension\ExtensionStatus;
use Drupal\Core\Logger\RfcLogLevel;
use Drupal\workspaces\Entity\Workspace;
@@ -103,12 +104,12 @@ public function testInstallUninstall() {
// Install the module.
$edit = [];
- $package = $module->info['package'];
+ $status = $module->info['status'];
$edit['modules[' . $name . '][enable]'] = TRUE;
$this->drupalPostForm('admin/modules', $edit, 'Install');
// Handle experimental modules, which require a confirmation screen.
- if ($package == 'Core (Experimental)') {
+ if ($status === ExtensionStatus::EXPERIMENTAL) {
$this->assertText('Are you sure you wish to enable experimental modules?');
if (count($modules_to_install) > 1) {
// When there are experimental modules, needed dependencies do not
@@ -211,7 +212,7 @@ public function testInstallUninstall() {
foreach ($all_modules as $name => $module) {
$edit['modules[' . $name . '][enable]'] = TRUE;
// Track whether there is at least one experimental module.
- if ($module->info['package'] == 'Core (Experimental)') {
+ if ($module->info['status'] === ExtensionStatus::EXPERIMENTAL) {
$experimental = TRUE;
}
}
diff --git a/core/modules/system/tests/src/Kernel/Entity/EntityReferenceSelectionReferenceableTest.php b/core/modules/system/tests/src/Kernel/Entity/EntityReferenceSelectionReferenceableTest.php
index a4bea10..ba2d962 100644
--- a/core/modules/system/tests/src/Kernel/Entity/EntityReferenceSelectionReferenceableTest.php
+++ b/core/modules/system/tests/src/Kernel/Entity/EntityReferenceSelectionReferenceableTest.php
@@ -45,7 +45,6 @@ class EntityReferenceSelectionReferenceableTest extends KernelTestBase {
'system',
'user',
'field',
- 'entity_reference',
'node',
'entity_test',
];
diff --git a/core/modules/workspaces/workspaces.info.yml b/core/modules/workspaces/workspaces.info.yml
index 11ac79a..3ec4b25 100644
--- a/core/modules/workspaces/workspaces.info.yml
+++ b/core/modules/workspaces/workspaces.info.yml
@@ -3,6 +3,7 @@ type: module
description: 'Allows users to stage content or preview a full site by using multiple workspaces on a single site.'
version: VERSION
package: Core (Experimental)
+status: experimental
configure: entity.workspace.collection
dependencies:
- drupal:user
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/demo_umami_content.info.yml b/core/profiles/demo_umami/modules/demo_umami_content/demo_umami_content.info.yml
index 9c97b0a..75c6e07 100644
--- a/core/profiles/demo_umami/modules/demo_umami_content/demo_umami_content.info.yml
+++ b/core/profiles/demo_umami/modules/demo_umami_content/demo_umami_content.info.yml
@@ -3,6 +3,7 @@ description: Imports the content for the Umami demo.
type: module
version: VERSION
package: 'Core (Experimental)'
+status: experimental
hidden: true
dependencies:
- drupal:field
diff --git a/core/tests/Drupal/KernelTests/Config/DefaultConfigTest.php b/core/tests/Drupal/KernelTests/Config/DefaultConfigTest.php
index b8b4c61..6480c4f 100644
--- a/core/tests/Drupal/KernelTests/Config/DefaultConfigTest.php
+++ b/core/tests/Drupal/KernelTests/Config/DefaultConfigTest.php
@@ -6,6 +6,7 @@
use Drupal\Core\Config\FileStorage;
use Drupal\Core\Config\InstallStorage;
use Drupal\Core\Config\StorageInterface;
+use Drupal\Core\Extension\ExtensionStatus;
use Drupal\KernelTests\AssertConfigTrait;
use Drupal\KernelTests\FileSystemModuleDiscoveryDataProviderTrait;
use Drupal\KernelTests\KernelTestBase;
@@ -124,7 +125,7 @@ protected function doTestsOnConfigStorage(StorageInterface $default_config_stora
}
else {
$info = $this->container->get('extension.list.module')->getExtensionInfo($module);
- if (!isset($info['package']) || $info['package'] !== 'Core (Experimental)') {
+ if (!isset($info['status']) || $info['status'] !== ExtensionStatus::EXPERIMENTAL) {
$this->fail("$config_name provided by $module does not exist after installing all dependencies");
}
}
diff --git a/core/tests/Drupal/KernelTests/Core/Extension/ModuleInstallerTest.php b/core/tests/Drupal/KernelTests/Core/Extension/ModuleInstallerTest.php
index ed00b6b..27b84af 100644
--- a/core/tests/Drupal/KernelTests/Core/Extension/ModuleInstallerTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Extension/ModuleInstallerTest.php
@@ -4,6 +4,7 @@
use Drupal\Core\Database\Database;
use Drupal\Core\Extension\MissingDependencyException;
+use Drupal\Core\Extension\Exception\ObsoleteExtensionException;
use Drupal\KernelTests\KernelTestBase;
use Symfony\Component\Routing\Exception\RouteNotFoundException;
@@ -134,4 +135,15 @@ public function testDependencyInvalidCoreInstallNoDependencies() {
$this->assertTrue($this->container->get('module_installer')->install(['system_incompatible_core_version_dependencies_test'], FALSE));
}
+ /**
+ * Tests trying to install an obsolete module.
+ *
+ * @covers ::install
+ */
+ public function testObsoleteInstall() {
+ $this->expectException(ObsoleteExtensionException::class);
+ $this->expectExceptionMessage("Unable to install modules: module 'system_status_obsolete_test' is obsolete.");
+ $this->container->get('module_installer')->install(['system_status_obsolete_test']);
+ }
+
}
diff --git a/core/tests/Drupal/KernelTests/Core/Theme/Stable9LibraryOverrideTest.php b/core/tests/Drupal/KernelTests/Core/Theme/Stable9LibraryOverrideTest.php
index 073e0f4..3b4f5d9 100644
--- a/core/tests/Drupal/KernelTests/Core/Theme/Stable9LibraryOverrideTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Theme/Stable9LibraryOverrideTest.php
@@ -2,6 +2,7 @@
namespace Drupal\KernelTests\Core\Theme;
+use Drupal\Core\Extension\ExtensionStatus;
use Drupal\KernelTests\KernelTestBase;
/**
@@ -64,7 +65,7 @@ protected function setUp(): void {
$all_modules = array_filter($all_modules, function ($module) {
// Filter contrib, hidden, experimental, already enabled modules, and
// modules in the Testing package.
- if ($module->origin !== 'core' || !empty($module->info['hidden']) || $module->status == TRUE || $module->info['package'] == 'Testing' || $module->info['package'] == 'Core (Experimental)') {
+ if ($module->origin !== 'core' || !empty($module->info['hidden']) || $module->status == TRUE || $module->info['package'] == 'Testing' || $module->info['status'] === ExtensionStatus::EXPERIMENTAL) {
return FALSE;
}
return TRUE;
diff --git a/core/tests/Drupal/KernelTests/Core/Theme/Stable9TemplateOverrideTest.php b/core/tests/Drupal/KernelTests/Core/Theme/Stable9TemplateOverrideTest.php
index 22fc651..ca5477f 100644
--- a/core/tests/Drupal/KernelTests/Core/Theme/Stable9TemplateOverrideTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Theme/Stable9TemplateOverrideTest.php
@@ -2,6 +2,7 @@
namespace Drupal\KernelTests\Core\Theme;
+use Drupal\Core\Extension\ExtensionStatus;
use Drupal\Core\Theme\Registry;
use Drupal\KernelTests\KernelTestBase;
@@ -63,7 +64,7 @@ protected function installAllModules() {
$all_modules = array_filter($all_modules, function ($module) {
// Filter contrib, hidden, experimental, already enabled modules, and
// modules in the Testing package.
- if ($module->origin !== 'core' || !empty($module->info['hidden']) || $module->status == TRUE || $module->info['package'] == 'Testing' || $module->info['package'] == 'Core (Experimental)') {
+ if ($module->origin !== 'core' || !empty($module->info['hidden']) || $module->status == TRUE || $module->info['package'] == 'Testing' || $module->info['status'] === ExtensionStatus::EXPERIMENTAL) {
return FALSE;
}
return TRUE;
diff --git a/core/tests/Drupal/KernelTests/Core/Theme/StableLibraryOverrideTest.php b/core/tests/Drupal/KernelTests/Core/Theme/StableLibraryOverrideTest.php
index e291cbe..80502d9 100644
--- a/core/tests/Drupal/KernelTests/Core/Theme/StableLibraryOverrideTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Theme/StableLibraryOverrideTest.php
@@ -2,6 +2,7 @@
namespace Drupal\KernelTests\Core\Theme;
+use Drupal\Core\Extension\ExtensionStatus;
use Drupal\KernelTests\KernelTestBase;
/**
@@ -64,7 +65,7 @@ protected function setUp(): void {
$all_modules = array_filter($all_modules, function ($module) {
// Filter contrib, hidden, experimental, already enabled modules, and
// modules in the Testing package.
- if ($module->origin !== 'core' || !empty($module->info['hidden']) || $module->status == TRUE || $module->info['package'] == 'Testing' || $module->info['package'] == 'Core (Experimental)') {
+ if ($module->origin !== 'core' || !empty($module->info['hidden']) || $module->status == TRUE || $module->info['package'] == 'Testing' || $module->info['status'] === ExtensionStatus::EXPERIMENTAL) {
return FALSE;
}
return TRUE;
diff --git a/core/tests/Drupal/KernelTests/Core/Theme/StableTemplateOverrideTest.php b/core/tests/Drupal/KernelTests/Core/Theme/StableTemplateOverrideTest.php
index 6534baa..f404d3b 100644
--- a/core/tests/Drupal/KernelTests/Core/Theme/StableTemplateOverrideTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Theme/StableTemplateOverrideTest.php
@@ -2,6 +2,7 @@
namespace Drupal\KernelTests\Core\Theme;
+use Drupal\Core\Extension\ExtensionStatus;
use Drupal\Core\Theme\Registry;
use Drupal\KernelTests\KernelTestBase;
@@ -61,7 +62,7 @@ protected function installAllModules() {
$all_modules = array_filter($all_modules, function ($module) {
// Filter contrib, hidden, experimental, already enabled modules, and
// modules in the Testing package.
- if ($module->origin !== 'core' || !empty($module->info['hidden']) || $module->status == TRUE || $module->info['package'] == 'Testing' || $module->info['package'] == 'Core (Experimental)') {
+ if ($module->origin !== 'core' || !empty($module->info['hidden']) || $module->status == TRUE || $module->info['package'] == 'Testing' || $module->info['status'] === ExtensionStatus::EXPERIMENTAL) {
return FALSE;
}
return TRUE;
diff --git a/core/tests/Drupal/Tests/Core/Extension/InfoParserUnitTest.php b/core/tests/Drupal/Tests/Core/Extension/InfoParserUnitTest.php
index 96652b7..f60a892 100644
--- a/core/tests/Drupal/Tests/Core/Extension/InfoParserUnitTest.php
+++ b/core/tests/Drupal/Tests/Core/Extension/InfoParserUnitTest.php
@@ -691,4 +691,110 @@ public function testCore8xNoCoreVersionRequirement() {
}
}
+ /**
+ * Tests an info file with valid status values.
+ *
+ * @covers ::parse
+ *
+ * @dataProvider providerValidStatus
+ */
+ public function testValidStatus($status, $expected) {
+ $info = << [
+ $filename => $info,
+ ],
+ ]);
+ $info_values = $this->infoParser->parse(vfsStream::url("modules/fixtures/$filename"));
+ $this->assertSame($expected, $info_values['status']);
+ }
+
+ /**
+ * Data provider for testValidStatus().
+ */
+ public function providerValidStatus() {
+ return [
+ 'empty' => [
+ '',
+ 'normal',
+ ],
+ 'experimental' => [
+ 'experimental',
+ 'experimental',
+ ],
+ 'normal' => [
+ 'normal',
+ 'normal',
+ ],
+ 'deprecated' => [
+ 'deprecated',
+ 'deprecated',
+ ],
+ 'obsolete' => [
+ 'obsolete',
+ 'obsolete',
+ ],
+ ];
+ }
+
+ /**
+ * Tests an info file with invalid status values.
+ *
+ * @covers ::parse
+ *
+ * @dataProvider providerInvalidStatus
+ */
+ public function testInvalidStatus($status, $exception_message) {
+ $info = << [
+ $filename => $info,
+ ],
+ ]);
+ $this->expectException('\Drupal\Core\Extension\InfoParserException');
+ $this->expectExceptionMessage($exception_message);
+ $info_values = $this->infoParser->parse(vfsStream::url("modules/fixtures/$filename"));
+ $this->assertEmpty($info_values);
+ }
+
+ /**
+ * Data provider for testInvalidStatus().
+ */
+ public function providerInvalidStatus() {
+ return [
+ 'bogus' => [
+ 'bogus',
+ "'status: bogus' is not valid",
+ ],
+ 'two words' => [
+ 'deprecated obsolete',
+ "'status: deprecated obsolete' is not valid",
+ ],
+ 'wrong case' => [
+ 'Experimental',
+ "'status: Experimental' is not valid",
+ ],
+ ];
+ }
+
}