4 * This file is part of the Behat Testwork.
5 * (c) Konstantin Kudryashov <ever.zet@gmail.com>
7 * For the full copyright and license information, please view the LICENSE
8 * file that was distributed with this source code.
11 namespace Behat\Testwork\Hook\ServiceContainer;
13 use Behat\Behat\Tester\ServiceContainer\TesterExtension;
14 use Behat\Testwork\Call\ServiceContainer\CallExtension;
15 use Behat\Testwork\Environment\ServiceContainer\EnvironmentExtension;
16 use Behat\Testwork\ServiceContainer\Extension;
17 use Behat\Testwork\ServiceContainer\ExtensionManager;
18 use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
19 use Symfony\Component\DependencyInjection\ContainerBuilder;
20 use Symfony\Component\DependencyInjection\Definition;
21 use Symfony\Component\DependencyInjection\Reference;
24 * Provides test hooking services for testwork.
26 * @author Konstantin Kudryashov <ever.zet@gmail.com>
28 class HookExtension implements Extension
33 const DISPATCHER_ID = 'hook.dispatcher';
34 const REPOSITORY_ID = 'hook.repository';
39 public function getConfigKey()
47 public function initialize(ExtensionManager $extensionManager)
54 public function configure(ArrayNodeDefinition $builder)
61 public function load(ContainerBuilder $container, array $config)
63 $this->loadDispatcher($container);
64 $this->loadRepository($container);
65 $this->loadHookableTesters($container);
71 public function process(ContainerBuilder $container)
76 * Loads hook dispatcher.
78 * @param ContainerBuilder $container
80 protected function loadDispatcher(ContainerBuilder $container)
82 $definition = new Definition('Behat\Testwork\Hook\HookDispatcher', array(
83 new Reference(self::REPOSITORY_ID),
84 new Reference(CallExtension::CALL_CENTER_ID)
86 $container->setDefinition(self::DISPATCHER_ID, $definition);
90 * Loads hook repository.
92 * @param ContainerBuilder $container
94 protected function loadRepository(ContainerBuilder $container)
96 $definition = new Definition('Behat\Testwork\Hook\HookRepository', array(
97 new Reference(EnvironmentExtension::MANAGER_ID)
99 $container->setDefinition(self::REPOSITORY_ID, $definition);
103 * Loads hookable testers.
105 * @param ContainerBuilder $container
107 protected function loadHookableTesters(ContainerBuilder $container)
109 $definition = new Definition('Behat\Testwork\Hook\Tester\HookableSuiteTester', array(
110 new Reference(TesterExtension::SUITE_TESTER_ID),
111 new Reference(self::DISPATCHER_ID)
113 $definition->addTag(TesterExtension::SUITE_TESTER_WRAPPER_TAG, array('priority' => 9999));
114 $container->setDefinition(TesterExtension::SUITE_TESTER_WRAPPER_TAG . '.hookable', $definition);