Version 1
[yaffs-website] / vendor / behat / mink-browserkit-driver / tests / Custom / ErrorHandlingTest.php
diff --git a/vendor/behat/mink-browserkit-driver/tests/Custom/ErrorHandlingTest.php b/vendor/behat/mink-browserkit-driver/tests/Custom/ErrorHandlingTest.php
new file mode 100644 (file)
index 0000000..9e2643c
--- /dev/null
@@ -0,0 +1,181 @@
+<?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;
+    }
+}