diff -u b/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc --- b/core/modules/system/system.admin.inc +++ b/core/modules/system/system.admin.inc @@ -211,7 +211,6 @@ foreach (Element::children($form['modules']) as $key) { $module = $form['modules'][$key]; $module['module_name'] = $module['#module_name']; - $module['machine_name'] = $key; $module['checkbox'] = $form['uninstall'][$key]; $module['checkbox_id'] = $form['uninstall'][$key]['#id']; @@ -226,6 +225,7 @@ foreach (Element::children($form['modules']) as $key) { $module = $form['modules'][$key]; $module['module_name'] = $module['#module_name']; + $module['machine_name'] = $key; $module['checkbox'] = $form['uninstall'][$key]; $module['checkbox_id'] = $form['uninstall'][$key]['#id']; only in patch2: unchanged: --- a/core/modules/system/tests/src/Functional/Module/UninstallTest.php +++ b/core/modules/system/tests/src/Functional/Module/UninstallTest.php @@ -62,6 +62,9 @@ public function testUninstallPage() { $this->drupalGet('admin/modules/uninstall'); $this->assertSession()->titleEquals('Uninstall | Drupal'); + // Make sure the module machine name is rendered in a filter text source. + $this->assertSession()->elementTextContains('css', 'tr[data-drupal-selector="edit-module-test"] .module-machine-name.table-filter-text-source', 'module_test'); + foreach (\Drupal::service('extension.list.module')->getAllInstalledInfo() as $module => $info) { $field_name = "uninstall[$module]"; if (!empty($info['required'])) { only in patch2: unchanged: --- /dev/null +++ b/core/modules/system/tests/src/FunctionalJavascript/System/UninstallFilterTest.php @@ -0,0 +1,65 @@ +drupalCreateUser(['administer modules']); + $this->drupalLogin($account); + + $session = $this->getSession(); + + $this->drupalGet('admin/modules/uninstall'); + $filter = $session->getPage()->find('css', '#edit-text'); + + // Test filter using module machine name. + $filter->setValue('module_test'); + $session->wait(1000); + $result = $this->xpath('//table/tbody/tr[not(contains(@style, :style)) and @data-drupal-selector=:data-drupal-selector]', [ + ':style' => 'display: none', + ':data-drupal-selector' => 'edit-module-test', + ]); + $this->assertCount(1, $result, 'Module test exists'); + + // Test filter using module name. + $filter->setValue('Module test'); + $session->wait(1000); + $result = $this->xpath('//table/tbody/tr[not(contains(@style, :style)) and @data-drupal-selector=:data-drupal-selector]', [ + ':style' => 'display: none', + ':data-drupal-selector' => 'edit-module-test', + ]); + $this->assertCount(1, $result, 'Module test exists'); + + // Test non-existing module. + $filter->setValue('Cron Queue test'); + $session->wait(1000); + $result = $this->xpath('//table/tbody/tr[not(contains(@style, :style))]', [ + ':style' => 'display: none', + ]); + $this->assertCount(0, $result, 'Cron Queue test does not exist'); + } + +}