You are here

ErrorHandlingTest.php in Zircon Profile 8

File

vendor/behat/mink-browserkit-driver/tests/Custom/ErrorHandlingTest.php
View source
<?php

namespace Behat\Mink\Tests\Driver\Custom;

use Behat\Mink\Driver\BrowserKitDriver;
use Symfony\Component\BrowserKit\Client;
use Symfony\Component\BrowserKit\Response;
class ErrorHandlingTest extends \PHPUnit_Framework_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;
  }

}

Classes