Skip to content

Commit f615f92

Browse files
authored
Merge pull request #161 from stof/towards_v2
Prepare version 2 of the driver
2 parents 057926c + 7c882ce commit f615f92

7 files changed

Lines changed: 27 additions & 137 deletions

File tree

.github/workflows/tests.yml

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,8 @@ jobs:
1515
runs-on: ubuntu-20.04
1616
strategy:
1717
matrix:
18-
php: [ '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1' ]
18+
php: [ '7.2', '7.3', '7.4', '8.0', '8.1' ]
1919
minimum_stability: [ 'stable' ]
20-
symfony_lts: [ false ]
2120
name_suffix: [ '' ]
2221
implementation: [ 'http_kernel' ]
2322
include:
@@ -29,14 +28,6 @@ jobs:
2928
minimum_stability: dev
3029
implementation: 'http_kernel'
3130
name_suffix: ' and dev deps'
32-
- php: '7.2'
33-
symfony_lts: '^2'
34-
implementation: 'http_kernel'
35-
name_suffix: ' and Symfony 2'
36-
- php: '7.2'
37-
symfony_lts: '^3'
38-
implementation: 'http_kernel'
39-
name_suffix: ' and Symfony 3'
4031
- php: '8.0'
4132
implementation: http_client
4233
fail-fast: false
@@ -62,20 +53,6 @@ jobs:
6253
run: |
6354
composer config minimum-stability dev
6455
65-
- name: Configure for Symfony LTS version
66-
if: "${{ matrix.symfony_lts != false }}"
67-
run: |
68-
composer require -n --no-update symfony/lts=${{ matrix.symfony_lts }}
69-
70-
- name: Configure for PHP >= 7.1
71-
if: "${{ matrix.php >= '7.1' && matrix.symfony_lts == false }}"
72-
run: |
73-
composer require --no-update --dev symfony/error-handler "^4.4 || ^5.0"
74-
75-
- name: Configure for HttpClient
76-
if: "${{ matrix.implementation == 'http_client'}}"
77-
run: composer require --no-update --dev symfony/http-client:^4.4 symfony/mime:^4.4
78-
7956
- name: Install dependencies
8057
run: |
8158
composer update --no-interaction --prefer-dist

composer.json

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,19 @@
1515
],
1616

1717
"require": {
18-
"php": ">=5.4",
19-
"behat/mink": "^1.7.1@dev",
20-
"symfony/browser-kit": "~2.3|~3.0|~4.0",
21-
"symfony/dom-crawler": "~2.3|~3.0|~4.0"
18+
"php": ">=7.2",
19+
"behat/mink": "^1.9.0@dev",
20+
"symfony/browser-kit": "^4.4",
21+
"symfony/dom-crawler": "^4.4"
2222
},
2323

2424
"require-dev": {
2525
"mink/driver-testsuite": "dev-master",
26-
"symfony/debug": "^2.7|^3.0|^4.0",
27-
"symfony/http-kernel": "~2.3|~3.0|~4.0",
28-
"phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.18 || ^8.5 || ^9.5",
26+
"symfony/error-handler": "^4.4",
27+
"symfony/http-client": "^4.4",
28+
"symfony/http-kernel": "^4.4",
29+
"symfony/mime": "^4.4",
30+
"phpunit/phpunit": "^8.5 || ^9.5",
2931
"yoast/phpunit-polyfills": "^1.0"
3032
},
3133

@@ -43,7 +45,7 @@
4345

4446
"extra": {
4547
"branch-alias": {
46-
"dev-master": "1.x-dev"
48+
"dev-master": "2.x-dev"
4749
}
4850
}
4951
}

src/BrowserKitDriver.php

Lines changed: 10 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
use Behat\Mink\Exception\DriverException;
1414
use Behat\Mink\Exception\UnsupportedDriverActionException;
15+
use Symfony\Component\BrowserKit\AbstractBrowser;
1516
use Symfony\Component\BrowserKit\Client;
1617
use Symfony\Component\BrowserKit\Cookie;
1718
use Symfony\Component\BrowserKit\Exception\BadMethodCallException;
@@ -21,9 +22,8 @@
2122
use Symfony\Component\DomCrawler\Field\FileFormField;
2223
use Symfony\Component\DomCrawler\Field\FormField;
2324
use Symfony\Component\DomCrawler\Field\InputFormField;
24-
use Symfony\Component\DomCrawler\Field\TextareaFormField;
2525
use Symfony\Component\DomCrawler\Form;
26-
use Symfony\Component\HttpKernel\Client as HttpKernelClient;
26+
use Symfony\Component\HttpKernel\HttpKernelBrowser;
2727

2828
/**
2929
* Symfony2 BrowserKit driver.
@@ -40,67 +40,33 @@ class BrowserKitDriver extends CoreDriver
4040
private $forms = array();
4141
private $serverParameters = array();
4242
private $started = false;
43-
private $removeScriptFromUrl = false;
44-
private $removeHostFromUrl = false;
4543

4644
/**
4745
* Initializes BrowserKit driver.
4846
*
4947
* @param Client $client BrowserKit client instance
5048
* @param string|null $baseUrl Base URL for HttpKernel clients
5149
*/
52-
public function __construct(Client $client, $baseUrl = null)
50+
public function __construct(AbstractBrowser $client, $baseUrl = null)
5351
{
5452
$this->client = $client;
5553
$this->client->followRedirects(true);
5654

57-
if ($baseUrl !== null && $client instanceof HttpKernelClient) {
55+
if ($baseUrl !== null && $client instanceof HttpKernelBrowser) {
5856
$client->setServerParameter('SCRIPT_FILENAME', parse_url($baseUrl, PHP_URL_PATH));
5957
}
6058
}
6159

6260
/**
63-
* Returns BrowserKit HTTP client instance.
61+
* Returns BrowserKit browser instance.
6462
*
65-
* @return Client
63+
* @return AbstractBrowser
6664
*/
6765
public function getClient()
6866
{
6967
return $this->client;
7068
}
7169

72-
/**
73-
* Tells driver to remove hostname from URL.
74-
*
75-
* @param boolean $remove
76-
*
77-
* @deprecated Deprecated as of 1.2, to be removed in 2.0. Pass the base url in the constructor instead.
78-
*/
79-
public function setRemoveHostFromUrl($remove = true)
80-
{
81-
@trigger_error(
82-
'setRemoveHostFromUrl() is deprecated as of 1.2 and will be removed in 2.0. Pass the base url in the constructor instead.',
83-
E_USER_DEPRECATED
84-
);
85-
$this->removeHostFromUrl = (bool) $remove;
86-
}
87-
88-
/**
89-
* Tells driver to remove script name from URL.
90-
*
91-
* @param boolean $remove
92-
*
93-
* @deprecated Deprecated as of 1.2, to be removed in 2.0. Pass the base url in the constructor instead.
94-
*/
95-
public function setRemoveScriptFromUrl($remove = true)
96-
{
97-
@trigger_error(
98-
'setRemoveScriptFromUrl() is deprecated as of 1.2 and will be removed in 2.0. Pass the base url in the constructor instead.',
99-
E_USER_DEPRECATED
100-
);
101-
$this->removeScriptFromUrl = (bool) $remove;
102-
}
103-
10470
/**
10571
* {@inheritdoc}
10672
*/
@@ -316,11 +282,6 @@ public function getStatusCode()
316282
{
317283
$response = $this->getResponse();
318284

319-
// BC layer for Symfony < 4.3
320-
if (!method_exists($response, 'getStatusCode')) {
321-
return $response->getStatus();
322-
}
323-
324285
return $response->getStatusCode();
325286
}
326287

@@ -361,11 +322,8 @@ public function getTagName($xpath)
361322
public function getText($xpath)
362323
{
363324
$text = $this->getFilteredCrawler($xpath)->text(null, true);
364-
// TODO drop our own normalization once supporting only dom-crawler 4.4+ as it already does it.
365-
$text = str_replace("\n", ' ', $text);
366-
$text = preg_replace('/ {2,}/', ' ', $text);
367325

368-
return trim($text);
326+
return $text;
369327
}
370328

371329
/**
@@ -383,13 +341,7 @@ public function getOuterHtml($xpath)
383341
{
384342
$crawler = $this->getFilteredCrawler($xpath);
385343

386-
if (method_exists($crawler, 'outerHtml')) {
387-
return $crawler->outerHtml();
388-
}
389-
390-
$node = $this->getCrawlerNode($crawler);
391-
392-
return $node->ownerDocument->saveHTML($node);
344+
return $crawler->outerHtml();
393345
}
394346

395347
/**
@@ -592,13 +544,7 @@ protected function getResponse()
592544
*/
593545
protected function prepareUrl($url)
594546
{
595-
if (!$this->removeHostFromUrl && !$this->removeScriptFromUrl) {
596-
return $url;
597-
}
598-
599-
$replacement = ($this->removeHostFromUrl ? '' : '$1') . ($this->removeScriptFromUrl ? '' : '$2');
600-
601-
return preg_replace('#(https?\://[^/]+)(/[^/\.]+\.php)?#', $replacement, $url);
547+
return $url;
602548
}
603549

604550
/**
@@ -725,13 +671,6 @@ private function submit(Form $form)
725671
}
726672
}
727673

728-
foreach ($form->all() as $field) {
729-
// Add a fix for https://github.com/symfony/symfony/pull/10733 to support Symfony versions which are not fixed
730-
if ($field instanceof TextareaFormField && null === $field->getValue()) {
731-
$field->setValue('');
732-
}
733-
}
734-
735674
$this->client->submit($form, array(), $this->serverParameters);
736675

737676
$this->forms = array();
@@ -846,15 +785,7 @@ private function mergeForms(Form $to, Form $from)
846785
*/
847786
private function getCrawlerNode(Crawler $crawler)
848787
{
849-
$node = null;
850-
851-
if ($crawler instanceof \Iterator) {
852-
// for symfony 2.3 compatibility as getNode is not public before symfony 2.4
853-
$crawler->rewind();
854-
$node = $crawler->current();
855-
} else {
856-
$node = $crawler->getNode(0);
857-
}
788+
$node = $crawler->getNode(0);
858789

859790
if (null !== $node) {
860791
return $node;

tests/AbstractBrowserKitConfig.php

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@
22

33
namespace Behat\Mink\Tests\Driver;
44

5-
use Behat\Mink\Driver\BrowserKitDriver;
6-
use Behat\Mink\Tests\Driver\Util\FixturesKernel;
7-
use Symfony\Component\HttpKernel\Client;
8-
95
abstract class AbstractBrowserKitConfig extends AbstractConfig
106
{
117
public static function getInstance()
@@ -17,20 +13,4 @@ protected function supportsJs()
1713
{
1814
return false;
1915
}
20-
21-
public function skipMessage($testCase, $test)
22-
{
23-
if (
24-
'Behat\Mink\Tests\Driver\Form\Html5Test' === $testCase
25-
&& in_array($test, array(
26-
'testHtml5FormAction',
27-
'testHtml5FormMethod',
28-
))
29-
&& !class_exists('\Symfony\Component\DomCrawler\AbstractUriElement')
30-
) {
31-
return 'Mink BrowserKit doesn\'t support HTML5 form attributes before Symfony 3.3';
32-
}
33-
34-
return parent::skipMessage($testCase, $test);
35-
}
3616
}

tests/Custom/BaseUrlTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
use Behat\Mink\Session;
77
use Behat\Mink\Tests\Driver\Util\FixturesKernel;
88
use PHPUnit\Framework\TestCase;
9-
use Symfony\Component\HttpKernel\Client;
9+
use Symfony\Component\HttpKernel\HttpKernelBrowser;
1010

1111
/**
1212
* @group functional
@@ -15,7 +15,7 @@ class BaseUrlTest extends TestCase
1515
{
1616
public function testBaseUrl()
1717
{
18-
$client = new Client(new FixturesKernel());
18+
$client = new HttpKernelBrowser(new FixturesKernel());
1919
$driver = new BrowserKitDriver($client, 'http://localhost/foo/');
2020
$session = new Session($driver);
2121

tests/Custom/ErrorHandlingTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
use Behat\Mink\Driver\BrowserKitDriver;
66
use PHPUnit\Framework\TestCase;
7-
use Symfony\Component\BrowserKit\Client;
7+
use Symfony\Component\BrowserKit\AbstractBrowser;
88
use Symfony\Component\BrowserKit\Response;
99
use Yoast\PHPUnitPolyfills\Polyfills\ExpectException;
1010

@@ -160,7 +160,7 @@ private function getDriver()
160160
}
161161
}
162162

163-
class TestClient extends Client
163+
class TestClient extends AbstractBrowser
164164
{
165165
protected $nextResponse = null;
166166
protected $nextScript = null;

tests/HttpKernelBrowserKitConfig.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
use Behat\Mink\Driver\BrowserKitDriver;
66
use Behat\Mink\Tests\Driver\Util\FixturesKernel;
7-
use Symfony\Component\HttpKernel\Client;
7+
use Symfony\Component\HttpKernel\HttpKernelBrowser;
88

99
class HttpKernelBrowserKitConfig extends AbstractBrowserKitConfig
1010
{
@@ -13,7 +13,7 @@ class HttpKernelBrowserKitConfig extends AbstractBrowserKitConfig
1313
*/
1414
public function createDriver()
1515
{
16-
$client = new Client(new FixturesKernel());
16+
$client = new HttpKernelBrowser(new FixturesKernel());
1717

1818
return new BrowserKitDriver($client);
1919
}

0 commit comments

Comments
 (0)