Index: modules/simpletest/tests/module.test =================================================================== RCS file: /cvs/drupal/drupal/modules/simpletest/tests/module.test,v retrieving revision 1.1 diff -u -p -r1.1 module.test --- modules/simpletest/tests/module.test 3 Jan 2009 08:45:28 -0000 1.1 +++ modules/simpletest/tests/module.test 5 Jan 2009 19:40:30 -0000 @@ -18,6 +18,10 @@ class ModuleUnitTest extends DrupalWebTe ); } + function setUp() { + parent::setUp('module_test', 'user'); + } + /** * The basic functionality of module_list(). */ @@ -60,6 +64,19 @@ class ModuleUnitTest extends DrupalWebTe } /** + * Tests the hook_modules_uninstalled of the user module. + */ + function testUserPermsUninstalled() { + // Uninstalles the module_test module, so hook_modules_uninstalled() is executed. + drupal_uninstall_modules(array('module_test')); + + // Are the perms from module_test removed from {role_permission}. + $count = db_query("SELECT COUNT(rid) FROM {role_permission} WHERE permission = :perm", + array(':perm' => 'module_test perm'))->fetchField(); + $this->assertEqual(0, $count, t('Permissions were all removed.')); + } + + /** * Assert that module_list() return the expected values. * * @param $expected_values @@ -70,4 +87,5 @@ class ModuleUnitTest extends DrupalWebTe ksort($expected_values); $this->assertIdentical($expected_values, module_list(FALSE, TRUE), t('@condition: module_list() returns correctly sorted results', array('@condition' => $condition))); } + } Index: modules/user/user.module =================================================================== RCS file: /cvs/drupal/drupal/modules/user/user.module,v retrieving revision 1.952 diff -u -p -r1.952 user.module --- modules/user/user.module 4 Jan 2009 16:10:48 -0000 1.952 +++ modules/user/user.module 5 Jan 2009 19:40:34 -0000 @@ -2441,3 +2441,17 @@ function _user_forms(&$edit, $account, $ return empty($groups) ? FALSE : $groups; } +/** + * Implementation of hook_modules_uninstalled(). + */ +function user_modules_uninstalled($modules) { + $permissions = array(); + foreach ($modules as $module) { + $permissions = array_merge($permissions, array_keys(module_invoke($module, 'perm'))); + } + if (!empty($permissions)) { + db_delete('role_permission') + ->condition('permission', array_keys($permissions), 'IN') + ->execute(); + } +}