module.test 3.69 KB
Newer Older
1
<?php
2
// $Id$
3
4
5
6
7
8
9
10
11
12

/**
 * @file
 * Tests for the module API.
 */

/**
 * Unit tests for the module API.
 */
class ModuleUnitTest extends DrupalWebTestCase {
13
  public static function getInfo() {
14
    return array(
15
16
17
      'name' => 'Module API',
      'description' => 'Test low-level module functions.',
      'group' => 'Module',
18
19
20
21
22
23
24
    );
  }

  /**
   * The basic functionality of module_list().
   */
  function testModuleList() {
25
    // Build a list of modules, sorted alphabetically.
26
27
    $profile_info = install_profile_info('default', 'en');
    $module_list = $profile_info['dependencies'];
28
29
30
31
32
    sort($module_list);
    // Compare this list to the one returned by module_list(). We expect them
    // to match, since all default profile modules have a weight equal to 0
    // (except for block.module, which has a lower weight but comes first in
    // the alphabet anyway).
33
    $this->assertModuleList($module_list, t('Default profile'));
34
35

    // Try to install a new module.
36
37
38
    drupal_install_modules(array('contact'));
    $module_list[] = 'contact';
    sort($module_list);
39
    $this->assertModuleList($module_list, t('After adding a module'));
40
41

    // Try to mess with the module weights.
42
43
    db_update('system')
      ->fields(array('weight' => 20))
44
      ->condition('name', 'contact')
45
46
      ->condition('type', 'module')
      ->execute();
47
48
    // Reset the module list.
    module_list(TRUE);
49
50
51
    // Move contact to the end of the array.
    unset($module_list[array_search('contact', $module_list)]);
    $module_list[] = 'contact';
52
    $this->assertModuleList($module_list, t('After changing weights'));
53
54
55
56
57
58
59
60
61
62
63
64

    // Test the fixed list feature.
    $fixed_list = array(
      'system' => array('filename' => drupal_get_path('module', 'system')),
      'menu' => array('filename' => drupal_get_path('module', 'menu')),
    );
    module_list(FALSE, FALSE, $fixed_list);
    $new_module_list = array_combine(array_keys($fixed_list), array_keys($fixed_list));
    $this->assertModuleList($new_module_list, t('When using a fixed list'));

    // Reset the module list.
    module_list(TRUE);
65
    $this->assertModuleList($module_list, t('After reset'));
66
67
68
69
70
71
  }

  /**
   * Assert that module_list() return the expected values.
   *
   * @param $expected_values
72
   *   The expected values, sorted by weight and module name.
73
74
   */
  protected function assertModuleList(Array $expected_values, $condition) {
75
    $expected_values = array_combine($expected_values, $expected_values);
76
77
78
79
80
    $this->assertIdentical($expected_values, module_list(), t('@condition: module_list() returns correct results', array('@condition' => $condition)));
    ksort($expected_values);
    $this->assertIdentical($expected_values, module_list(FALSE, TRUE), t('@condition: module_list() returns correctly sorted results', array('@condition' => $condition)));
  }
}
81
82
83
84
85
86
87

/**
 * Unit tests for module uninstallation and related hooks.
 */
class ModuleUninstallTestCase extends DrupalWebTestCase {
  public static function getInfo() {
    return array(
88
89
90
      'name' => 'Module uninstallation',
      'description' => 'Checks module uninstallation',
      'group' => 'Module',
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
    );
  }

  function setUp() {
    parent::setUp('module_test', 'user');
  }

  /**
   * Tests the hook_modules_uninstalled() of the user module.
   */
  function testUserPermsUninstalled() {
    // Uninstalls the module_test module, so hook_modules_uninstalled()
    // is executed.
    drupal_uninstall_modules(array('module_test'));

    // Are the perms defined by 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.'));
  }
}