Security update for permissions_by_term
[yaffs-website] / vendor / behat / behat / src / Behat / Testwork / Ordering / ServiceContainer / OrderingExtension.php
1 <?php
2
3 /*
4  * This file is part of the Behat.
5  * (c) Konstantin Kudryashov <ever.zet@gmail.com>
6  *
7  * For the full copyright and license information, please view the LICENSE
8  * file that was distributed with this source code.
9  */
10
11 namespace Behat\Testwork\Ordering\ServiceContainer;
12
13 use Behat\Testwork\Cli\ServiceContainer\CliExtension;
14 use Behat\Testwork\EventDispatcher\ServiceContainer\EventDispatcherExtension;
15 use Behat\Testwork\ServiceContainer\Extension;
16 use Behat\Testwork\ServiceContainer\ExtensionManager;
17 use Behat\Testwork\ServiceContainer\ServiceProcessor;
18 use Behat\Testwork\Tester\ServiceContainer\TesterExtension;
19 use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
20 use Symfony\Component\DependencyInjection\ContainerBuilder;
21 use Symfony\Component\DependencyInjection\Definition;
22 use Symfony\Component\DependencyInjection\Reference;
23
24 /**
25  * Provides specification execution ordering.
26  *
27  * @author Ciaran McNulty <mail@ciaranmcnulty.com>
28  */
29 final class OrderingExtension implements Extension
30 {
31     const ORDERER_TAG = 'tester.orderer';
32
33     /**
34      * @var ServiceProcessor
35      */
36     private $processor;
37
38     /**
39      * Initializes extension.
40      *
41      * @param null|ServiceProcessor $processor
42      */
43     public function __construct(ServiceProcessor $processor = null)
44     {
45         $this->processor = $processor ?: new ServiceProcessor();
46     }
47
48     /**
49      * You can modify the container here before it is dumped to PHP code.
50      *
51      * @param ContainerBuilder $container
52      *
53      * @api
54      */
55     public function process(ContainerBuilder $container)
56     {
57         $definition = $container->getDefinition(CliExtension::CONTROLLER_TAG . '.order');
58         $references = $this->processor->findAndSortTaggedServices($container, self::ORDERER_TAG);
59
60         foreach ($references as $reference) {
61             $definition->addMethodCall('registerOrderer', array($reference));
62         }
63     }
64
65     /**
66      * Returns the extension config key.
67      *
68      * @return string
69      */
70     public function getConfigKey()
71     {
72         return 'ordering';
73     }
74
75     /**
76      * Initializes other extensions.
77      *
78      * This method is called immediately after all extensions are activated but
79      * before any extension `configure()` method is called. This allows extensions
80      * to hook into the configuration of other extensions providing such an
81      * extension point.
82      *
83      * @param ExtensionManager $extensionManager
84      */
85     public function initialize(ExtensionManager $extensionManager)
86     {
87     }
88
89     /**
90      * Setups configuration for the extension.
91      *
92      * @param ArrayNodeDefinition $builder
93      */
94     public function configure(ArrayNodeDefinition $builder)
95     {
96     }
97
98     /**
99      * Loads extension services into temporary container.
100      *
101      * @param ContainerBuilder $container
102      * @param array $config
103      */
104     public function load(ContainerBuilder $container, array $config)
105     {
106         $this->loadOrderController($container);
107         $this->loadOrderedExercise($container);
108         $this->loadDefaultOrderers($container);
109     }
110
111     /**
112      * Loads order controller.
113      *
114      * @param ContainerBuilder $container
115      */
116     private function loadOrderController(ContainerBuilder $container)
117     {
118         $definition = new Definition('Behat\Testwork\Ordering\Cli\OrderController', array(
119             new Reference(EventDispatcherExtension::DISPATCHER_ID),
120             new Reference(TesterExtension::EXERCISE_WRAPPER_TAG . '.ordering')
121         ));
122         $definition->addTag(CliExtension::CONTROLLER_TAG, array('priority' => 250));
123         $container->setDefinition(CliExtension::CONTROLLER_TAG . '.order', $definition);
124     }
125
126     /**
127      * Loads exercise wrapper that enables ordering
128      *
129      * @param ContainerBuilder $container
130      */
131     private function loadOrderedExercise(ContainerBuilder $container)
132     {
133         $definition = new Definition('Behat\Testwork\Ordering\OrderedExercise', array(
134             new Reference(TesterExtension::EXERCISE_ID)
135         ));
136         $definition->addTag(TesterExtension::EXERCISE_WRAPPER_TAG, array('priority' => -9999));
137         $container->setDefinition(TesterExtension::EXERCISE_WRAPPER_TAG . '.ordering', $definition);
138     }
139
140     /**
141      * Defines default orderers
142      *
143      * @param ContainerBuilder $container
144      */
145     private function loadDefaultOrderers(ContainerBuilder $container)
146     {
147         $definition = new Definition('Behat\Testwork\Ordering\Orderer\ReverseOrderer');
148         $definition->addTag(self::ORDERER_TAG, array('priority' => -9999));
149         $container->setDefinition(TesterExtension::EXERCISE_WRAPPER_TAG . '.ordering.reverse', $definition);
150
151
152         $definition = new Definition('Behat\Testwork\Ordering\Orderer\RandomOrderer');
153         $definition->addTag(self::ORDERER_TAG, array('priority' => -9999));
154         $container->setDefinition(TesterExtension::EXERCISE_WRAPPER_TAG . '.ordering.random', $definition);
155     }
156 }