summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorAngie Byron <webchick@24967.no-reply.drupal.org>2010-01-02 18:56:20 +0000
committerAngie Byron <webchick@24967.no-reply.drupal.org>2010-01-02 18:56:20 +0000
commit45bc7c2290af947cda8747f08598413a764e24c8 (patch)
tree0e06259de2e1991fd494103bdcf7a80ba68fdc03 /modules
parent28725705814a5ac25dbcc1665503325b44352f7d (diff)
downloadbrdo-45bc7c2290af947cda8747f08598413a764e24c8.tar.gz
brdo-45bc7c2290af947cda8747f08598413a764e24c8.tar.bz2
#399642 by sndev and carlos8f: Make drupal_install_modules() resolve dependencies and trigger an error when they do not exist. (with tests)
Diffstat (limited to 'modules')
-rw-r--r--modules/simpletest/drupal_web_test_case.php9
-rw-r--r--modules/simpletest/tests/module.test24
-rw-r--r--modules/simpletest/tests/module_test.module28
3 files changed, 55 insertions, 6 deletions
diff --git a/modules/simpletest/drupal_web_test_case.php b/modules/simpletest/drupal_web_test_case.php
index 186195d28..6599fa1e1 100644
--- a/modules/simpletest/drupal_web_test_case.php
+++ b/modules/simpletest/drupal_web_test_case.php
@@ -1140,17 +1140,14 @@ class DrupalWebTestCase extends DrupalTestCase {
variable_set('install_profile', 'default');
$profile_details = install_profile_info('default', 'en');
- // Add the specified modules to the list of modules in the default profile.
// Install the modules specified by the default profile.
drupal_install_modules($profile_details['dependencies'], TRUE);
drupal_static_reset('_node_types_build');
- // Install additional modules one at a time in order to make sure that the
- // list of modules is updated between each module's installation.
- $modules = func_get_args();
- foreach ($modules as $module) {
- drupal_install_modules(array($module), TRUE);
+ if ($modules = func_get_args()) {
+ // Install modules needed for this test.
+ drupal_install_modules($modules, TRUE);
}
// Because the schema is static cached, we need to flush
diff --git a/modules/simpletest/tests/module.test b/modules/simpletest/tests/module.test
index 0417a812d..049f6f75f 100644
--- a/modules/simpletest/tests/module.test
+++ b/modules/simpletest/tests/module.test
@@ -99,6 +99,30 @@ class ModuleUnitTest extends DrupalWebTestCase {
$this->drupalGet('');
$this->assertTrue(cache_get('module_implements', 'cache_bootstrap'), t('The module implements cache is populated after requesting a page.'));
}
+
+ /**
+ * Test drupal_install_modules() and dependency resolution.
+ */
+ function testDrupalInstallModules() {
+ drupal_install_modules(array('module_test'));
+ $this->assertTrue(module_exists('module_test'), t('Test module is enabled.'));
+
+ // First, create a fake missing dependency. Forum depends on poll, which
+ // depends on a made-up module, foo. Nothing should be installed.
+ variable_set('dependency_test', 'missing dependency');
+ $result = drupal_install_modules(array('forum'));
+ $this->assertFalse($result, t('drupal_install_modules() returns FALSE if dependencies are missing.'));
+ $this->assertFalse(module_exists('forum'), t('drupal_install_modules() aborts if dependencies are missing.'));
+
+ // Now, fix the missing dependency. drupal_install_modules() should work.
+ variable_set('dependency_test', 'dependency');
+ $result = drupal_install_modules(array('forum'));
+ $this->assertTrue($result, t('drupal_install_modules() 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 drupal_install_modules().'));
+ // Finally, verify that the original module was installed.
+ $this->assertTrue(module_exists('forum'), t('Module installation with unlisted dependencies succeeded.'));
+ }
}
/**
diff --git a/modules/simpletest/tests/module_test.module b/modules/simpletest/tests/module_test.module
index d10a2935f..498865ff4 100644
--- a/modules/simpletest/tests/module_test.module
+++ b/modules/simpletest/tests/module_test.module
@@ -9,3 +9,31 @@ function module_test_permission() {
'module_test perm' => t('example perm for module_test module'),
);
}
+
+/**
+ * Implements hook_system_info_alter().
+ *
+ * Manipulate module dependencies to test dependency chains.
+ */
+function module_test_system_info_alter(&$info, $file, $type) {
+ if (variable_get('dependency_test', FALSE) == 'missing dependency') {
+ if ($file->name == 'forum') {
+ // Make forum module depend on poll.
+ $info['dependencies'][] = 'poll';
+ }
+ elseif ($file->name == 'poll') {
+ // Make poll depend on a made-up module.
+ $info['dependencies'][] = 'foo';
+ }
+ }
+ elseif (variable_get('dependency_test', FALSE) == 'dependency') {
+ if ($file->name == 'forum') {
+ // Make the forum module depend on poll.
+ $info['dependencies'][] = 'poll';
+ }
+ elseif ($file->name == 'poll') {
+ // Make poll depend on php module.
+ $info['dependencies'][] = 'php';
+ }
+ }
+} \ No newline at end of file