2015-08-17 17:00:26 -07:00
< ? 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
2015-10-08 11:40:12 -07:00
* @ expectedExceptionMessage Behat\Mink\Driver\BrowserKitDriver supports clicking on links and submit or reset buttons only . But " div " provided
2015-08-17 17:00:26 -07:00
*/
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 ;
}
}