add goutte/client 4 compatibility

This commit is contained in:
Swen van Zanten
2022-04-11 15:02:41 +02:00
parent df04efb3e8
commit c0aa3e776e
2 changed files with 27 additions and 6 deletions

View File

@@ -30,7 +30,7 @@
"behat/mink-extension": "self.version" "behat/mink-extension": "self.version"
}, },
"require-dev": { "require-dev": {
"behat/mink-goutte-driver": "^1.1", "behat/mink-goutte-driver": "^1.1 || ^2.0",
"phpspec/phpspec": "^6.0 || ^7.0 || 7.1.x-dev" "phpspec/phpspec": "^6.0 || ^7.0 || 7.1.x-dev"
}, },
"extra": { "extra": {

View File

@@ -68,7 +68,20 @@ class GoutteFactory implements DriverFactory
); );
} }
if ($this->isGoutte1()) { $clientArguments = array(
$config['server_parameters'],
);
$guzzleClient = null;
if ($this->isGoutte4()) {
$clientArguments = array();
if (class_exists('Symfony\Component\HttpClient\HttpClient')) {
$clientArguments = array(
\Symfony\Component\HttpClient\HttpClient::create($config['server_parameters'])
);
}
} elseif ($this->isGoutte1()) {
$guzzleClient = $this->buildGuzzle3Client($config['guzzle_parameters']); $guzzleClient = $this->buildGuzzle3Client($config['guzzle_parameters']);
} elseif ($this->isGuzzle6()) { } elseif ($this->isGuzzle6()) {
$guzzleClient = $this->buildGuzzle6Client($config['guzzle_parameters']); $guzzleClient = $this->buildGuzzle6Client($config['guzzle_parameters']);
@@ -76,10 +89,11 @@ class GoutteFactory implements DriverFactory
$guzzleClient = $this->buildGuzzle4Client($config['guzzle_parameters']); $guzzleClient = $this->buildGuzzle4Client($config['guzzle_parameters']);
} }
$clientDefinition = new Definition('Behat\Mink\Driver\Goutte\Client', array( $clientDefinition = new Definition('Behat\Mink\Driver\Goutte\Client', $clientArguments);
$config['server_parameters'],
)); if (null !== $guzzleClient) {
$clientDefinition->addMethodCall('setClient', array($guzzleClient)); $clientDefinition->addMethodCall('setClient', array($guzzleClient));
}
return new Definition('Behat\Mink\Driver\GoutteDriver', array( return new Definition('Behat\Mink\Driver\GoutteDriver', array(
$clientDefinition, $clientDefinition,
@@ -112,6 +126,13 @@ class GoutteFactory implements DriverFactory
return new Definition('Guzzle\Http\Client', array(null, $parameters)); return new Definition('Guzzle\Http\Client', array(null, $parameters));
} }
private function isGoutte4()
{
$client = 'Goutte\Client';
return class_exists($client) && is_a($client, 'Symfony\Component\BrowserKit\HttpBrowser', true);
}
private function isGoutte1() private function isGoutte1()
{ {
$refl = new \ReflectionParameter(array('Goutte\Client', 'setClient'), 0); $refl = new \ReflectionParameter(array('Goutte\Client', 'setClient'), 0);