SymfonyExtension v2.0: proof of concept

This commit is contained in:
Kamil Kokot
2018-12-19 16:45:37 +01:00
parent 3ef0d0dcf3
commit 50fc509fb3
12 changed files with 453 additions and 289 deletions

View File

@@ -0,0 +1,62 @@
<?php
declare(strict_types=1);
namespace FriendsOfBehat\SymfonyExtension\Bundle\DependencyInjection;
use Behat\Behat\Context\Context;
use Behat\Mink\Mink;
use Behat\Mink\Session;
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->registerBehatContainer($container);
$this->provideMinkIntegration($container);
$container
->registerForAutoconfiguration(Context::class)
->addTag('fob.context')
;
}
public function process(ContainerBuilder $container): void
{
foreach ($container->findTaggedServiceIds('fob.context') as $serviceId => $attributes) {
$container->findDefinition($serviceId)->setPublic(true);
}
}
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
{
$minkDefinition = new Definition(Mink::class, ['mink']);
$minkDefinition->setPublic(true);
$minkDefinition->setFactory([new Reference('behat.service_container'), 'get']);
$container->setDefinition('behat.mink', $minkDefinition);
$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');
}
}

View File

@@ -0,0 +1,11 @@
<?php
declare(strict_types=1);
namespace FriendsOfBehat\SymfonyExtension\Bundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
final class FriendsOfBehatSymfonyExtensionBundle extends Bundle
{
}