- <?php
- /**
- * Perforce Swarm
- *
- * @copyright 2014 Perforce Software. All rights reserved.
- * @license Please see LICENSE.txt in top-level folder of this distribution.
- * @version <release>/<patch>
- */
-
- namespace BehatTests;
-
- use Behat\Behat\Context\BehatContext;
- use Behat\Mink\Session as MinkSession;
-
- class AbstractContext extends BehatContext
- {
- protected $configParams;
- const TEST_MAX_TRY_COUNT = 10;
-
-
- public function __construct(array $parameters)
- {
- $this->configParams = $parameters;
- }
-
- /**
- * Helper function to access members of the P4Context class.
- *
- * @return P4Context
- */
- protected function getP4Context()
- {
- return $this->getMainContext()->getSubContext('p4');
- }
-
- /**
- * Helper function to access members of the MinkContext class.
- *
- * @return FeatureMinkContext context
- */
- protected function getMinkContext()
- {
- return $this->getMainContext()->getSubContext('mink');
- }
-
- /**
- * Helper function to access Mink browser session.
- *
- * @return MinkSession
- */
- protected function getSession()
- {
- return $this->getMinkContext()->getSession();
- }
-
- /**
- * Set unique session cookie named 'SwarmDataPath' for each distinct test scenario run
- * The value of the cookie is the unique id 'uuid' generated for each distinct scenario run
- * The cookie is set on the swarm host 'base_url' that is read from the config.yml file
- */
- protected function setSwarmCookie()
- {
- $session = $this->getSession();
- // Visit the swarm host url before the cookie is set, so that the domain for the cookie gets set
- $session->visit($this->configParams['base_url']);
- // Set the cookie
- $session->setCookie('SwarmDataPath', $this->getP4Context()->getUUID());
- // Re-visit the swarm host url, after the cookie has been set
- $session->visit($this->configParams['base_url']);
- }
-
- /**
- * Return the value set for the cookie 'SwarmDataPath' for a given scenario run.
- * It should be equal to the unique 'uuid' value generated for the scenario
- *
- * @return null|string UUID value set for the SwarmDataPath cookie
- */
- protected function getSwarmCookie()
- {
- return $this->getSession()->getCookie('SwarmDataPath');
- }
-
-
- /**
- * Recursively remove a directory and all of it's file contents.
- *
- * @param string $directory The directory to remove.
- * @param boolean $recursive when true, recursively delete directories.
- * @param boolean $removeRoot when true, remove the root (passed) directory too
- */
- public function removeDirectory($directory, $recursive = true, $removeRoot = true)
- {
-
- if (is_dir($directory)) {
- chmod($directory, 0777);
- $files = new \RecursiveDirectoryIterator($directory);
- foreach ($files as $file) {
- if ($files->isDot()) {
- continue;
- }
- if ($file->isFile()) {
- // on Windows, it may take some time for open file handles to
- // be closed. We try to unlink a file for TEST_MAX_TRY_COUNT
- // times and then bail out.
- $count = 0;
- chmod($file->getPathname(), 0777);
- while ($count <= self::TEST_MAX_TRY_COUNT) {
- try {
- unlink($file->getPathname());
- break;
- } catch (\Exception $e) {
- $count++;
- if ($count == self::TEST_MAX_TRY_COUNT) {
- throw new \Exception(
- "Can't delete '" . $file->getPathname() . "' with message " . $e->getMessage()
- );
- }
- }
- }
- } elseif ($file->isDir() && $recursive) {
- $this->removeDirectory($file->getPathname(), true, true);
- }
- }
-
- if ($removeRoot) {
- chmod($directory, 0777);
- $count = 0;
- while ($count <= self::TEST_MAX_TRY_COUNT) {
- try {
- rmdir($directory);
- break;
- } catch (\Exception $e) {
- $count++;
- if ($count == self::TEST_MAX_TRY_COUNT) {
- throw new \Exception(
- "Can't delete '" . $directory->getPathname() . "' with message " . $e->getMessage()
- );
- }
- }
- }
- }
- }
- }
- }
-
# |
Change |
User |
Description |
Committed |
|
#1
|
18730 |
Liz Lam |
clean up code and move things around |
9 years ago
|
|