diff options
Diffstat (limited to 'modules/simpletest/tests/module.test')
-rw-r--r-- | modules/simpletest/tests/module.test | 61 |
1 files changed, 59 insertions, 2 deletions
diff --git a/modules/simpletest/tests/module.test b/modules/simpletest/tests/module.test index 9246c1484..e8da1a2de 100644 --- a/modules/simpletest/tests/module.test +++ b/modules/simpletest/tests/module.test @@ -115,8 +115,14 @@ class ModuleUnitTest extends DrupalWebTestCase { * Test dependency resolution. */ function testDependencyResolution() { + // Enable the test module, and make sure that other modules we are testing + // are not already enabled. (If they were, the tests below would not work + // correctly.) module_enable(array('module_test'), FALSE); $this->assertTrue(module_exists('module_test'), t('Test module is enabled.')); + $this->assertFalse(module_exists('forum'), t('Forum module is disabled.')); + $this->assertFalse(module_exists('poll'), t('Poll module is disabled.')); + $this->assertFalse(module_exists('php'), t('PHP module is disabled.')); // First, create a fake missing dependency. Forum depends on poll, which // depends on a made-up module, foo. Nothing should be installed. @@ -125,14 +131,65 @@ class ModuleUnitTest extends DrupalWebTestCase { $this->assertFalse($result, t('module_enable() returns FALSE if dependencies are missing.')); $this->assertFalse(module_exists('forum'), t('module_enable() aborts if dependencies are missing.')); - // Now, fix the missing dependency. module_enable() should work. + // Now, fix the missing dependency. Forum module depends on poll, but poll + // depends on the PHP module. module_enable() should work. variable_set('dependency_test', 'dependency'); $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().')); - // Finally, verify that the original module was installed. + // Verify that the original module was installed. $this->assertTrue(module_exists('forum'), t('Module installation with unlisted dependencies succeeded.')); + // Finally, verify that the modules were enabled in the correct order. + $this->assertEqual(variable_get('test_module_enable_order', array()), array('php', 'poll', 'forum'), t('Modules were enabled in the correct order by module_enable().')); + + // Now, disable the PHP module. Both forum and poll should be disabled as + // well, in the correct order. + module_disable(array('php')); + $this->assertTrue(!module_exists('forum') && !module_exists('poll'), t('Depedency chain was disabled by module_disable().')); + $this->assertFalse(module_exists('php'), t('Disabling a module with unlisted dependents succeeded.')); + $this->assertEqual(variable_get('test_module_disable_order', array()), array('forum', 'poll', 'php'), t('Modules were disabled in the correct order by module_disable().')); + + // Disable a module that is listed as a dependency by the install profile. + // Make sure that the profile itself is not on the list of dependent + // modules to be disabled. + $profile = drupal_get_profile(); + $info = install_profile_info($profile); + $this->assertTrue(in_array('comment', $info['dependencies']), t('Comment module is listed as a dependency of the install profile.')); + $this->assertTrue(module_exists('comment'), t('Comment module is enabled.')); + module_disable(array('comment')); + $this->assertFalse(module_exists('comment'), t('Comment module was disabled.')); + $disabled_modules = variable_get('test_module_disable_order', array()); + $this->assertTrue(in_array('comment', $disabled_modules), t('Comment module is in the list of disabled modules.')); + $this->assertFalse(in_array($profile, $disabled_modules), t('The installation profile is not in the list of disabled modules.')); + + // Try to uninstall the PHP module by itself. This should be rejected, + // since the modules which it depends on need to be uninstalled first, and + // that is too destructive to perform automatically. + $result = drupal_uninstall_modules(array('php')); + $this->assertFalse($result, t('Calling drupal_uninstall_modules() on a module whose dependents are not uninstalled fails.')); + foreach (array('forum', 'poll', 'php') as $module) { + $this->assertNotEqual(drupal_get_installed_schema_version($module), SCHEMA_UNINSTALLED, t('The @module module was not uninstalled.', array('@module' => $module))); + } + + // Now uninstall all three modules explicitly, but in the incorrect order, + // and make sure that drupal_uninstal_modules() uninstalled them in the + // correct sequence. + $result = drupal_uninstall_modules(array('poll', 'php', 'forum')); + $this->assertTrue($result, t('drupal_uninstall_modules() returns the correct value.')); + foreach (array('forum', 'poll', 'php') as $module) { + $this->assertEqual(drupal_get_installed_schema_version($module), SCHEMA_UNINSTALLED, t('The @module module was uninstalled.', array('@module' => $module))); + } + $this->assertEqual(variable_get('test_module_uninstall_order', array()), array('forum', 'poll', 'php'), t('Modules were uninstalled in the correct order by drupal_uninstall_modules().')); + + // Uninstall the profile module from above, and make sure that the profile + // itself is not on the list of dependent modules to be uninstalled. + $result = drupal_uninstall_modules(array('comment')); + $this->assertTrue($result, t('drupal_uninstall_modules() returns the correct value.')); + $this->assertEqual(drupal_get_installed_schema_version('comment'), SCHEMA_UNINSTALLED, t('Comment module was uninstalled.')); + $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.')); } } |