-
Notifications
You must be signed in to change notification settings - Fork 60
/
FriendsOfBehatSymfonyExtensionExtension.php
86 lines (70 loc) · 3.47 KB
/
FriendsOfBehatSymfonyExtensionExtension.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php
declare(strict_types=1);
namespace FriendsOfBehat\SymfonyExtension\Bundle\DependencyInjection;
use Behat\Behat\Context\Context;
use Behat\Mink\Mink;
use Behat\Mink\Session;
use FriendsOfBehat\SymfonyExtension\Mink\MinkParameters;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
final class FriendsOfBehatSymfonyExtensionExtension extends Extension implements CompilerPassInterface
{
public function load(array $configs, ContainerBuilder $container): void
{
$this->provideMinkIntegration($container);
$this->registerBehatContainer($container);
$container->registerForAutoconfiguration(Context::class)->addTag('fob.context');
}
public function process(ContainerBuilder $container): void
{
foreach ($container->findTaggedServiceIds('fob.context') as $serviceId => $attributes) {
$serviceDefinition = $container->findDefinition($serviceId);
$serviceDefinition->setPublic(true);
$serviceDefinition->clearTag('fob.context');
}
}
private function registerBehatContainer(ContainerBuilder $container): void
{
$behatServiceContainerDefinition = new Definition(ContainerInterface::class);
$behatServiceContainerDefinition->setPublic(true);
$behatServiceContainerDefinition->setSynthetic(true);
$container->setDefinition('behat.service_container', $behatServiceContainerDefinition);
}
private function provideMinkIntegration(ContainerBuilder $container): void
{
$this->registerMink($container);
$this->registerMinkDefaultSession($container);
$this->registerMinkParameters($container);
}
private function registerMink(ContainerBuilder $container): void
{
$minkDefinition = new Definition(Mink::class, ['fob_symfony.mink']);
$minkDefinition->setPublic(true);
$minkDefinition->setLazy(true);
$minkDefinition->setFactory([new Reference('behat.service_container'), 'get']);
$container->setDefinition('behat.mink', $minkDefinition);
$container->setAlias(Mink::class, 'behat.mink');
}
private function registerMinkDefaultSession(ContainerBuilder $container): void
{
$minkDefaultSessionDefinition = new Definition(Session::class);
$minkDefaultSessionDefinition->setPublic(true);
$minkDefaultSessionDefinition->setLazy(true);
$minkDefaultSessionDefinition->setFactory([new Reference('behat.mink'), 'getSession']);
$container->setDefinition('behat.mink.default_session', $minkDefaultSessionDefinition);
$container->setAlias(Session::class, 'behat.mink.default_session');
}
private function registerMinkParameters(ContainerBuilder $container): void
{
$minkParametersDefinition = new Definition(MinkParameters::class, ['fob_symfony.mink.parameters']);
$minkParametersDefinition->setPublic(true);
$minkParametersDefinition->setLazy(true);
$minkParametersDefinition->setFactory([new Reference('behat.service_container'), 'get']);
$container->setDefinition('behat.mink.parameters', $minkParametersDefinition);
$container->setAlias(MinkParameters::class, 'behat.mink.parameters');
}
}