Security update for permissions_by_term
[yaffs-website] / vendor / behat / behat / src / Behat / Behat / Snippet / SnippetWriter.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\Snippet;
12
13 use Behat\Behat\Snippet\Appender\SnippetAppender;
14 use Behat\Behat\Snippet\Printer\SnippetPrinter;
15
16 /**
17  * Prints or appends snippets to a specific environment using registered appenders and printers.
18  *
19  * @author Konstantin Kudryashov <ever.zet@gmail.com>
20  */
21 final class SnippetWriter
22 {
23     /**
24      * @var SnippetAppender[]
25      */
26     private $appenders = array();
27
28     /**
29      * Registers snippet appender.
30      *
31      * @param SnippetAppender $appender
32      */
33     public function registerSnippetAppender(SnippetAppender $appender)
34     {
35         $this->appenders[] = $appender;
36     }
37
38     /**
39      * Appends snippets to appropriate targets.
40      *
41      * @param AggregateSnippet[] $snippets
42      */
43     public function appendSnippets(array $snippets)
44     {
45         foreach ($snippets as $snippet) {
46             $this->appendSnippet($snippet);
47         }
48     }
49
50     /**
51      * Prints snippets using provided printer.
52      *
53      * @param SnippetPrinter     $printer
54      * @param AggregateSnippet[] $snippets
55      */
56     public function printSnippets(SnippetPrinter $printer, array $snippets)
57     {
58         $printableSnippets = array();
59         foreach ($snippets as $snippet) {
60             foreach ($snippet->getTargets() as $target) {
61                 $targetSnippets = array();
62
63                 if (isset($printableSnippets[$target])) {
64                     $targetSnippets = $printableSnippets[$target];
65                 }
66
67                 $targetSnippets[] = $snippet;
68                 $printableSnippets[$target] = $targetSnippets;
69             }
70         }
71
72         foreach ($printableSnippets as $target => $targetSnippets) {
73             $printer->printSnippets($target, $targetSnippets);
74         }
75     }
76
77     /**
78      * Prints undefined steps using provided printer.
79      *
80      * @param SnippetPrinter  $printer
81      * @param UndefinedStep[] $undefinedSteps
82      */
83     public function printUndefinedSteps(SnippetPrinter $printer, array $undefinedSteps)
84     {
85         $printableSteps = array();
86         foreach ($undefinedSteps as $undefinedStep) {
87             $suiteName = $undefinedStep->getEnvironment()->getSuite()->getName();
88             $step = $undefinedStep->getStep();
89
90             if (!isset($printableSteps[$suiteName])) {
91                 $printableSteps[$suiteName] = array();
92             }
93
94             $printableSteps[$suiteName][$step->getText()] = $step;
95         }
96
97         foreach ($printableSteps as $suiteName => $steps) {
98             $printer->printUndefinedSteps($suiteName, array_values($steps));
99         }
100     }
101
102     /**
103      * Appends snippet to appropriate targets.
104      *
105      * @param AggregateSnippet $snippet
106      */
107     private function appendSnippet(AggregateSnippet $snippet)
108     {
109         foreach ($this->appenders as $appender) {
110             if (!$appender->supportsSnippet($snippet)) {
111                 continue;
112             }
113
114             $appender->appendSnippet($snippet);
115         }
116     }
117 }