Security update for permissions_by_term
[yaffs-website] / vendor / behat / mink-extension / src / Behat / MinkExtension / ServiceContainer / Driver / GoutteFactory.php
diff --git a/vendor/behat/mink-extension/src/Behat/MinkExtension/ServiceContainer/Driver/GoutteFactory.php b/vendor/behat/mink-extension/src/Behat/MinkExtension/ServiceContainer/Driver/GoutteFactory.php
new file mode 100644 (file)
index 0000000..2bb3416
--- /dev/null
@@ -0,0 +1,115 @@
+<?php
+
+/*
+ * This file is part of the Behat MinkExtension.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\MinkExtension\ServiceContainer\Driver;
+
+use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
+use Symfony\Component\DependencyInjection\Definition;
+
+/**
+ * @author Christophe Coevoet <stof@notk.org>
+ */
+class GoutteFactory implements DriverFactory
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function getDriverName()
+    {
+        return 'goutte';
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function supportsJavascript()
+    {
+        return false;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function configure(ArrayNodeDefinition $builder)
+    {
+        $builder
+            ->children()
+                ->arrayNode('server_parameters')
+                    ->useAttributeAsKey('key')
+                    ->prototype('variable')->end()
+                ->end()
+                ->arrayNode('guzzle_parameters')
+                    ->useAttributeAsKey('key')
+                    ->prototype('variable')->end()
+                    ->info(
+                        "For Goutte 1.x, these are the second argument of the Guzzle3 client constructor.\n".
+                        'For Goutte 2.x, these are the elements passed in the "defaults" key of the Guzzle4 config.'
+                    )
+                ->end()
+            ->end()
+        ;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function buildDriver(array $config)
+    {
+        if (!class_exists('Behat\Mink\Driver\GoutteDriver')) {
+            throw new \RuntimeException(
+                'Install MinkGoutteDriver in order to use goutte driver.'
+            );
+        }
+
+        if ($this->isGoutte1()) {
+            $guzzleClient = $this->buildGuzzle3Client($config['guzzle_parameters']);
+        } else {
+            $guzzleClient = $this->buildGuzzle4Client($config['guzzle_parameters']);
+        }
+
+        $clientDefinition = new Definition('Behat\Mink\Driver\Goutte\Client', array(
+            $config['server_parameters'],
+        ));
+        $clientDefinition->addMethodCall('setClient', array($guzzleClient));
+
+        return new Definition('Behat\Mink\Driver\GoutteDriver', array(
+            $clientDefinition,
+        ));
+    }
+
+    private function buildGuzzle4Client(array $parameters)
+    {
+        // Force the parameters set by default in Goutte to reproduce its behavior
+        $parameters['allow_redirects'] = false;
+        $parameters['cookies'] = true;
+
+        return new Definition('GuzzleHttp\Client', array($parameters));
+
+    }
+
+    private function buildGuzzle3Client(array $parameters)
+    {
+        // Force the parameters set by default in Goutte to reproduce its behavior
+        $parameters['redirect.disable'] = true;
+
+        return new Definition('Guzzle\Http\Client', array(null, $parameters));
+    }
+
+    private function isGoutte1()
+    {
+        $refl = new \ReflectionParameter(array('Goutte\Client', 'setClient'), 0);
+
+        if ($refl->getClass() && 'Guzzle\Http\ClientInterface' === $refl->getClass()->getName()) {
+            return true;
+        }
+
+        return false;
+    }
+}