diff --git a/modules/simpletest/tests/common.test b/modules/simpletest/tests/common.test index 82f8b2e392a982409c3491df6d4748e8479095be..83f2e97343dae8b8640325780b5cf730ff254d8c 100644 --- a/modules/simpletest/tests/common.test +++ b/modules/simpletest/tests/common.test @@ -1976,6 +1976,66 @@ class ParseInfoFilesTestCase extends DrupalWebTestCase { } } +/** + * Tests for the drupal_system_listing() function. + */ +class DrupalSystemListingTestCase extends DrupalWebTestCase { + /** + * Use the testing profile; this is needed for testDirectoryPrecedence(). + */ + protected $profile = 'testing'; + + public static function getInfo() { + return array( + 'name' => 'Drupal system listing', + 'description' => 'Tests the mechanism for scanning system directories in drupal_system_listing().', + 'group' => 'System', + ); + } + + /** + * Test that files in different directories take precedence as expected. + */ + function testDirectoryPrecedence() { + // Define the module files we will search for, and the directory precedence + // we expect. + $expected_directories = array( + // When the copy of the module in the profile directory is incompatible + // with Drupal core, the copy in the core modules directory takes + // precedence. + 'drupal_system_listing_incompatible_test' => array( + 'modules/simpletest/tests', + 'profiles/testing/modules', + ), + // When both copies of the module are compatible with Drupal core, the + // copy in the profile directory takes precedence. + 'drupal_system_listing_compatible_test' => array( + 'profiles/testing/modules', + 'modules/simpletest/tests', + ), + ); + + // This test relies on two versions of the same module existing in + // different places in the filesystem. Without that, the test has no + // meaning, so assert their presence first. + foreach ($expected_directories as $module => $directories) { + foreach ($directories as $directory) { + $filename = "$directory/$module/$module.module"; + $this->assertTrue(file_exists(DRUPAL_ROOT . '/' . $filename), t('@filename exists.', array('@filename' => $filename))); + } + } + + // Now scan the directories and check that the files take precedence as + // expected. + $files = drupal_system_listing('/\.module$/', 'modules', 'name', 1); + foreach ($expected_directories as $module => $directories) { + $expected_directory = array_shift($directories); + $expected_filename = "$expected_directory/$module/$module.module"; + $this->assertEqual($files[$module]->uri, $expected_filename, t('Module @module was found at @filename.', array('@module' => $module, '@filename' => $expected_filename))); + } + } +} + /** * Tests for the format_date() function. */ diff --git a/modules/simpletest/tests/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.info b/modules/simpletest/tests/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.info new file mode 100644 index 0000000000000000000000000000000000000000..155de2ed760946dba13dc04c8993c67c1a6ddc72 --- /dev/null +++ b/modules/simpletest/tests/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.info @@ -0,0 +1,8 @@ +; $Id$ +name = "Drupal system listing compatible test" +description = "Support module for testing the drupal_system_listing function." +package = Testing +version = VERSION +core = 7.x +files[] = drupal_system_listing_compatible_test.module +hidden = TRUE diff --git a/modules/simpletest/tests/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.module b/modules/simpletest/tests/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.module new file mode 100644 index 0000000000000000000000000000000000000000..13bb990c402e41fc1232a92361bde3761cd4b861 --- /dev/null +++ b/modules/simpletest/tests/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.module @@ -0,0 +1,2 @@ +<?php +// $Id$ diff --git a/modules/simpletest/tests/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.info b/modules/simpletest/tests/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.info new file mode 100644 index 0000000000000000000000000000000000000000..491fbda2ffe9468d36f0163c34933b3d8a78ef1b --- /dev/null +++ b/modules/simpletest/tests/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.info @@ -0,0 +1,8 @@ +; $Id$ +name = "Drupal system listing incompatible test" +description = "Support module for testing the drupal_system_listing function." +package = Testing +version = VERSION +core = 7.x +files[] = drupal_system_listing_incompatible_test.module +hidden = TRUE diff --git a/modules/simpletest/tests/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.module b/modules/simpletest/tests/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.module new file mode 100644 index 0000000000000000000000000000000000000000..13bb990c402e41fc1232a92361bde3761cd4b861 --- /dev/null +++ b/modules/simpletest/tests/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.module @@ -0,0 +1,2 @@ +<?php +// $Id$ diff --git a/profiles/testing/modules/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.info b/profiles/testing/modules/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.info new file mode 100644 index 0000000000000000000000000000000000000000..155de2ed760946dba13dc04c8993c67c1a6ddc72 --- /dev/null +++ b/profiles/testing/modules/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.info @@ -0,0 +1,8 @@ +; $Id$ +name = "Drupal system listing compatible test" +description = "Support module for testing the drupal_system_listing function." +package = Testing +version = VERSION +core = 7.x +files[] = drupal_system_listing_compatible_test.module +hidden = TRUE diff --git a/profiles/testing/modules/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.module b/profiles/testing/modules/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.module new file mode 100644 index 0000000000000000000000000000000000000000..13bb990c402e41fc1232a92361bde3761cd4b861 --- /dev/null +++ b/profiles/testing/modules/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.module @@ -0,0 +1,2 @@ +<?php +// $Id$ diff --git a/profiles/testing/modules/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.info b/profiles/testing/modules/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.info new file mode 100644 index 0000000000000000000000000000000000000000..37dbc986ea8234aba06c91443d43510180d4fc45 --- /dev/null +++ b/profiles/testing/modules/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.info @@ -0,0 +1,11 @@ +; $Id$ +name = "Drupal system listing incompatible test" +description = "Support module for testing the drupal_system_listing function." +package = Testing +version = VERSION +; This deliberately has the wrong core version, to test that it does not take +; precedence over the version of the same module that is in the +; modules/simpletest/tests directory. +core = 6.x +files[] = drupal_system_listing_incompatible_test.module +hidden = TRUE diff --git a/profiles/testing/modules/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.module b/profiles/testing/modules/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.module new file mode 100644 index 0000000000000000000000000000000000000000..13bb990c402e41fc1232a92361bde3761cd4b861 --- /dev/null +++ b/profiles/testing/modules/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.module @@ -0,0 +1,2 @@ +<?php +// $Id$