diff options
author | webchick <webchick@24967.no-reply.drupal.org> | 2012-02-28 23:05:40 -0800 |
---|---|---|
committer | webchick <webchick@24967.no-reply.drupal.org> | 2012-02-28 23:05:40 -0800 |
commit | a71a3f59c82ec2b3b027817fafd0f5edad2e54ab (patch) | |
tree | bf7875de10115a6451ec167d6c28b71966e35df1 | |
parent | bb3f7e97c33671539d61158e16cac965c72080d0 (diff) | |
download | brdo-a71a3f59c82ec2b3b027817fafd0f5edad2e54ab.tar.gz brdo-a71a3f59c82ec2b3b027817fafd0f5edad2e54ab.tar.bz2 |
Issue #911354 by adrian, boombatower, jhedstrom, sun, yhahn, langworthy, dixon_, jrbeeman: Fixed Tests in profiles/[name]/modules cannot be run and cannot use a different profile for running tests.
5 files changed, 150 insertions, 4 deletions
diff --git a/includes/common.inc b/includes/common.inc index 021e1a47d..ce0839021 100644 --- a/includes/common.inc +++ b/includes/common.inc @@ -5230,8 +5230,6 @@ function drupal_cron_cleanup() { function drupal_system_listing($mask, $directory, $key = 'name', $min_depth = 1) { $config = conf_path(); - $profile = drupal_get_profile(); - $searchdir = array($directory); $files = array(); @@ -5239,8 +5237,24 @@ function drupal_system_listing($mask, $directory, $key = 'name', $min_depth = 1) // themes as organized by a distribution. It is pristine in the same way // that /modules is pristine for core; users should avoid changing anything // there in favor of sites/all or sites/<domain> directories. - if (file_exists("profiles/$profile/$directory")) { - $searchdir[] = "profiles/$profile/$directory"; + $profiles = array(); + $profile = drupal_get_profile(); + // For SimpleTest to be able to test modules packaged together with a + // distribution we need to include the profile of the parent site (in which + // test runs are triggered). + if (drupal_valid_test_ua()) { + $testing_profile = variable_get('simpletest_parent_profile', FALSE); + if ($testing_profile && $testing_profile != $profile) { + $profiles[] = $testing_profile; + } + } + // In case both profile directories contain the same extension, the actual + // profile always has precedence. + $profiles[] = $profile; + foreach ($profiles as $profile) { + if (file_exists("profiles/$profile/$directory")) { + $searchdir[] = "profiles/$profile/$directory"; + } } // Always search sites/all/* as well as the global directories. diff --git a/modules/simpletest/drupal_web_test_case.php b/modules/simpletest/drupal_web_test_case.php index a457a89b3..42bab12ce 100644 --- a/modules/simpletest/drupal_web_test_case.php +++ b/modules/simpletest/drupal_web_test_case.php @@ -1344,6 +1344,12 @@ class DrupalWebTestCase extends DrupalTestCase { variable_set('file_private_path', $private_files_directory); variable_set('file_temporary_path', $temp_files_directory); + // Set the 'simpletest_parent_profile' variable to add the parent profile's + // search path to the child site's search paths. + // @see drupal_system_listing() + // @todo This may need to be primed like 'install_profile' above. + variable_set('simpletest_parent_profile', $this->originalProfile); + // Include the testing profile. variable_set('install_profile', $this->profile); $profile_details = install_profile_info($this->profile, 'en'); diff --git a/modules/simpletest/simpletest.test b/modules/simpletest/simpletest.test index dbe2ec0f3..c67b004ea 100644 --- a/modules/simpletest/simpletest.test +++ b/modules/simpletest/simpletest.test @@ -567,3 +567,91 @@ class SimpleTestBrokenSetUp extends DrupalWebTestCase { } } } + +/** + * Verifies that tests bundled with installation profile modules are found. + */ +class SimpleTestInstallationProfileModuleTestsTestCase extends DrupalWebTestCase { + /** + * Use the Testing profile. + * + * The Testing profile contains drupal_system_listing_compatible_test.test, + * which attempts to: + * - run tests using the Minimal profile (which does not contain the + * drupal_system_listing_compatible_test.module) + * - but still install the drupal_system_listing_compatible_test.module + * contained in the Testing profile. + * + * @see DrupalSystemListingCompatibleTestCase + */ + protected $profile = 'testing'; + + public static function getInfo() { + return array( + 'name' => 'Installation profile module tests', + 'description' => 'Verifies that tests bundled with installation profile modules are found.', + 'group' => 'SimpleTest', + ); + } + + function setUp() { + parent::setUp(array('simpletest')); + + $this->admin_user = $this->drupalCreateUser(array('administer unit tests')); + $this->drupalLogin($this->admin_user); + } + + /** + * Tests existence of test case located in an installation profile module. + */ + function testInstallationProfileTests() { + $this->drupalGet('admin/config/development/testing'); + $this->assertText('Installation profile module tests helper'); + $edit = array( + 'DrupalSystemListingCompatibleTestCase' => TRUE, + ); + $this->drupalPost(NULL, $edit, t('Run tests')); + $this->assertText('DrupalSystemListingCompatibleTestCase test executed.'); + } +} + +/** + * Verifies that tests in other installation profiles are not found. + * + * @see SimpleTestInstallationProfileModuleTestsTestCase + */ +class SimpleTestOtherInstallationProfileModuleTestsTestCase extends DrupalWebTestCase { + /** + * Use the Minimal profile. + * + * The Testing profile contains drupal_system_listing_compatible_test.test, + * which should not be found. + * + * @see SimpleTestInstallationProfileModuleTestsTestCase + * @see DrupalSystemListingCompatibleTestCase + */ + protected $profile = 'minimal'; + + public static function getInfo() { + return array( + 'name' => 'Other Installation profiles', + 'description' => 'Verifies that tests in other installation profiles are not found.', + 'group' => 'SimpleTest', + ); + } + + function setUp() { + parent::setUp(array('simpletest')); + + $this->admin_user = $this->drupalCreateUser(array('administer unit tests')); + $this->drupalLogin($this->admin_user); + } + + /** + * Tests that tests located in another installation profile do not appear. + */ + function testOtherInstallationProfile() { + $this->drupalGet('admin/config/development/testing'); + $this->assertNoText('Installation profile module tests helper'); + } +} 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 index 085c33525..2bf7e10ba 100644 --- 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 @@ -4,3 +4,4 @@ package = Testing version = VERSION core = 7.x hidden = TRUE +files[] = drupal_system_listing_compatible_test.test diff --git a/profiles/testing/modules/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.test b/profiles/testing/modules/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.test new file mode 100644 index 000000000..198c1d8a0 --- /dev/null +++ b/profiles/testing/modules/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.test @@ -0,0 +1,37 @@ +<?php + +/** + * Helper to verify tests in installation profile modules. + */ +class DrupalSystemListingCompatibleTestCase extends DrupalWebTestCase { + /** + * Use the Minimal profile. + * + * This test needs to use a different installation profile than the test which + * asserts that this test is found. + * + * @see SimpleTestInstallationProfileModuleTestsTestCase + */ + protected $profile = 'minimal'; + + public static function getInfo() { + return array( + 'name' => 'Installation profile module tests helper', + 'description' => 'Verifies that tests in installation profile modules are found and may use another profile for running tests.', + 'group' => 'Installation profile', + ); + } + + function setUp() { + // Attempt to install a module in Testing profile, while this test runs with + // a different profile. + parent::setUp(array('drupal_system_listing_compatible_test')); + } + + /** + * Non-empty test* method required to executed the test case class. + */ + function testDrupalSystemListing() { + $this->pass(__CLASS__ . ' test executed.'); + } +} |