diff --git a/composer.json b/composer.json index 92114b8..4fa2478 100644 --- a/composer.json +++ b/composer.json @@ -19,11 +19,13 @@ "behat/mink": "^1.7", "behat/mink-browserkit-driver": "^1.3", "behat/mink-extension": "^2.2", + "friends-of-behat/cross-container-extension": "^0.1", "friends-of-behat/test-context": "^0.3", "symfony/framework-bundle": "^2.7|^3.0" }, "suggest": { - "behat/mink-browserkit-driver": "^1.3" + "behat/mink-browserkit-driver": "^1.3", + "friends-of-behat/cross-container-extension": "^0.1" }, "autoload": { "psr-4": { "FriendsOfBehat\\SymfonyExtension\\": "src/" } diff --git a/features/not_crashing_behat.feature b/features/not_crashing_behat.feature index 4a8ed91..a973f8d 100644 --- a/features/not_crashing_behat.feature +++ b/features/not_crashing_behat.feature @@ -28,3 +28,31 @@ Feature: Not crashing Behat And a feature file with passing scenario When I run Behat 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: + """ + registerSymfonyDriverFactory($extensionManager); + $this->initializeCrossContainerProcessor($extensionManager); } /** @@ -104,6 +114,7 @@ final class SymfonyExtension implements Extension $this->loadSharedKernelContainer($container); $this->loadKernelRebooter($container); + $this->declareSymfonyContainers($container); } /** @@ -185,6 +196,36 @@ final class SymfonyExtension implements Extension $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 */