summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwebchick <webchick@24967.no-reply.drupal.org>2012-02-28 23:05:40 -0800
committerwebchick <webchick@24967.no-reply.drupal.org>2012-02-28 23:05:40 -0800
commita71a3f59c82ec2b3b027817fafd0f5edad2e54ab (patch)
treebf7875de10115a6451ec167d6c28b71966e35df1
parentbb3f7e97c33671539d61158e16cac965c72080d0 (diff)
downloadbrdo-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.
-rw-r--r--includes/common.inc22
-rw-r--r--modules/simpletest/drupal_web_test_case.php6
-rw-r--r--modules/simpletest/simpletest.test88
-rw-r--r--profiles/testing/modules/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.info1
-rw-r--r--profiles/testing/modules/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.test37
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.');
+ }
+}