function ModuleHandlerTest::testResetImplementationsClearsHooks
Tests that resetImplementations() clears the hook memory cache.
@covers ::resetImplementations
File
-
core/
tests/ Drupal/ KernelTests/ Core/ Extension/ ModuleHandlerTest.php, line 45
Class
- ModuleHandlerTest
- @coversDefaultClass \Drupal\Core\Extension\ModuleHandler
Namespace
Drupal\KernelTests\Core\ExtensionCode
public function testResetImplementationsClearsHooks() : void {
$oldModuleHandler = \Drupal::moduleHandler();
$this->assertHasResetHookImplementations(FALSE, $oldModuleHandler);
// Installing a module does not trigger ->resetImplementations().
/** @var \Drupal\Core\Extension\ModuleInstallerInterface $moduleInstaller */
$moduleInstaller = \Drupal::service('module_installer');
$moduleInstaller->install([
'module_test',
]);
$this->assertHasResetHookImplementations(FALSE, $oldModuleHandler);
// Only the new ModuleHandler instance has the updated implementations.
$moduleHandler = \Drupal::moduleHandler();
$this->assertHasResetHookImplementations(TRUE, $moduleHandler);
$backupModuleList = $moduleHandler->getModuleList();
$moduleListWithout = array_diff_key($backupModuleList, [
'module_test' => TRUE,
]);
$this->assertArrayHasKey('module_test', $backupModuleList);
// Silently setting the property does not clear the hooks cache.
$moduleListProperty = new \ReflectionProperty($moduleHandler, 'moduleList');
$this->assertSame($backupModuleList, $moduleListProperty->getValue($moduleHandler));
$moduleListProperty->setValue($moduleHandler, $moduleListWithout);
$this->assertHasResetHookImplementations(TRUE, $moduleHandler);
// Directly calling ->resetImplementations() clears the hook caches.
$moduleHandler->resetImplementations();
$this->assertHasResetHookImplementations(FALSE, $moduleHandler);
$moduleListProperty->setValue($moduleHandler, $backupModuleList);
$this->assertHasResetHookImplementations(FALSE, $moduleHandler);
$moduleHandler->resetImplementations();
$this->assertHasResetHookImplementations(TRUE, $moduleHandler);
// Calling ->setModuleList() triggers ->resetImplementations().
$moduleHandler->setModuleList([
'system',
]);
$this->assertHasResetHookImplementations(FALSE, $moduleHandler);
$moduleHandler->setModuleList($backupModuleList);
$this->assertHasResetHookImplementations(TRUE, $moduleHandler);
// Uninstalling a module triggers ->resetImplementations().
/** @var \Drupal\Core\Extension\ModuleInstallerInterface $moduleInstaller */
$moduleInstaller = \Drupal::service('module_installer');
$moduleInstaller->uninstall([
'module_test',
]);
$this->assertSame($moduleListWithout, $moduleHandler->getModuleList());
$this->assertHasResetHookImplementations(FALSE, $moduleHandler);
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.