Completed
Push — master ( 17fc80...f1e694 )
by Yo
02:15
created

Behat3SymfonyExtension::load()   B

Complexity

Conditions 3
Paths 4

Size

Total Lines 46
Code Lines 34

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 42
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 46
ccs 42
cts 42
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 5
    public function __construct(Extension $kernelSubExtension = null, Extension $loggerSubExtension = null)
23
    {
24 5
        $this->subExtensionList[] = $kernelSubExtension ?: new KernelSubExtension();
25 5
        $this->subExtensionList[] = $loggerSubExtension ?: new LoggerSubExtension();
26 5
    }
27
28
    /**
29
     * {@inheritdoc}
30
     */
31 1
    public function getConfigKey()
32
    {
33 1
        return 'behat3_symfony';
34
    }
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 1
    public function configure(ArrayNodeDefinition $builder)
53
    {
54 1
        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
62
    /**
63
     * {@inheritdoc}
64
     */
65 2
    public function load(ContainerBuilder $container, array $config)
66
    {
67 2
        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
            [
75 2
                new Reference('event_dispatcher'),
76 2
                new Reference(self::KERNEL_SERVICE_ID),
77
            ]
78 2
        );
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
101 2
        if (true === $config['kernel']['reboot']) {
102 1
            $this->createService(
103 1
                $container,
104 1
                'subscriber.reboot_kernel',
105 1
                RebootKernelSubscriber::class,
106 1
                [new Reference($this->buildContainerId('handler.kernel'))],
107 1
                ['event_dispatcher.subscriber']
108 1
            );
109 1
        }
110 2
    }
111
112
    /**
113
     * {@inheritdoc}
114
     */
115 1
    public function process(ContainerBuilder $container)
116
    {
117 1
        foreach ($this->subExtensionList as $subExtension) {
118 1
            $subExtension->process($container);
119 1
        }
120 1
    }
121
}
122