[TASK] Expose identifier and path of functional test instance 82/45482/4
authorOliver Hader <oliver@typo3.org>
Mon, 28 Dec 2015 16:12:29 +0000 (17:12 +0100)
committerOliver Hader <oliver.hader@typo3.org>
Tue, 29 Dec 2015 18:41:25 +0000 (19:41 +0100)
Identifier and path of a functional test instance is created during
bootstrapping the testcase. However, if one needs to define particular
path settings to the initialization phase, this will end up in being
a chicken-or-the-egg problem.

That's why the mentioned two parts are exposed as static functions
and wrapped by the functional test base class.

Resolves: #72450
Releases: master, 7.6, 6.2
Change-Id: I111768133456974010d49b02225e41f9b74dbcff
Reviewed-on: https://review.typo3.org/45482
Reviewed-by: Morton Jonuschat <m.jonuschat@mojocode.de>
Tested-by: Morton Jonuschat <m.jonuschat@mojocode.de>
Reviewed-by: Oliver Hader <oliver.hader@typo3.org>
Tested-by: Oliver Hader <oliver.hader@typo3.org>
typo3/sysext/core/Tests/FunctionalTestCase.php
typo3/sysext/core/Tests/FunctionalTestCaseBootstrapUtility.php

index c3c0093..47c63b4 100644 (file)
@@ -161,11 +161,25 @@ abstract class FunctionalTestCase extends BaseTestCase
     private $bootstrapUtility = null;
 
     /**
-     * Path to TYPO3 CMS test installation for this test case
+     * Calculate a "unique" identifier for the test database and the
+     * instance patch based on the given test case class name.
      *
-     * @var string
+     * @return string
      */
-    private $instancePath;
+    protected function getInstanceIdentifier()
+    {
+        return FunctionalTestCaseBootstrapUtility::getInstanceIdentifier(get_class($this));
+    }
+
+    /**
+     * Calculates path to TYPO3 CMS test installation for this test case.
+     *
+     * @return string
+     */
+    protected function getInstancePath()
+    {
+        return FunctionalTestCaseBootstrapUtility::getInstancePath(get_class($this));
+    }
 
     /**
      * Set up creates a test instance and database.
@@ -180,7 +194,7 @@ abstract class FunctionalTestCase extends BaseTestCase
             $this->markTestSkipped('Functional tests must be called through phpunit on CLI');
         }
         $this->bootstrapUtility = new FunctionalTestCaseBootstrapUtility();
-        $this->instancePath = $this->bootstrapUtility->setUp(
+        $this->bootstrapUtility->setUp(
             get_class($this),
             $this->coreExtensionsToLoad,
             $this->testExtensionsToLoad,
@@ -356,7 +370,7 @@ abstract class FunctionalTestCase extends BaseTestCase
         }
 
         $arguments = array(
-            'documentRoot' => $this->instancePath,
+            'documentRoot' => $this->getInstancePath(),
             'requestUrl' => 'http://localhost/?id=' . $pageId . '&L=' . $languageId . $additionalParameter,
         );
 
index 4bae74c..3c2498b 100644 (file)
@@ -64,6 +64,30 @@ class FunctionalTestCaseBootstrapUtility
     );
 
     /**
+     * Calculate a "unique" identifier for the test database and the
+     * instance patch based on the given test case class name.
+     *
+     * @param string $testCaseClassName Name of test case class
+     * @return string
+     */
+    static public function getInstanceIdentifier($testCaseClassName)
+    {
+        // 7 characters of sha1 should be enough for a unique identification
+        return substr(sha1($testCaseClassName), 0, 7);
+    }
+
+    /**
+     * Calculates path to TYPO3 CMS test installation for this test case.
+     *
+     * @param string $testCaseClassName Name of test case class
+     * @return string
+     */
+    static public function getInstancePath($testCaseClassName)
+    {
+        return ORIGINAL_ROOT . 'typo3temp/functional-' . static::getInstanceIdentifier($testCaseClassName);
+    }
+
+    /**
      * Set up creates a test instance and database.
      *
      * @param string $testCaseClassName Name of test case class
@@ -83,7 +107,7 @@ class FunctionalTestCaseBootstrapUtility
         array $additionalFoldersToCreate
     ) {
         $this->setUpIdentifier($testCaseClassName);
-        $this->setUpInstancePath();
+        $this->setUpInstancePath($testCaseClassName);
         if ($this->recentTestInstanceExists()) {
             $this->setUpBasicTypo3Bootstrap();
             $this->initializeTestDatabase();
@@ -127,21 +151,24 @@ class FunctionalTestCaseBootstrapUtility
      *
      * As a result, the database name will be identical between different
      * test runs, but different between each test case.
+     *
+     * @param string $testCaseClassName Name of test case class
+     * @return void
      */
     protected function setUpIdentifier($testCaseClassName)
     {
-        // 7 characters of sha1 should be enough for a unique identification
-        $this->identifier = substr(sha1($testCaseClassName), 0, 7);
+        $this->identifier = static::getInstanceIdentifier($testCaseClassName);
     }
 
     /**
      * Calculates path to TYPO3 CMS test installation for this test case.
      *
+     * @param string $testCaseClassName Name of test case class
      * @return void
      */
-    protected function setUpInstancePath()
+    protected function setUpInstancePath($testCaseClassName)
     {
-        $this->instancePath = ORIGINAL_ROOT . 'typo3temp/functional-' . $this->identifier;
+        $this->instancePath = static::getInstancePath($testCaseClassName);
     }
 
     /**