summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2011-02-04 19:34:38 +0000
committerDries Buytaert <dries@buytaert.net>2011-02-04 19:34:38 +0000
commit0a7220483d2818d0cdb1da56cc6445e94bb4f37c (patch)
treecf72532a8accc749e574a32b78d4fd485a0d2c18 /modules
parent10894ac845c83382b70a35b195b548433dec1163 (diff)
downloadbrdo-0a7220483d2818d0cdb1da56cc6445e94bb4f37c.tar.gz
brdo-0a7220483d2818d0cdb1da56cc6445e94bb4f37c.tar.bz2
- Patch #1049116 by solotandem, David_Rothstein: module_enable() doesn't account for version strings in dependencies[].
Diffstat (limited to 'modules')
-rw-r--r--modules/simpletest/tests/module.test21
-rw-r--r--modules/simpletest/tests/module_test.module14
2 files changed, 35 insertions, 0 deletions
diff --git a/modules/simpletest/tests/module.test b/modules/simpletest/tests/module.test
index 711a739ab..8e76e5c54 100644
--- a/modules/simpletest/tests/module.test
+++ b/modules/simpletest/tests/module.test
@@ -212,6 +212,27 @@ class ModuleUnitTest extends DrupalWebTestCase {
$uninstalled_modules = variable_get('test_module_uninstall_order', array());
$this->assertTrue(in_array('comment', $uninstalled_modules), t('Comment module is in the list of uninstalled modules.'));
$this->assertFalse(in_array($profile, $uninstalled_modules), t('The installation profile is not in the list of uninstalled modules.'));
+
+ // Enable forum module again, which should enable both the poll module and
+ // php module. But, this time do it with poll module declaring a dependency
+ // on a specific version of php module in its info file. Make sure that
+ // module_enable() still works.
+ variable_set('dependency_test', 'version dependency');
+ drupal_static_reset('system_rebuild_module_data');
+ $result = module_enable(array('forum'));
+ $this->assertTrue($result, t('module_enable() returns the correct value.'));
+ // Verify that the fake dependency chain was installed.
+ $this->assertTrue(module_exists('poll') && module_exists('php'), t('Dependency chain was installed by module_enable().'));
+ // Verify that the original module was installed.
+ $this->assertTrue(module_exists('forum'), t('Module installation with version dependencies succeeded.'));
+ // Finally, verify that the modules were enabled in the correct order.
+ $enable_order = variable_get('test_module_enable_order', array());
+ $php_position = array_search('php', $enable_order);
+ $poll_position = array_search('poll', $enable_order);
+ $forum_position = array_search('forum', $enable_order);
+ $php_before_poll = $php_position !== FALSE && $poll_position !== FALSE && $php_position < $poll_position;
+ $poll_before_forum = $poll_position !== FALSE && $forum_position !== FALSE && $poll_position < $forum_position;
+ $this->assertTrue($php_before_poll && $poll_before_forum, t('Modules were enabled in the correct order by module_enable().'));
}
}
diff --git a/modules/simpletest/tests/module_test.module b/modules/simpletest/tests/module_test.module
index d3f46e2cb..97c33305f 100644
--- a/modules/simpletest/tests/module_test.module
+++ b/modules/simpletest/tests/module_test.module
@@ -36,6 +36,20 @@ function module_test_system_info_alter(&$info, $file, $type) {
$info['dependencies'][] = 'php';
}
}
+ elseif (variable_get('dependency_test', FALSE) == 'version dependency') {
+ if ($file->name == 'forum') {
+ // Make the forum module depend on poll.
+ $info['dependencies'][] = 'poll';
+ }
+ elseif ($file->name == 'poll') {
+ // Make poll depend on a specific version of php module.
+ $info['dependencies'][] = 'php (1.x)';
+ }
+ elseif ($file->name == 'php') {
+ // Set php module to a version compatible with the above.
+ $info['version'] = '7.x-1.0';
+ }
+ }
if ($file->name == 'seven' && $type == 'theme') {
$info['regions']['test_region'] = t('Test region');
}