Integrate with CrossContainerExtension

This commit is contained in:
Kamil Kokot
2016-11-03 13:29:59 +01:00
parent 62f71d7a97
commit 0681e81df4
2 changed files with 69 additions and 0 deletions

View File

@@ -28,3 +28,31 @@ Feature: Not crashing Behat
And a feature file with passing scenario And a feature file with passing scenario
When I run Behat When I run Behat
Then it should pass Then it should pass
Scenario: Not crashing Behat with CrossContainerExtension
Given a Behat configuration containing:
"""
default:
extensions:
FriendsOfBehat\SymfonyExtension:
kernel:
bootstrap: ~
FriendsOfBehat\CrossContainerExtension: ~
"""
And a file "app/AppKernel.php" containing:
"""
<?php
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;
class AppKernel extends Kernel
{
public function registerBundles() { return []; }
public function registerContainerConfiguration(LoaderInterface $loader) {}
}
"""
And a feature file with passing scenario
When I run Behat
Then it should pass

View File

@@ -15,9 +15,13 @@ use Behat\MinkExtension\ServiceContainer\MinkExtension;
use Behat\Testwork\EventDispatcher\ServiceContainer\EventDispatcherExtension; use Behat\Testwork\EventDispatcher\ServiceContainer\EventDispatcherExtension;
use Behat\Testwork\ServiceContainer\Extension; use Behat\Testwork\ServiceContainer\Extension;
use Behat\Testwork\ServiceContainer\ExtensionManager; use Behat\Testwork\ServiceContainer\ExtensionManager;
use FriendsOfBehat\CrossContainerExtension\CrossContainerProcessor;
use FriendsOfBehat\CrossContainerExtension\KernelBasedContainerAccessor;
use FriendsOfBehat\CrossContainerExtension\ServiceContainer\CrossContainerExtension;
use FriendsOfBehat\SymfonyExtension\Driver\Factory\SymfonyDriverFactory; use FriendsOfBehat\SymfonyExtension\Driver\Factory\SymfonyDriverFactory;
use FriendsOfBehat\SymfonyExtension\Listener\KernelRebooter; use FriendsOfBehat\SymfonyExtension\Listener\KernelRebooter;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\Container; use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Definition;
@@ -55,6 +59,11 @@ final class SymfonyExtension implements Extension
*/ */
const SHARED_KERNEL_CONTAINER_ID = 'sylius_symfony_extension.shared_kernel.container'; const SHARED_KERNEL_CONTAINER_ID = 'sylius_symfony_extension.shared_kernel.container';
/**
* @var CrossContainerProcessor|null
*/
private $crossContainerProcessor;
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
@@ -69,6 +78,7 @@ final class SymfonyExtension implements Extension
public function initialize(ExtensionManager $extensionManager) public function initialize(ExtensionManager $extensionManager)
{ {
$this->registerSymfonyDriverFactory($extensionManager); $this->registerSymfonyDriverFactory($extensionManager);
$this->initializeCrossContainerProcessor($extensionManager);
} }
/** /**
@@ -104,6 +114,7 @@ final class SymfonyExtension implements Extension
$this->loadSharedKernelContainer($container); $this->loadSharedKernelContainer($container);
$this->loadKernelRebooter($container); $this->loadKernelRebooter($container);
$this->declareSymfonyContainers($container);
} }
/** /**
@@ -185,6 +196,36 @@ final class SymfonyExtension implements Extension
$container->setDefinition(self::KERNEL_ID . '.rebooter', $definition); $container->setDefinition(self::KERNEL_ID . '.rebooter', $definition);
} }
/**
* @param ContainerBuilder $container
*/
private function declareSymfonyContainers(ContainerBuilder $container)
{
if (null !== $this->crossContainerProcessor) {
$this->crossContainerProcessor->addContainerAccessor(
'symfony',
new KernelBasedContainerAccessor($container->get(self::KERNEL_ID))
);
$this->crossContainerProcessor->addContainerAccessor(
'symfony',
new KernelBasedContainerAccessor($container->get(self::SHARED_KERNEL_ID))
);
}
}
/**
* @param ExtensionManager $extensionManager
*/
private function initializeCrossContainerProcessor(ExtensionManager $extensionManager)
{
/** @var CrossContainerExtension $extension */
$extension = $extensionManager->getExtension('fob_cross_container');
if (null !== $extension) {
$this->crossContainerProcessor = $extension->getCrossContainerProcessor();
}
}
/** /**
* @param ExtensionManager $extensionManager * @param ExtensionManager $extensionManager
*/ */