refactored extension to support latest changes in Behat edge

This commit is contained in:
everzet
2012-05-11 00:43:11 +02:00
parent 328879371c
commit 641157b050
5 changed files with 160 additions and 162 deletions

View File

@@ -1,145 +0,0 @@
<?php
namespace Behat\MinkExtension;
use Symfony\Component\Config\Definition\Builder\TreeBuilder,
Symfony\Component\Config\Definition\ConfigurationInterface;
/*
* This file is part of the Behat\MinkExtension
*
* (c) Konstantin Kudryashov <ever.zet@gmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
/**
* MinkExtension configuration tree.
*
* @author Konstantin Kudryashov <ever.zet@gmail.com>
*/
class Configuration implements ConfigurationInterface
{
/**
* Returns configuration tree.
*
* @return TreeBuilder
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
return $treeBuilder->root('mink')->
children()->
scalarNode('mink_loader')->
defaultNull()->
end()->
scalarNode('base_url')->
defaultNull()->
end()->
scalarNode('files_path')->
defaultNull()->
end()->
scalarNode('show_cmd')->
defaultNull()->
end()->
scalarNode('show_tmp_dir')->
defaultValue(sys_get_temp_dir())->
end()->
scalarNode('default_session')->
defaultValue('goutte')->
end()->
scalarNode('javascript_session')->
defaultValue('sahi')->
end()->
scalarNode('browser_name')->
defaultValue('firefox')->
end()->
arrayNode('goutte')->
children()->
arrayNode('zend_config')->
useAttributeAsKey('key')->
prototype('variable')->end()->
end()->
arrayNode('server_parameters')->
useAttributeAsKey('key')->
prototype('variable')->end()->
end()->
end()->
end()->
arrayNode('sahi')->
children()->
scalarNode('sid')->
defaultNull()->
end()->
scalarNode('host')->
defaultValue('localhost')->
end()->
scalarNode('port')->
defaultValue(9999)->
end()->
end()->
end()->
arrayNode('zombie')->
children()->
scalarNode('host')->
defaultValue('127.0.0.1')->
end()->
scalarNode('port')->
defaultValue(8124)->
end()->
scalarNode('auto_server')->
defaultValue(true)->
end()->
scalarNode('node_bin')->
defaultValue('node')->
end()->
end()->
end()->
arrayNode('selenium')->
children()->
scalarNode('host')->
defaultValue('127.0.0.1')->
end()->
scalarNode('port')->
defaultValue(4444)->
end()->
scalarNode('browser')->
defaultValue('*%behat.mink.browser_name%')->
end()->
end()->
end()->
arrayNode('selenium2')->
children()->
scalarNode('browser')->
defaultValue('%behat.mink.browser_name%')->
end()->
arrayNode('capabilities')->
children()->
scalarNode('browserName')->
defaultValue('firefox')->
end()->
scalarNode('version')->
defaultValue(8)->
end()->
scalarNode('platform')->
defaultValue('ANY')->
end()->
scalarNode('browserVersion')->
defaultValue(8)->
end()->
scalarNode('browser')->
defaultValue('firefox')->
end()->
end()->
end()->
scalarNode('wd_host')->
defaultValue('http://localhost:4444/wd/hub')->
end()->
end()->
end()->
end()->
end();
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace Behat\MinkExtension\Context\ClassGuesser;
use Behat\Behat\Context\ClassGuesser\ClassGuesserInterface;
/**
* Mink context class guesser.
* Provides Mink context class if no other class found.
*/
class MinkContextClassGuesser implements ClassGuesserInterface
{
/**
* Tries to guess context classname.
*
* @return string
*/
public function guess()
{
return 'Behat\\MinkExtension\\Context\\MinkContext';
}
}

View File

@@ -1,12 +1,14 @@
<?php <?php
namespace Behat\MinkExtension\Context; namespace Behat\MinkExtension\Context\Initializer;
use Behat\Behat\Context\ContextInitializerInterface, use Behat\Behat\Context\Initializer\InitializerInterface,
Behat\Behat\Context\ContextInterface; Behat\Behat\Context\ContextInterface;
use Behat\Mink\Mink; use Behat\Mink\Mink;
use Behat\MinkExtension\Context\MinkAwareContextInterface;
/* /*
* This file is part of the Behat\MinkExtension. * This file is part of the Behat\MinkExtension.
* (c) Konstantin Kudryashov <ever.zet@gmail.com> * (c) Konstantin Kudryashov <ever.zet@gmail.com>
@@ -21,7 +23,7 @@ use Behat\Mink\Mink;
* *
* @author Konstantin Kudryashov <ever.zet@gmail.com> * @author Konstantin Kudryashov <ever.zet@gmail.com>
*/ */
class MinkAwareContextInitializer implements ContextInitializerInterface class MinkAwareInitializer implements InitializerInterface
{ {
private $mink; private $mink;
private $parameters; private $parameters;

View File

@@ -2,8 +2,8 @@
namespace Behat\MinkExtension; namespace Behat\MinkExtension;
use Symfony\Component\Config\Definition\Processor, use Symfony\Component\Config\FileLocator,
Symfony\Component\Config\FileLocator, Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition,
Symfony\Component\DependencyInjection\ContainerBuilder, Symfony\Component\DependencyInjection\ContainerBuilder,
Symfony\Component\DependencyInjection\Loader\XmlFileLoader; Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
@@ -33,18 +33,14 @@ class Extension implements ExtensionInterface
*/ */
public function load(array $config, ContainerBuilder $container) public function load(array $config, ContainerBuilder $container)
{ {
$processor = new Processor();
$configuration = new Configuration();
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/services')); $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/services'));
$config = $processor->processConfiguration($configuration, array($config));
$loader->load('mink.xml'); $loader->load('mink.xml');
if (isset($config['mink_loader'])) { if (isset($config['mink_loader'])) {
$configPath = $container->getParameter('behat.paths.config'); $basePath = $container->getParameter('behat.paths.base');
if (file_exists($configPath.DIRECTORY_SEPARATOR.$config['mink_loader'])) { if (file_exists($basePath.DIRECTORY_SEPARATOR.$config['mink_loader'])) {
require($configPath.DIRECTORY_SEPARATOR.$config['mink_loader']); require($basePath.DIRECTORY_SEPARATOR.$config['mink_loader']);
} else { } else {
require($config['mink_loader']); require($config['mink_loader']);
} }
@@ -83,6 +79,126 @@ class Extension implements ExtensionInterface
$container->setParameter('mink.paths.lib', $minkLibPath); $container->setParameter('mink.paths.lib', $minkLibPath);
} }
/**
* Setups configuration for current extension.
*
* @param ArrayNodeDefinition $builder
*/
public function getConfig(ArrayNodeDefinition $builder)
{
$builder->
children()->
scalarNode('mink_loader')->
defaultNull()->
end()->
scalarNode('base_url')->
defaultNull()->
end()->
scalarNode('files_path')->
defaultNull()->
end()->
scalarNode('show_cmd')->
defaultNull()->
end()->
scalarNode('show_tmp_dir')->
defaultValue(sys_get_temp_dir())->
end()->
scalarNode('default_session')->
defaultValue('goutte')->
end()->
scalarNode('javascript_session')->
defaultValue('selenium2')->
end()->
scalarNode('browser_name')->
defaultValue('firefox')->
end()->
arrayNode('goutte')->
children()->
arrayNode('zend_config')->
useAttributeAsKey('key')->
prototype('variable')->end()->
end()->
arrayNode('server_parameters')->
useAttributeAsKey('key')->
prototype('variable')->end()->
end()->
end()->
end()->
arrayNode('sahi')->
children()->
scalarNode('sid')->
defaultNull()->
end()->
scalarNode('host')->
defaultValue('localhost')->
end()->
scalarNode('port')->
defaultValue(9999)->
end()->
end()->
end()->
arrayNode('zombie')->
children()->
scalarNode('host')->
defaultValue('127.0.0.1')->
end()->
scalarNode('port')->
defaultValue(8124)->
end()->
scalarNode('auto_server')->
defaultValue(true)->
end()->
scalarNode('node_bin')->
defaultValue('node')->
end()->
end()->
end()->
arrayNode('selenium')->
children()->
scalarNode('host')->
defaultValue('127.0.0.1')->
end()->
scalarNode('port')->
defaultValue(4444)->
end()->
scalarNode('browser')->
defaultValue('*%behat.mink.browser_name%')->
end()->
end()->
end()->
arrayNode('selenium2')->
children()->
scalarNode('browser')->
defaultValue('%behat.mink.browser_name%')->
end()->
arrayNode('capabilities')->
children()->
scalarNode('browserName')->
defaultValue('firefox')->
end()->
scalarNode('version')->
defaultValue(8)->
end()->
scalarNode('platform')->
defaultValue('ANY')->
end()->
scalarNode('browserVersion')->
defaultValue(8)->
end()->
scalarNode('browser')->
defaultValue('firefox')->
end()->
end()->
end()->
scalarNode('wd_host')->
defaultValue('http://localhost:4444/wd/hub')->
end()->
end()->
end()->
end()->
end();
}
/** /**
* Returns compiler passes used by mink extension. * Returns compiler passes used by mink extension.
* *

View File

@@ -9,10 +9,9 @@
<parameter key="behat.mink.class">Behat\Mink\Mink</parameter> <parameter key="behat.mink.class">Behat\Mink\Mink</parameter>
<parameter key="behat.mink.session.class">Behat\Mink\Session</parameter> <parameter key="behat.mink.session.class">Behat\Mink\Session</parameter>
<parameter key="behat.mink.selectors_handler.class">Behat\Mink\Selector\SelectorsHandler</parameter> <parameter key="behat.mink.selectors_handler.class">Behat\Mink\Selector\SelectorsHandler</parameter>
<parameter key="behat.test_client.class">Behat\MinkBundle\Client</parameter>
<parameter key="behat.mink.default_session">goutte</parameter> <parameter key="behat.mink.default_session">goutte</parameter>
<parameter key="behat.mink.javascript_session">sahi</parameter> <parameter key="behat.mink.javascript_session">selenium2</parameter>
<parameter key="behat.mink.base_url">null</parameter> <parameter key="behat.mink.base_url">null</parameter>
<parameter key="behat.mink.show_cmd">null</parameter> <parameter key="behat.mink.show_cmd">null</parameter>
<parameter key="behat.mink.show_tmp_dir">null</parameter> <parameter key="behat.mink.show_tmp_dir">null</parameter>
@@ -33,10 +32,14 @@
<tag name="behat.mink.selector" alias="named" /> <tag name="behat.mink.selector" alias="named" />
</service> </service>
<service id="behat.mink.context_initializer" class="Behat\MinkExtension\Context\MinkAwareContextInitializer"> <service id="behat.mink.context.initializer" class="Behat\MinkExtension\Context\Initializer\MinkAwareInitializer">
<argument type="service" id="behat.mink" /> <argument type="service" id="behat.mink" />
<argument>%behat.mink.parameters%</argument> <argument>%behat.mink.parameters%</argument>
<tag name="behat.context_initializer" /> <tag name="behat.context.initializer" />
</service>
<service id="behat.mink.context.class_guesser" class="Behat\MinkExtension\Context\ClassGuesser\MinkContextClassGuesser">
<tag name="behat.context.class_guesser" priority="-1" />
</service> </service>
</services> </services>