Test Failed
Push — feature/improve ( 6602c4...76db67 )
by Yo
02:23 queued 22s
created

Behat3SymfonyExtension::load()   B

Complexity

Conditions 3
Paths 4

Size

Total Lines 46
Code Lines 34

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 41
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 46
ccs 41
cts 41
cp 1
rs 8.9411
c 0
b 0
f 0
cc 3
eloc 34
nc 4
nop 2
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\Context\Initializer\KernelHandlerAwareInitializer;
11
use Yoanm\Behat3SymfonyExtension\Context\Initializer\LoggerAwareInitializer;
12
use Yoanm\Behat3SymfonyExtension\Handler\KernelHandler;
13
use Yoanm\Behat3SymfonyExtension\ServiceContainer\SubExtension\KernelSubExtension;
14
use Yoanm\Behat3SymfonyExtension\ServiceContainer\SubExtension\LoggerSubExtension;
15
use Yoanm\Behat3SymfonyExtension\Subscriber\RebootKernelSubscriber;
16
17
class Behat3SymfonyExtension extends AbstractExtension
18
{
19
    /** @var Extension[] */
20
    private $subExtensionList = [];
21
22
    public function __construct(Extension $kernelSubExtension = null, Extension $loggerSubExtension = null)
23 5
    {
24
        $this->subExtensionList[] = $kernelSubExtension ?: new KernelSubExtension();
25 5
        $this->subExtensionList[] = $loggerSubExtension ?: new LoggerSubExtension();
26 5
    }
27 5
28
    /**
29
     * {@inheritdoc}
30
     */
31
    public function getConfigKey()
32 1
    {
33
        return 'behat3_symfony';
34 1
    }
35
36
    // @codeCoverageIgnoreStart
37
    // Not possible to cover this because ExtensionManager is a final class
38
    /**
39
     * {@inheritdoc}
40
     */
41
    public function initialize(ExtensionManager $extensionManager)
42
    {
43
        foreach ($this->subExtensionList as $subExtension) {
44
            $subExtension->initialize($extensionManager);
45
        }
46
    }
47
    // @codeCoverageIgnoreEnd
48
49
    /**
50
     * {@inheritdoc}
51
     */
52
    public function configure(ArrayNodeDefinition $builder)
53 1
    {
54
        foreach ($this->subExtensionList as $subExtension) {
55 1
            $subExtension->configure(
56 1
                $builder->children()
57 1
                    ->arrayNode($subExtension->getConfigKey())
58 1
            );
59 1
        }
60 1
    }
61 1
62
    /**
63
     * {@inheritdoc}
64
     */
65
    public function load(ContainerBuilder $container, array $config)
66 2
    {
67
        foreach ($this->subExtensionList as $subExtension) {
68 2
            $subExtension->load($container, $config);
69 2
        }
70 2
        $this->createService(
71 2
            $container,
72 2
            'handler.kernel',
73 2
            KernelHandler::class,
74 2
            [
75
                new Reference('event_dispatcher'),
76 2
                new Reference(self::KERNEL_SERVICE_ID),
77 2
            ]
78
        );
79 2
        $this->createService(
80 2
            $container,
81 2
            'initializer.kernel_aware',
82 2
            KernelHandlerAwareInitializer::class,
83 2
            [new Reference($this->buildContainerId('handler.kernel'))],
84 2
            ['context.initializer']
85 2
        );
86 2
        $this->createService(
87 2
            $container,
88 2
            'initializer.logger_aware',
89 2
            LoggerAwareInitializer::class,
90 2
            [new Reference($this->buildContainerId('logger'))],
91 2
            ['context.initializer']
92 2
        );
93 2
        $this->createService(
94 2
            $container,
95 2
            'initializer.behat_subscriber',
96 2
            BehatContextSubscriberInitializer::class,
97 2
            [new Reference('event_dispatcher')],
98 2
            ['context.initializer']
99 2
        );
100 2
101 2
        if (true === $config['kernel']['reboot']) {
102 2
            $this->createService(
103 2
                $container,
104 2
                'subscriber.reboot_kernel',
105 2
                RebootKernelSubscriber::class,
106 2
                [new Reference($this->buildContainerId('handler.kernel'))],
107 2
                ['event_dispatcher.subscriber']
108
            );
109 2
        }
110 1
    }
111 1
112 1
    /**
113 1
     * {@inheritdoc}
114 1
     */
115 1
    public function process(ContainerBuilder $container)
116 1
    {
117 1
        foreach ($this->subExtensionList as $subExtension) {
118 2
            $subExtension->process($container);
119
        }
120
    }
121
}
122