diff options
-rw-r--r-- | includes/module.inc | 4 | ||||
-rw-r--r-- | modules/simpletest/tests/module.test | 11 | ||||
-rw-r--r-- | modules/simpletest/tests/module_test.file.inc | 14 | ||||
-rw-r--r-- | modules/simpletest/tests/module_test.info | 1 | ||||
-rw-r--r-- | modules/simpletest/tests/module_test.module | 10 |
5 files changed, 38 insertions, 2 deletions
diff --git a/includes/module.inc b/includes/module.inc index ae132fa5b..dcaf2f567 100644 --- a/includes/module.inc +++ b/includes/module.inc @@ -589,8 +589,8 @@ function module_implements($hook, $sort = FALSE, $reset = FALSE) { $implementations[$hook] = array(); $list = module_list(FALSE, FALSE, $sort); foreach ($list as $module) { - $include_file = FALSE; - if (module_hook($module, $hook) || (isset($hook_info[$hook]['group']) && $include_file = module_load_include('inc', $module, $module . '.' . $hook_info[$hook]['group']) && module_hook($module, $hook))) { + $include_file = isset($hook_info[$hook]['group']) && module_load_include('inc', $module, $module . '.' . $hook_info[$hook]['group']); + if (module_hook($module, $hook)) { $implementations[$hook][$module] = $include_file ? $hook_info[$hook]['group'] : FALSE; // We added something to the cache, so write it when we are done. $implementations['#write_cache'] = TRUE; diff --git a/modules/simpletest/tests/module.test b/modules/simpletest/tests/module.test index 31c0bb028..9246c1484 100644 --- a/modules/simpletest/tests/module.test +++ b/modules/simpletest/tests/module.test @@ -98,6 +98,17 @@ class ModuleUnitTest extends DrupalWebTestCase { cache_clear_all('module_implements', 'cache_bootstrap'); $this->drupalGet(''); $this->assertTrue(cache_get('module_implements', 'cache_bootstrap'), t('The module implements cache is populated after requesting a page.')); + + // Make sure group include files are detected properly even when the file is + // already loaded when the cache is rebuilt. + // For that activate the module_test which provides the file to load. + module_enable(array('module_test')); + + module_load_include('inc', 'module_test', 'module_test.file'); + $modules = module_implements('test_hook'); + $static = drupal_static('module_implements'); + $this->assertTrue(in_array('module_test', $modules), 'Hook found.'); + $this->assertEqual($static['test_hook']['module_test'], 'file', 'Include file detected.'); } /** diff --git a/modules/simpletest/tests/module_test.file.inc b/modules/simpletest/tests/module_test.file.inc new file mode 100644 index 000000000..a27749cb8 --- /dev/null +++ b/modules/simpletest/tests/module_test.file.inc @@ -0,0 +1,14 @@ +<?php +// $Id$ + +/** + * @file + * A file to test module_implements() loading includes. + */ + +/** + * Implements hook_test_hook(). + */ +function module_test_test_hook() { + +}
\ No newline at end of file diff --git a/modules/simpletest/tests/module_test.info b/modules/simpletest/tests/module_test.info index 09a2afa67..45817934a 100644 --- a/modules/simpletest/tests/module_test.info +++ b/modules/simpletest/tests/module_test.info @@ -5,4 +5,5 @@ package = Testing version = VERSION core = 7.x files[] = module_test.module +files[] = module_test.file.inc hidden = TRUE diff --git a/modules/simpletest/tests/module_test.module b/modules/simpletest/tests/module_test.module index 939f6e63e..82df306e7 100644 --- a/modules/simpletest/tests/module_test.module +++ b/modules/simpletest/tests/module_test.module @@ -37,3 +37,13 @@ function module_test_system_info_alter(&$info, $file, $type) { } } } + +/** + * Implements hook_hook_info(). + */ +function module_test_hook_info() { + $hooks['test_hook'] = array( + 'group' => 'file', + ); + return $hooks; +} |