Test Failed
Push — feature/improve ( 4f0633...4583fc )
by Yo
02:10
created

Behat3SymfonyExtension::configure()   B

Complexity

Conditions 3
Paths 2

Size

Total Lines 26
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 20
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 26
rs 8.8571
c 0
b 0
f 0
ccs 20
cts 20
cp 1
cc 3
eloc 18
nc 2
nop 1
crap 3
1
<?php
2
namespace Yoanm\Behat3SymfonyExtension\ServiceContainer;
3
4
use Behat\Testwork\ServiceContainer\Extension;
5
use Behat\Testwork\ServiceContainer\ExtensionManager;
6
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
7
use Symfony\Component\DependencyInjection\ContainerBuilder;
8
use Symfony\Component\DependencyInjection\Reference;
9
use Yoanm\Behat3SymfonyExtension\Context\Initializer\BehatContextSubscriberInitializer;
10
use Yoanm\Behat3SymfonyExtension\ServiceContainer\SubExtension\KernelSubExtension;
11
use Yoanm\Behat3SymfonyExtension\ServiceContainer\SubExtension\LoggerSubExtension;
12
13
class Behat3SymfonyExtension extends AbstractExtension
14
{
15
    /** @var Extension[] */
16
    private $subExtensionList = [];
17
18 5
    public function __construct(Extension $kernelSubExtension = null, Extension $loggerSubExtension = null)
19
    {
20 5
        $this->subExtensionList[] = $kernelSubExtension ?: new KernelSubExtension();
21 5
        $this->subExtensionList[] = $loggerSubExtension ?: new LoggerSubExtension();
22 5
    }
23
24
    /**
25
     * {@inheritdoc}
26
     */
27 1
    public function getConfigKey()
28
    {
29 1
        return 'behat3_symfony';
30
    }
31
32
    // @codeCoverageIgnoreStart
33
    // Not possible to cover this because ExtensionManager is a final class
34
    /**
35
     * {@inheritdoc}
36
     */
37
    public function initialize(ExtensionManager $extensionManager)
38
    {
39
        foreach ($this->subExtensionList as $subExtension) {
40
            $subExtension->initialize($extensionManager);
41
        }
42
    }
43
    // @codeCoverageIgnoreEnd
44
45
    /**
46
     * {@inheritdoc}
47
     */
48 1
    public function configure(ArrayNodeDefinition $builder)
49
    {
50 1
        $builder->children()
51 1
            ->booleanNode('debug_mode')
52 1
                ->beforeNormalization()
53 1
                    ->always()
54 1
                    ->then(function ($value) {
55 1
                        $filtered = filter_var(
56 1
                            $value,
57
                            FILTER_VALIDATE_BOOLEAN,
58
                            FILTER_NULL_ON_FAILURE
59
                        );
60
61 2
                        return (null === $filtered) ? (bool) $value : $filtered;
62
                    })
63 2
                    ->end()
64 2
                ->defaultFalse()
65 2
            ->end()
66 2
            ;
67 2
        foreach ($this->subExtensionList as $subExtension) {
68 2
            $subExtension->configure(
69 2
                $builder->children()
70 2
                    ->arrayNode($subExtension->getConfigKey())
71 2
            );
72 2
        }
73 2
    }
74
75
    /**
76
     * {@inheritdoc}
77
     */
78 1
    public function load(ContainerBuilder $container, array $config)
79
    {
80 1
        $container->setParameter(
81 1
            '%'.$this->buildContainerId('debug_mode').'%',
82 1
            $container['debug_mode']
83 1
        );
84
        foreach ($this->subExtensionList as $subExtension) {
85
            $subExtension->load($container, $config);
86
        }
87
        $this->createService(
88
            $container,
89
            'initializer.behat_subscriber',
90
            BehatContextSubscriberInitializer::class,
91
            [new Reference('event_dispatcher')],
92
            ['context.initializer']
93
        );
94
    }
95
96
    /**
97
     * {@inheritdoc}
98
     */
99
    public function process(ContainerBuilder $container)
100
    {
101
        foreach ($this->subExtensionList as $subExtension) {
102
            $subExtension->process($container);
103
        }
104
    }
105
}
106