X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=vendor%2Fbehat%2Fmink%2Fsrc%2FSelector%2FSelectorsHandler.php;fp=vendor%2Fbehat%2Fmink%2Fsrc%2FSelector%2FSelectorsHandler.php;h=09b947ca5fe8d9ce3d33247b2069d4de5233acd5;hp=0000000000000000000000000000000000000000;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad diff --git a/vendor/behat/mink/src/Selector/SelectorsHandler.php b/vendor/behat/mink/src/Selector/SelectorsHandler.php new file mode 100644 index 000000000..09b947ca5 --- /dev/null +++ b/vendor/behat/mink/src/Selector/SelectorsHandler.php @@ -0,0 +1,135 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Mink\Selector; + +use Behat\Mink\Selector\Xpath\Escaper; + +/** + * Selectors handler. + * + * @author Konstantin Kudryashov + */ +class SelectorsHandler +{ + private $selectors; + private $escaper; + + /** + * Initializes selectors handler. + * + * @param SelectorInterface[] $selectors default selectors to register + */ + public function __construct(array $selectors = array()) + { + $this->escaper = new Escaper(); + + $this->registerSelector('named_partial', new PartialNamedSelector()); + $this->registerSelector('named_exact', new ExactNamedSelector()); + $this->registerSelector('css', new CssSelector()); + + foreach ($selectors as $name => $selector) { + $this->registerSelector($name, $selector); + } + } + + /** + * Registers new selector engine with specified name. + * + * @param string $name selector engine name + * @param SelectorInterface $selector selector engine instance + */ + public function registerSelector($name, SelectorInterface $selector) + { + $this->selectors[$name] = $selector; + } + + /** + * Checks whether selector with specified name is registered on handler. + * + * @param string $name selector engine name + * + * @return Boolean + */ + public function isSelectorRegistered($name) + { + return isset($this->selectors[$name]); + } + + /** + * Returns selector engine with specified name. + * + * @param string $name selector engine name + * + * @return SelectorInterface + * + * @throws \InvalidArgumentException + */ + public function getSelector($name) + { + if ('named' === $name) { + @trigger_error( + 'Using the "named" selector directly from the handler is deprecated as of 1.6 and will be removed in 2.0.' + .' Use the "named_partial" or use the "named" selector through the Element API instead.', + E_USER_DEPRECATED + ); + $name = 'named_partial'; + } + + if (!$this->isSelectorRegistered($name)) { + throw new \InvalidArgumentException("Selector \"$name\" is not registered."); + } + + return $this->selectors[$name]; + } + + /** + * Translates selector with specified name to XPath. + * + * @param string $selector selector engine name (registered) + * @param string|array $locator selector locator (an array or a string depending of the selector being used) + * + * @return string + */ + public function selectorToXpath($selector, $locator) + { + if ('xpath' === $selector) { + if (!is_string($locator)) { + throw new \InvalidArgumentException('The xpath selector expects to get a string as locator'); + } + + return $locator; + } + + return $this->getSelector($selector)->translateToXPath($locator); + } + + /** + * Translates string to XPath literal. + * + * @deprecated since Mink 1.7. Use \Behat\Mink\Selector\Xpath\Escaper::escapeLiteral when building Xpath + * or pass the unescaped value when using the named selector. + * + * @param string $s + * + * @return string + */ + public function xpathLiteral($s) + { + @trigger_error( + 'The '.__METHOD__.' method is deprecated as of 1.7 and will be removed in 2.0.' + .' Use \Behat\Mink\Selector\Xpath\Escaper::escapeLiteral instead when building Xpath' + .' or pass the unescaped value when using the named selector.', + E_USER_DEPRECATED + ); + + return $this->escaper->escapeLiteral($s); + } +}