xref: /plugin/combo/vendor/php-webdriver/webdriver/lib/Remote/CustomWebDriverCommand.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau
3*04fd306cSNickeaunamespace Facebook\WebDriver\Remote;
4*04fd306cSNickeau
5*04fd306cSNickeauuse Facebook\WebDriver\Exception\WebDriverException;
6*04fd306cSNickeau
7*04fd306cSNickeauclass CustomWebDriverCommand extends WebDriverCommand
8*04fd306cSNickeau{
9*04fd306cSNickeau    const METHOD_GET = 'GET';
10*04fd306cSNickeau    const METHOD_POST = 'POST';
11*04fd306cSNickeau
12*04fd306cSNickeau    /** @var string */
13*04fd306cSNickeau    private $customUrl;
14*04fd306cSNickeau    /** @var string */
15*04fd306cSNickeau    private $customMethod;
16*04fd306cSNickeau
17*04fd306cSNickeau    /**
18*04fd306cSNickeau     * @param string $session_id
19*04fd306cSNickeau     * @param string $url
20*04fd306cSNickeau     * @param string $method
21*04fd306cSNickeau     * @param array $parameters
22*04fd306cSNickeau     */
23*04fd306cSNickeau    public function __construct($session_id, $url, $method, array $parameters)
24*04fd306cSNickeau    {
25*04fd306cSNickeau        $this->setCustomRequestParameters($url, $method);
26*04fd306cSNickeau
27*04fd306cSNickeau        parent::__construct($session_id, DriverCommand::CUSTOM_COMMAND, $parameters);
28*04fd306cSNickeau    }
29*04fd306cSNickeau
30*04fd306cSNickeau    /**
31*04fd306cSNickeau     * @throws WebDriverException
32*04fd306cSNickeau     * @return string
33*04fd306cSNickeau     */
34*04fd306cSNickeau    public function getCustomUrl()
35*04fd306cSNickeau    {
36*04fd306cSNickeau        if ($this->customUrl === null) {
37*04fd306cSNickeau            throw new WebDriverException('URL of custom command is not set');
38*04fd306cSNickeau        }
39*04fd306cSNickeau
40*04fd306cSNickeau        return $this->customUrl;
41*04fd306cSNickeau    }
42*04fd306cSNickeau
43*04fd306cSNickeau    /**
44*04fd306cSNickeau     * @throws WebDriverException
45*04fd306cSNickeau     * @return string
46*04fd306cSNickeau     */
47*04fd306cSNickeau    public function getCustomMethod()
48*04fd306cSNickeau    {
49*04fd306cSNickeau        if ($this->customMethod === null) {
50*04fd306cSNickeau            throw new WebDriverException('Method of custom command is not set');
51*04fd306cSNickeau        }
52*04fd306cSNickeau
53*04fd306cSNickeau        return $this->customMethod;
54*04fd306cSNickeau    }
55*04fd306cSNickeau
56*04fd306cSNickeau    /**
57*04fd306cSNickeau     * @param string $custom_url
58*04fd306cSNickeau     * @param string $custom_method
59*04fd306cSNickeau     * @throws WebDriverException
60*04fd306cSNickeau     */
61*04fd306cSNickeau    protected function setCustomRequestParameters($custom_url, $custom_method)
62*04fd306cSNickeau    {
63*04fd306cSNickeau        $allowedMethods = [static::METHOD_GET, static::METHOD_POST];
64*04fd306cSNickeau        if (!in_array($custom_method, $allowedMethods, true)) {
65*04fd306cSNickeau            throw new WebDriverException(
66*04fd306cSNickeau                sprintf(
67*04fd306cSNickeau                    'Invalid custom method "%s", must be one of [%s]',
68*04fd306cSNickeau                    $custom_method,
69*04fd306cSNickeau                    implode(', ', $allowedMethods)
70*04fd306cSNickeau                )
71*04fd306cSNickeau            );
72*04fd306cSNickeau        }
73*04fd306cSNickeau        $this->customMethod = $custom_method;
74*04fd306cSNickeau
75*04fd306cSNickeau        if (mb_strpos($custom_url, '/') !== 0) {
76*04fd306cSNickeau            throw new WebDriverException(
77*04fd306cSNickeau                sprintf('URL of custom command has to start with / but is "%s"', $custom_url)
78*04fd306cSNickeau            );
79*04fd306cSNickeau        }
80*04fd306cSNickeau        $this->customUrl = $custom_url;
81*04fd306cSNickeau    }
82*04fd306cSNickeau}
83