123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- <?php
- namespace Behat\Mink\Tests\Driver\Custom;
- use Behat\Mink\Driver\BrowserKitDriver;
- use PHPUnit\Framework\TestCase;
- use Symfony\Component\BrowserKit\Client;
- use Symfony\Component\BrowserKit\Response;
- class ErrorHandlingTest extends TestCase
- {
- /**
- * @var TestClient
- */
- private $client;
- protected function setUp()
- {
- $this->client = new TestClient();
- }
- public function testGetClient()
- {
- $this->assertSame($this->client, $this->getDriver()->getClient());
- }
- /**
- * @expectedException \Behat\Mink\Exception\DriverException
- * @expectedExceptionMessage Unable to access the response before visiting a page
- */
- public function testGetResponseHeaderWithoutVisit()
- {
- $this->getDriver()->getResponseHeaders();
- }
- /**
- * @expectedException \Behat\Mink\Exception\DriverException
- * @expectedExceptionMessage Unable to access the response content before visiting a page
- */
- public function testFindWithoutVisit()
- {
- $this->getDriver()->find('//html');
- }
- /**
- * @expectedException \Behat\Mink\Exception\DriverException
- * @expectedExceptionMessage Unable to access the request before visiting a page
- */
- public function testGetCurrentUrlWithoutVisit()
- {
- $this->getDriver()->getCurrentUrl();
- }
- /**
- * @expectedException \Behat\Mink\Exception\DriverException
- * @expectedExceptionMessage The selected node has an invalid form attribute (foo)
- */
- public function testNotMatchingHtml5FormId()
- {
- $html = <<<'HTML'
- <html>
- <body>
- <form id="test">
- <input name="test" value="foo" form="foo">
- <input type="submit">
- </form>
- </body>
- </html>
- HTML;
- $this->client->setNextResponse(new Response($html));
- $driver = $this->getDriver();
- $driver->visit('/index.php');
- $driver->setValue('//input[./@name="test"]', 'bar');
- }
- /**
- * @expectedException \Behat\Mink\Exception\DriverException
- * @expectedExceptionMessage The selected node has an invalid form attribute (foo)
- */
- public function testInvalidHtml5FormId()
- {
- $html = <<<'HTML'
- <html>
- <body>
- <form id="test">
- <input name="test" value="foo" form="foo">
- <input type="submit">
- </form>
- <div id="foo"></div>
- </body>
- </html>
- HTML;
- $this->client->setNextResponse(new Response($html));
- $driver = $this->getDriver();
- $driver->visit('/index.php');
- $driver->setValue('//input[./@name="test"]', 'bar');
- }
- /**
- * @expectedException \Behat\Mink\Exception\DriverException
- * @expectedExceptionMessage The selected node does not have a form ancestor.
- */
- public function testManipulateInputWithoutForm()
- {
- $html = <<<'HTML'
- <html>
- <body>
- <form id="test">
- <input type="submit">
- </form>
- <div id="foo">
- <input name="test" value="foo">
- </div>
- </body>
- </html>
- HTML;
- $this->client->setNextResponse(new Response($html));
- $driver = $this->getDriver();
- $driver->visit('/index.php');
- $driver->setValue('//input[./@name="test"]', 'bar');
- }
- /**
- * @expectedException \Behat\Mink\Exception\DriverException
- * @expectedExceptionMessage Behat\Mink\Driver\BrowserKitDriver supports clicking on links and submit or reset buttons only. But "div" provided
- */
- public function testClickOnUnsupportedElement()
- {
- $html = <<<'HTML'
- <html>
- <body>
- <div></div>
- </body>
- </html>
- HTML;
- $this->client->setNextResponse(new Response($html));
- $driver = $this->getDriver();
- $driver->visit('/index.php');
- $driver->click('//div');
- }
- private function getDriver()
- {
- return new BrowserKitDriver($this->client);
- }
- }
- class TestClient extends Client
- {
- protected $nextResponse = null;
- protected $nextScript = null;
- public function setNextResponse(Response $response)
- {
- $this->nextResponse = $response;
- }
- public function setNextScript($script)
- {
- $this->nextScript = $script;
- }
- protected function doRequest($request)
- {
- if (null === $this->nextResponse) {
- return new Response();
- }
- $response = $this->nextResponse;
- $this->nextResponse = null;
- return $response;
- }
- }
|