summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--includes/module.inc4
-rw-r--r--modules/simpletest/tests/module.test11
-rw-r--r--modules/simpletest/tests/module_test.file.inc14
-rw-r--r--modules/simpletest/tests/module_test.info1
-rw-r--r--modules/simpletest/tests/module_test.module10
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;
+}