Security update for permissions_by_term
[yaffs-website] / vendor / behat / mink-extension / src / Behat / MinkExtension / ServiceContainer / Driver / Selenium2Factory.php
1 <?php
2
3 /*
4  * This file is part of the Behat MinkExtension.
5  * (c) Konstantin Kudryashov <ever.zet@gmail.com>
6  *
7  * For the full copyright and license information, please view the LICENSE
8  * file that was distributed with this source code.
9  */
10
11 namespace Behat\MinkExtension\ServiceContainer\Driver;
12
13 use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
14 use Symfony\Component\DependencyInjection\Definition;
15
16 class Selenium2Factory implements DriverFactory
17 {
18     /**
19      * {@inheritdoc}
20      */
21     public function getDriverName()
22     {
23         return 'selenium2';
24     }
25
26     /**
27      * {@inheritdoc}
28      */
29     public function supportsJavascript()
30     {
31         return true;
32     }
33
34     /**
35      * {@inheritdoc}
36      */
37     public function configure(ArrayNodeDefinition $builder)
38     {
39         $builder
40             ->children()
41                 ->scalarNode('browser')->defaultValue('%mink.browser_name%')->end()
42                 ->append($this->getCapabilitiesNode())
43                 ->scalarNode('wd_host')->defaultValue('http://localhost:4444/wd/hub')->end()
44             ->end()
45         ;
46     }
47
48     /**
49      * {@inheritdoc}
50      */
51     public function buildDriver(array $config)
52     {
53         if (!class_exists('Behat\Mink\Driver\Selenium2Driver')) {
54             throw new \RuntimeException(sprintf(
55                 'Install MinkSelenium2Driver in order to use %s driver.',
56                 $this->getDriverName()
57             ));
58         }
59
60         $extraCapabilities = $config['capabilities']['extra_capabilities'];
61         unset($config['capabilities']['extra_capabilities']);
62
63         if (getenv('TRAVIS_JOB_NUMBER')) {
64             $guessedCapabilities = array(
65                 'tunnel-identifier' => getenv('TRAVIS_JOB_NUMBER'),
66                 'build' => getenv('TRAVIS_BUILD_NUMBER'),
67                 'tags' => array('Travis-CI', 'PHP '.phpversion()),
68             );
69         } elseif (getenv('JENKINS_HOME')) {
70             $guessedCapabilities = array(
71                 'tunnel-identifier' => getenv('JOB_NAME'),
72                 'build' => getenv('BUILD_NUMBER'),
73                 'tags' => array('Jenkins', 'PHP '.phpversion(), getenv('BUILD_TAG')),
74             );
75         } else {
76             $guessedCapabilities = array(
77                 'tags' => array(php_uname('n'), 'PHP '.phpversion()),
78             );
79         }
80
81         return new Definition('Behat\Mink\Driver\Selenium2Driver', array(
82             $config['browser'],
83             array_replace($guessedCapabilities, $extraCapabilities, $config['capabilities']),
84             $config['wd_host'],
85         ));
86     }
87
88     protected function getCapabilitiesNode()
89     {
90         $node = new ArrayNodeDefinition('capabilities');
91
92         $node
93             ->addDefaultsIfNotSet()
94             ->normalizeKeys(false)
95             ->children()
96                 ->scalarNode('browserName')->end()
97                 ->scalarNode('version')->end()
98                 ->scalarNode('platform')->end()
99                 ->scalarNode('browserVersion')->end()
100                 ->scalarNode('browser')->defaultValue('firefox')->end()
101                 ->booleanNode('ignoreZoomSetting')->defaultFalse()->end()
102                 ->scalarNode('name')->defaultValue('Behat feature suite')->end()
103                 ->scalarNode('deviceOrientation')->end()
104                 ->scalarNode('deviceType')->end()
105                 ->booleanNode('javascriptEnabled')->end()
106                 ->booleanNode('databaseEnabled')->end()
107                 ->booleanNode('locationContextEnabled')->end()
108                 ->booleanNode('applicationCacheEnabled')->end()
109                 ->booleanNode('browserConnectionEnabled')->end()
110                 ->booleanNode('webStorageEnabled')->end()
111                 ->booleanNode('rotatable')->end()
112                 ->booleanNode('acceptSslCerts')->end()
113                 ->booleanNode('nativeEvents')->end()
114                 ->arrayNode('proxy')
115                     ->children()
116                         ->scalarNode('proxyType')->end()
117                         ->scalarNode('proxyAuthconfigUrl')->end()
118                         ->scalarNode('ftpProxy')->end()
119                         ->scalarNode('httpProxy')->end()
120                         ->scalarNode('sslProxy')->end()
121                     ->end()
122                     ->validate()
123                         ->ifTrue(function ($v) {
124                             return empty($v);
125                         })
126                         ->thenUnset()
127                     ->end()
128                 ->end()
129                 ->arrayNode('firefox')
130                     ->children()
131                         ->scalarNode('profile')
132                             ->validate()
133                                 ->ifTrue(function ($v) {
134                                     return !file_exists($v);
135                                 })
136                                 ->thenInvalid('Cannot find profile zip file %s')
137                             ->end()
138                         ->end()
139                         ->scalarNode('binary')->end()
140                     ->end()
141                 ->end()
142                 ->arrayNode('chrome')
143                     ->children()
144                         ->arrayNode('switches')->prototype('scalar')->end()->end()
145                         ->scalarNode('binary')->end()
146                         ->arrayNode('extensions')->prototype('scalar')->end()->end()
147                     ->end()
148                 ->end()
149                 ->arrayNode('extra_capabilities')
150                     ->info('Custom capabilities merged with the known ones')
151                     ->normalizeKeys(false)
152                     ->useAttributeAsKey('name')
153                     ->prototype('variable')->end()
154                 ->end()
155             ->end();
156
157         return $node;
158     }
159 }