diff -u b/core/includes/module.inc b/core/includes/module.inc --- b/core/includes/module.inc +++ b/core/includes/module.inc @@ -79,13 +79,13 @@ // Use the advanced drupal_static() pattern, since this is called very often. static $drupal_static_fast; if (!isset($drupal_static_fast)) { - $drupal_static_fast['list'] = &drupal_static(__FUNCTION__ . ':list', array()); + $drupal_static_fast['list'] = &drupal_static(__FUNCTION__ . ':list'); $drupal_static_fast['sorted_list'] = &drupal_static(__FUNCTION__ . ':sorted_list'); } $list = &$drupal_static_fast['list']; $sorted_list = &$drupal_static_fast['sorted_list']; - if (empty($list) || $refresh || isset($fixed_list)) { + if (!isset($list) || $refresh || isset($fixed_list)) { $list = array(); $sorted_list = NULL; // The fixed list may be a completely empty array, thus check for isset(). diff -u b/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php b/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php --- b/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php +++ b/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php @@ -701,6 +701,9 @@ Database::removeConnection('default'); Database::renameConnection('simpletest_original_default', 'default'); + // Reset all static variables. + drupal_static_reset(); + // Restore original in-memory configuration. $conf = $this->originalConf; diff -u b/core/modules/simpletest/lib/Drupal/simpletest/UnitTestBase.php b/core/modules/simpletest/lib/Drupal/simpletest/UnitTestBase.php --- b/core/modules/simpletest/lib/Drupal/simpletest/UnitTestBase.php +++ b/core/modules/simpletest/lib/Drupal/simpletest/UnitTestBase.php @@ -43,17 +43,24 @@ // Prepare the environment for running tests. $this->prepareEnvironment(); - $this->originalModuleList = module_list(); - - // Empty out module list. - module_list(TRUE, FALSE, FALSE, array()); - module_load_all(); - module_implements_reset(); + $this->originalThemeRegistry = theme_get_registry(FALSE); // Reset all statics and variables to perform tests in a clean environment. $conf = array(); drupal_static_reset(); + // Empty out module list. + module_list(TRUE, FALSE, FALSE, array()); + // Prevent module_load_all() from attempting to refresh it. + $has_run = &drupal_static('module_load_all'); + $has_run = TRUE; + + // Re-implant theme registry. + // Required to l() and other functions to work correctly and not trigger + // database lookups. + $theme_get_registry = &drupal_static('theme_get_registry'); + $theme_get_registry[FALSE] = $this->originalThemeRegistry; + $conf['file_public_path'] = $this->public_files_directory; // Change the database prefix. @@ -69,11 +76,2 @@ } - - protected function tearDown() { - parent::tearDown(); - - // Restore module list. - module_list(TRUE, FALSE, FALSE, $this->originalModuleList); - module_load_all(); - module_implements_reset(); - } }