Mercurial > hg > cmmr2012-drupal-site
diff vendor/jcalderonzumba/mink-phantomjs-driver/src/KeyboardTrait.php @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/jcalderonzumba/mink-phantomjs-driver/src/KeyboardTrait.php Thu Jul 05 14:24:15 2018 +0000 @@ -0,0 +1,95 @@ +<?php + +namespace Zumba\Mink\Driver; + +use Behat\Mink\Exception\DriverException; + +/** + * Class KeyboardTrait + * @package Zumba\Mink\Driver + */ +trait KeyboardTrait { + + /** + * Does some normalization for the char we want to do keyboard events with. + * @param $char + * @throws DriverException + * @return string + */ + protected function normalizeCharForKeyEvent($char) { + if (!is_int($char) && !is_string($char)) { + throw new DriverException("Unsupported key type, can only be integer or string"); + } + + if (is_string($char) && strlen($char) !== 1) { + throw new DriverException("Key can only have ONE character"); + } + + $key = $char; + if (is_int($char)) { + $key = chr($char); + } + return $key; + } + + /** + * Does some control and normalization for the key event modifier + * @param $modifier + * @return string + * @throws DriverException + */ + protected function keyEventModifierControl($modifier) { + if ($modifier === null) { + $modifier = "none"; + } + + if (!in_array($modifier, array("none", "alt", "ctrl", "shift", "meta"))) { + throw new DriverException("Unsupported key modifier $modifier"); + } + return $modifier; + } + + /** + * Send a key-down event to the browser element + * @param $xpath + * @param $char + * @param string $modifier + * @throws DriverException + */ + public function keyDown($xpath, $char, $modifier = null) { + $element = $this->findElement($xpath, 1); + $key = $this->normalizeCharForKeyEvent($char); + $modifier = $this->keyEventModifierControl($modifier); + return $this->browser->keyEvent($element["page_id"], $element["ids"][0], "keydown", $key, $modifier); + } + + /** + * @param string $xpath + * @param string $char + * @param string $modifier + * @throws DriverException + */ + public function keyPress($xpath, $char, $modifier = null) { + $element = $this->findElement($xpath, 1); + $key = $this->normalizeCharForKeyEvent($char); + $modifier = $this->keyEventModifierControl($modifier); + return $this->browser->keyEvent($element["page_id"], $element["ids"][0], "keypress", $key, $modifier); + } + + /** + * Pressed up specific keyboard key. + * + * @param string $xpath + * @param string|integer $char could be either char ('b') or char-code (98) + * @param string $modifier keyboard modifier (could be 'ctrl', 'alt', 'shift' or 'meta') + * + * @throws DriverException When the operation cannot be done + */ + public function keyUp($xpath, $char, $modifier = null) { + $this->findElement($xpath, 1); + $element = $this->findElement($xpath, 1); + $key = $this->normalizeCharForKeyEvent($char); + $modifier = $this->keyEventModifierControl($modifier); + return $this->browser->keyEvent($element["page_id"], $element["ids"][0], "keyup", $key, $modifier); + } +}