Mercurial > hg > isophonics-drupal-site
diff vendor/jcalderonzumba/mink-phantomjs-driver/src/BasePhantomJSDriver.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 7a779792577d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/jcalderonzumba/mink-phantomjs-driver/src/BasePhantomJSDriver.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,109 @@ +<?php + +namespace Zumba\Mink\Driver; + +use Behat\Mink\Driver\CoreDriver; +use Behat\Mink\Exception\DriverException; +use Behat\Mink\Session; +use Zumba\GastonJS\Browser\Browser; + +/** + * Class BasePhantomJSDriver + * @package Zumba\Mink\Driver + */ +class BasePhantomJSDriver extends CoreDriver { + + /** @var Session */ + protected $session; + /** @var Browser */ + protected $browser; + /** @var string */ + protected $phantomHost; + /** @var \Twig_Loader_Filesystem */ + protected $templateLoader; + /** @var \Twig_Environment */ + protected $templateEnv; + + /** + * Instantiates the driver + * @param string $phantomHost browser "api" oriented host + * @param string $templateCache where we are going to store the templates cache + */ + public function __construct($phantomHost, $templateCache = null) { + $this->phantomHost = $phantomHost; + $this->browser = new Browser($phantomHost); + $this->templateLoader = new \Twig_Loader_Filesystem(realpath(__DIR__ . '/Resources/Script')); + $this->templateEnv = new \Twig_Environment($this->templateLoader, array('cache' => $this->templateCacheSetup($templateCache), 'strict_variables' => true)); + } + + /** + * Sets up the cache template location for the scripts we are going to create with the driver + * @param $templateCache + * @return string + * @throws DriverException + */ + protected function templateCacheSetup($templateCache) { + $cacheDir = $templateCache; + if ($templateCache === null) { + $cacheDir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . "jcalderonzumba" . DIRECTORY_SEPARATOR . "phantomjs"; + if (!file_exists($cacheDir)) { + mkdir($cacheDir, 0777, true); + } + } + + if (!file_exists($cacheDir)) { + throw new DriverException("Template cache $cacheDir directory does not exist"); + } + return $cacheDir; + } + + /** + * Helper to find a node element given an xpath + * @param string $xpath + * @param int $max + * @returns int + * @throws DriverException + */ + protected function findElement($xpath, $max = 1) { + $elements = $this->browser->find("xpath", $xpath); + if (!isset($elements["page_id"]) || !isset($elements["ids"]) || count($elements["ids"]) !== $max) { + throw new DriverException("Failed to get elements with given $xpath"); + } + return $elements; + } + + /** + * {@inheritdoc} + * @param Session $session + */ + public function setSession(Session $session) { + $this->session = $session; + } + + /** + * @return Browser + */ + public function getBrowser() { + return $this->browser; + } + + /** + * @return \Twig_Environment + */ + public function getTemplateEnv() { + return $this->templateEnv; + } + + /** + * Returns a javascript script via twig template engine + * @param $templateName + * @param $viewData + * @return string + */ + public function javascriptTemplateRender($templateName, $viewData) { + /** @var $templateEngine \Twig_Environment */ + $templateEngine = $this->getTemplateEnv(); + return $templateEngine->render($templateName, $viewData); + } + +}