$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 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.'));
$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
$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.
'description'=>'Tests the installation of modules.',
'group'=>'Module',
);
}
functionsetUp(){
parent::setUp('module_test');
}
/**
* Test that calls to drupal_write_record() work during module installation.
*
* This is a useful function to test because modules often use it to insert
* initial data in their database tables when they are being installed or
* enabled. Furthermore, drupal_write_record() relies on the module schema
* information being available, so this also checks that the data from one of
* the module's hook implementations, in particular hook_schema(), is
* properly available during this time. Therefore, this test helps ensure
* that modules are fully functional while Drupal is installing and enabling
* them.
*/
functiontestDrupalWriteRecord(){
// Check for data that was inserted using drupal_write_record() while the
// 'module_test' module was being installed and enabled.
$data=db_query("SELECT data FROM {module_test}")->fetchCol();
$this->assertTrue(in_array('Data inserted in hook_install()',$data),t('Data inserted using drupal_write_record() in hook_install() is correctly saved.'));
$this->assertTrue(in_array('Data inserted in hook_enable()',$data),t('Data inserted using drupal_write_record() in hook_enable() is correctly saved.'));
}
}
/**
* Unit tests for module uninstallation and related hooks.