Skip to content
This repository was archived by the owner on May 7, 2025. It is now read-only.

Commit a44f95e

Browse files
committed
Merge branch 'wunit' (PR #8)
The pull request has been rebased before merging it. Closes #8
2 parents 2ce4679 + af7ecad commit a44f95e

File tree

6 files changed

+80
-9
lines changed

6 files changed

+80
-9
lines changed

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ default:
2424
framework_script: ../../framework/yii.php
2525
config_script: ../config/test.php
2626
mink_driver: true
27-
wunit: ~
2827
```
2928
3029
Installation

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
"require": {
1616
"php": ">=5.3.2",
17-
"behat/behat": ">=2.4.0,<2.4.x-dev"
17+
"behat/behat": ">=2.4.1,<2.4.x-dev"
1818
},
1919

2020
"autoload": {

src/Behat/YiiExtension/Context/Initializer/YiiAwareInitializer.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class YiiAwareInitializer implements InitializerInterface
2828
/**
2929
* Initializes initializer.
3030
*/
31-
public function __construct($frameworkScript, $configScript)
31+
public function __construct($frameworkScript, $configScript, $webApplicationFactory)
3232
{
3333
defined('YII_DEBUG') or define('YII_DEBUG', true);
3434
require_once($frameworkScript);
@@ -38,7 +38,7 @@ public function __construct($frameworkScript, $configScript)
3838
\YiiBase::$enableIncludePath = false;
3939

4040
// create the application and remember it
41-
$this->yii = \Yii::createWebApplication($configScript);
41+
$this->yii = $webApplicationFactory::createWebApplication($configScript);
4242
}
4343

4444
/**

src/Behat/YiiExtension/Extension.php

Lines changed: 52 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Behat\YiiExtension;
44

55
use Symfony\Component\Config\FileLocator,
6+
Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition,
67
Symfony\Component\DependencyInjection\ContainerBuilder,
78
Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
89

@@ -34,27 +35,73 @@ public function load(array $config, ContainerBuilder $container)
3435
{
3536
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/services'));
3637
$loader->load('yii.xml');
37-
$configPath = $container->getParameter('behat.paths.base');
38+
$basePath = $container->getParameter('behat.paths.base');
39+
40+
// starting from Behat 2.4.1, we can check for activated extensions
41+
$extensions = $container->hasParameter('behat.extension.classes')
42+
? $container->getParameter('behat.extension.classes')
43+
: array();
3844

3945
if (!isset($config['framework_script'])) {
4046
throw new \InvalidArgumentException(
4147
'Specify `framework_script` parameter for yii_extension.'
4248
);
4349
}
44-
if (file_exists($cfg = $configPath.DIRECTORY_SEPARATOR.$config['framework_script'])) {
50+
if (file_exists($cfg = $basePath.DIRECTORY_SEPARATOR.$config['framework_script'])) {
4551
$config['framework_script'] = $cfg;
4652
}
53+
$container->setParameter('behat.yii_extension.framework_script', $config['framework_script']);
4754

4855
if (!isset($config['config_script'])) {
4956
throw new \InvalidArgumentException(
5057
'Specify `config_script` parameter for yii_extension.'
5158
);
5259
}
53-
if (file_exists($cfg = $configPath.DIRECTORY_SEPARATOR.$config['config_script'])) {
60+
if (file_exists($cfg = $basePath.DIRECTORY_SEPARATOR.$config['config_script'])) {
5461
$config['config_script'] = $cfg;
5562
}
56-
57-
$container->setParameter('behat.yii_extension.framework_script', $config['framework_script']);
5863
$container->setParameter('behat.yii_extension.config_script', $config['config_script']);
64+
65+
if ($config['mink_driver']) {
66+
if (!class_exists('Behat\\Mink\\Driver\\WUnitDriver')) {
67+
throw new \RuntimeException(
68+
'Install WUnitDriver in order to activate wunit session.'
69+
);
70+
}
71+
72+
$loader->load('sessions/wunit.xml');
73+
} elseif (in_array('Behat\\MinkExtension\\Extension', $extensions) && class_exists('Behat\\Mink\\Driver\\WUnitDriver')) {
74+
$loader->load('sessions/wunit.xml');
75+
}
76+
}
77+
78+
/**
79+
* Setups configuration for current extension.
80+
*
81+
* @param ArrayNodeDefinition $builder
82+
*/
83+
public function getConfig(ArrayNodeDefinition $builder)
84+
{
85+
$boolFilter = function ($v) {
86+
$filtered = filter_var($v, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
87+
return (null === $filtered) ? $v : $filtered;
88+
};
89+
90+
$builder->
91+
children()->
92+
scalarNode('framework_script')->
93+
isRequired()->
94+
end()->
95+
scalarNode('config_script')->
96+
isRequired()->
97+
end()->
98+
booleanNode('mink_driver')->
99+
beforeNormalization()->
100+
ifString()->then($boolFilter)->
101+
end()->
102+
defaultFalse()->
103+
end()->
104+
end()
105+
;
59106
}
60107
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0" ?>
2+
<container xmlns="http://symfony.com/schema/dic/services"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
5+
<parameters>
6+
7+
<parameter key="behat.mink.driver.wunit.class">Behat\Mink\Driver\WUnitDriver</parameter>
8+
<parameter key="behat.yii_extension.web_application_factory">\WUnit\WUnit</parameter>
9+
10+
</parameters>
11+
<services>
12+
13+
<service id="behat.mink.session.wunit" class="%behat.mink.session.class%">
14+
<argument type="service">
15+
<service class="%behat.mink.driver.wunit.class%">
16+
</service>
17+
</argument>
18+
<argument type="service" id="behat.mink.selector.handler" />
19+
<tag name="behat.mink.session" alias="wunit" />
20+
</service>
21+
22+
</services>
23+
</container>

src/Behat/YiiExtension/services/yii.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@
77
<parameter key="behat.yii_extension.context.initializer.class">Behat\YiiExtension\Context\Initializer\YiiAwareInitializer</parameter>
88
<parameter key="behat.yii_extension.framework_script"></parameter>
99
<parameter key="behat.yii_extension.config_script"></parameter>
10+
<parameter key="behat.yii_extension.web_application_factory">\Yii</parameter>
1011

1112
</parameters>
1213
<services>
1314

1415
<service id="behat.yii_extension.context.initializer" class="%behat.yii_extension.context.initializer.class%">
1516
<argument>%behat.yii_extension.framework_script%</argument>
1617
<argument>%behat.yii_extension.config_script%</argument>
18+
<argument>%behat.yii_extension.web_application_factory%</argument>
1719
<tag name="behat.context.initializer" />
1820
</service>
1921

0 commit comments

Comments
 (0)