X-Git-Url: https://yaffs.net/gitweb/?a=blobdiff_plain;f=vendor%2Fbehat%2Fbehat%2Fsrc%2FBehat%2FTestwork%2FEnvironment%2FServiceContainer%2FEnvironmentExtension.php;fp=vendor%2Fbehat%2Fbehat%2Fsrc%2FBehat%2FTestwork%2FEnvironment%2FServiceContainer%2FEnvironmentExtension.php;h=e06f058c749a0c588528139e885b0efe8dce6af8;hb=1270d9129ce8f27c9b28b10518e32132c58e0aca;hp=0000000000000000000000000000000000000000;hpb=c27c0f0cdaa3f354b1fe54a56ae7e854be6e3f68;p=yaffs-website diff --git a/vendor/behat/behat/src/Behat/Testwork/Environment/ServiceContainer/EnvironmentExtension.php b/vendor/behat/behat/src/Behat/Testwork/Environment/ServiceContainer/EnvironmentExtension.php new file mode 100644 index 000000000..e06f058c7 --- /dev/null +++ b/vendor/behat/behat/src/Behat/Testwork/Environment/ServiceContainer/EnvironmentExtension.php @@ -0,0 +1,147 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Testwork\Environment\ServiceContainer; + +use Behat\Testwork\ServiceContainer\Extension; +use Behat\Testwork\ServiceContainer\ExtensionManager; +use Behat\Testwork\ServiceContainer\ServiceProcessor; +use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Definition; + +/** + * Testwork test environment extension. + * + * Extends testwork with environment services. + * + * @author Konstantin Kudryashov + */ +final class EnvironmentExtension implements Extension +{ + /* + * Available services + */ + const MANAGER_ID = 'environment.manager'; + + /* + * Available extension points + */ + const HANDLER_TAG = 'environment.handler'; + const READER_TAG = 'environment.reader'; + + /** + * @var ServiceProcessor + */ + private $processor; + + /** + * Initializes extension. + * + * @param null|ServiceProcessor $processor + */ + public function __construct(ServiceProcessor $processor = null) + { + $this->processor = $processor ? : new ServiceProcessor(); + } + + /** + * {@inheritdoc} + */ + public function getConfigKey() + { + return 'environments'; + } + + /** + * {@inheritdoc} + */ + public function initialize(ExtensionManager $extensionManager) + { + } + + /** + * {@inheritdoc} + */ + public function configure(ArrayNodeDefinition $builder) + { + } + + /** + * {@inheritdoc} + */ + public function load(ContainerBuilder $container, array $config) + { + $this->loadManager($container); + $this->loadStaticEnvironmentHandler($container); + } + + /** + * {@inheritdoc} + */ + public function process(ContainerBuilder $container) + { + $this->processHandlers($container); + $this->processReaders($container); + } + + /** + * Loads environment manager. + * + * @param ContainerBuilder $container + */ + protected function loadManager(ContainerBuilder $container) + { + $definition = new Definition('Behat\Testwork\Environment\EnvironmentManager'); + $container->setDefinition(self::MANAGER_ID, $definition); + } + + /** + * Loads static environments handler. + * + * @param ContainerBuilder $container + */ + protected function loadStaticEnvironmentHandler(ContainerBuilder $container) + { + $definition = new Definition('Behat\Testwork\Environment\Handler\StaticEnvironmentHandler'); + $definition->addTag(self::HANDLER_TAG, array('priority' => 0)); + $container->setDefinition(self::HANDLER_TAG . '.static', $definition); + } + + /** + * Processes all environment handlers. + * + * @param ContainerBuilder $container + */ + protected function processHandlers(ContainerBuilder $container) + { + $references = $this->processor->findAndSortTaggedServices($container, self::HANDLER_TAG); + $definition = $container->getDefinition(self::MANAGER_ID); + + foreach ($references as $reference) { + $definition->addMethodCall('registerEnvironmentHandler', array($reference)); + } + } + + /** + * Processes all environment readers. + * + * @param ContainerBuilder $container + */ + protected function processReaders(ContainerBuilder $container) + { + $references = $this->processor->findAndSortTaggedServices($container, self::READER_TAG); + $definition = $container->getDefinition(self::MANAGER_ID); + + foreach ($references as $reference) { + $definition->addMethodCall('registerEnvironmentReader', array($reference)); + } + } +}