Security update for permissions_by_term
[yaffs-website] / vendor / behat / behat / src / Behat / Behat / Output / ServiceContainer / Formatter / JUnitFormatterFactory.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\Behat\Output\ServiceContainer\Formatter;
12
13 use Behat\Testwork\Exception\ServiceContainer\ExceptionExtension;
14 use Behat\Testwork\Output\ServiceContainer\Formatter\FormatterFactory;
15 use Behat\Testwork\Output\ServiceContainer\OutputExtension;
16 use Symfony\Component\DependencyInjection\ContainerBuilder;
17 use Symfony\Component\DependencyInjection\Definition;
18 use Symfony\Component\DependencyInjection\Reference;
19
20 /**
21  * Behat junit formatter factory.
22  *
23  * @author Wouter J <wouter@wouterj.nl>
24  */
25 final class JUnitFormatterFactory implements FormatterFactory
26 {
27     /*
28      * Available services
29      */
30     const ROOT_LISTENER_ID = 'output.node.listener.junit';
31     const RESULT_TO_STRING_CONVERTER_ID = 'output.node.printer.result_to_string';
32
33     /**
34      * {@inheritdoc}
35      */
36     public function buildFormatter(ContainerBuilder $container)
37     {
38         $this->loadRootNodeListener($container);
39         $this->loadPrinterHelpers($container);
40         $this->loadCorePrinters($container);
41         $this->loadFormatter($container);
42     }
43
44     /**
45      * {@inheritdoc}
46      */
47     public function processFormatter(ContainerBuilder $container)
48     {
49     }
50
51     /**
52      * Loads printer helpers.
53      *
54      * @param ContainerBuilder $container
55      */
56     private function loadPrinterHelpers(ContainerBuilder $container)
57     {
58         $definition = new Definition('Behat\Behat\Output\Node\Printer\Helper\ResultToStringConverter');
59         $container->setDefinition(self::RESULT_TO_STRING_CONVERTER_ID, $definition);
60     }
61
62     /**
63      * Loads the printers used to print the basic JUnit report.
64      *
65      * @param ContainerBuilder $container
66      */
67     private function loadCorePrinters(ContainerBuilder $container)
68     {
69         $definition = new Definition('Behat\Behat\Output\Node\Printer\JUnit\JUnitSuitePrinter', array(
70             new Reference('output.junit.statistics'),
71         ));
72         $container->setDefinition('output.node.printer.junit.suite', $definition);
73
74         $definition = new Definition('Behat\Behat\Output\Node\Printer\JUnit\JUnitFeaturePrinter', array(
75             new Reference('output.junit.statistics'),
76         ));
77         $container->setDefinition('output.node.printer.junit.feature', $definition);
78
79         $definition = new Definition('Behat\Behat\Output\Node\Printer\JUnit\JUnitScenarioPrinter', array(
80             new Reference(self::RESULT_TO_STRING_CONVERTER_ID),
81             new Reference('output.node.listener.junit.outline'),
82         ));
83         $container->setDefinition('output.node.printer.junit.scenario', $definition);
84
85         $definition = new Definition('Behat\Behat\Output\Node\Printer\JUnit\JUnitStepPrinter', array(
86             new Reference(ExceptionExtension::PRESENTER_ID),
87         ));
88         $container->setDefinition('output.node.printer.junit.step', $definition);
89
90         $definition = new Definition(
91             'Behat\Behat\Output\Node\Printer\JUnit\JUnitSetupPrinter', array(
92             new Reference(ExceptionExtension::PRESENTER_ID),
93         )
94         );
95         $container->setDefinition('output.node.printer.junit.setup', $definition);
96     }
97
98     /**
99      * Loads the node listeners required for JUnit printers to work.
100      *
101      * @param ContainerBuilder $container
102      */
103     private function loadRootNodeListener(ContainerBuilder $container)
104     {
105
106         $definition = new Definition('Behat\Behat\Output\Node\EventListener\JUnit\JUnitOutlineStoreListener', array(
107                 new Reference('output.node.printer.junit.suite')
108             )
109         );
110         $container->setDefinition('output.node.listener.junit.outline', $definition);
111
112
113         $definition = new Definition('Behat\Testwork\Output\Node\EventListener\ChainEventListener', array(
114             array(
115                 new Reference('output.node.listener.junit.outline'),
116                 new Definition('Behat\Behat\Output\Node\EventListener\JUnit\JUnitFeatureElementListener', array(
117                     new Reference('output.node.printer.junit.feature'),
118                     new Reference('output.node.printer.junit.scenario'),
119                     new Reference('output.node.printer.junit.step'),
120                     new Reference('output.node.printer.junit.setup'),
121                 )),
122             ),
123         ));
124         $container->setDefinition(self::ROOT_LISTENER_ID, $definition);
125     }
126
127     /**
128      * Loads formatter itself.
129      *
130      * @param ContainerBuilder $container
131      */
132     private function loadFormatter(ContainerBuilder $container)
133     {
134         $definition = new Definition('Behat\Behat\Output\Statistics\PhaseStatistics');
135         $container->setDefinition('output.junit.statistics', $definition);
136
137         $definition = new Definition('Behat\Testwork\Output\NodeEventListeningFormatter', array(
138             'junit',
139             'Outputs the failures in JUnit compatible files.',
140             array(
141                 'timer' => true,
142             ),
143             $this->createOutputPrinterDefinition(),
144             new Definition('Behat\Testwork\Output\Node\EventListener\ChainEventListener', array(
145                 array(
146                     new Reference(self::ROOT_LISTENER_ID),
147                     new Definition('Behat\Behat\Output\Node\EventListener\Statistics\ScenarioStatsListener', array(
148                         new Reference('output.junit.statistics')
149                     )),
150                     new Definition('Behat\Behat\Output\Node\EventListener\Statistics\StepStatsListener', array(
151                         new Reference('output.junit.statistics'),
152                         new Reference(ExceptionExtension::PRESENTER_ID)
153                     )),
154                     new Definition('Behat\Behat\Output\Node\EventListener\Statistics\HookStatsListener', array(
155                         new Reference('output.junit.statistics'),
156                         new Reference(ExceptionExtension::PRESENTER_ID)
157                     )),
158                 ),
159             )),
160         ));
161         $definition->addTag(OutputExtension::FORMATTER_TAG, array('priority' => 100));
162         $container->setDefinition(OutputExtension::FORMATTER_TAG . '.junit', $definition);
163     }
164
165     /**
166      * Creates output printer definition.
167      *
168      * @return Definition
169      */
170     private function createOutputPrinterDefinition()
171     {
172         return new Definition('Behat\Testwork\Output\Printer\JUnitOutputPrinter', array(
173             new Definition('Behat\Testwork\Output\Printer\Factory\FilesystemOutputFactory'),
174         ));
175     }
176 }