Security update for permissions_by_term
[yaffs-website] / vendor / behat / behat / src / Behat / Behat / Snippet / SnippetWriter.php
diff --git a/vendor/behat/behat/src/Behat/Behat/Snippet/SnippetWriter.php b/vendor/behat/behat/src/Behat/Behat/Snippet/SnippetWriter.php
new file mode 100644 (file)
index 0000000..62d6e96
--- /dev/null
@@ -0,0 +1,117 @@
+<?php
+
+/*
+ * This file is part of the Behat.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Behat\Snippet;
+
+use Behat\Behat\Snippet\Appender\SnippetAppender;
+use Behat\Behat\Snippet\Printer\SnippetPrinter;
+
+/**
+ * Prints or appends snippets to a specific environment using registered appenders and printers.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+final class SnippetWriter
+{
+    /**
+     * @var SnippetAppender[]
+     */
+    private $appenders = array();
+
+    /**
+     * Registers snippet appender.
+     *
+     * @param SnippetAppender $appender
+     */
+    public function registerSnippetAppender(SnippetAppender $appender)
+    {
+        $this->appenders[] = $appender;
+    }
+
+    /**
+     * Appends snippets to appropriate targets.
+     *
+     * @param AggregateSnippet[] $snippets
+     */
+    public function appendSnippets(array $snippets)
+    {
+        foreach ($snippets as $snippet) {
+            $this->appendSnippet($snippet);
+        }
+    }
+
+    /**
+     * Prints snippets using provided printer.
+     *
+     * @param SnippetPrinter     $printer
+     * @param AggregateSnippet[] $snippets
+     */
+    public function printSnippets(SnippetPrinter $printer, array $snippets)
+    {
+        $printableSnippets = array();
+        foreach ($snippets as $snippet) {
+            foreach ($snippet->getTargets() as $target) {
+                $targetSnippets = array();
+
+                if (isset($printableSnippets[$target])) {
+                    $targetSnippets = $printableSnippets[$target];
+                }
+
+                $targetSnippets[] = $snippet;
+                $printableSnippets[$target] = $targetSnippets;
+            }
+        }
+
+        foreach ($printableSnippets as $target => $targetSnippets) {
+            $printer->printSnippets($target, $targetSnippets);
+        }
+    }
+
+    /**
+     * Prints undefined steps using provided printer.
+     *
+     * @param SnippetPrinter  $printer
+     * @param UndefinedStep[] $undefinedSteps
+     */
+    public function printUndefinedSteps(SnippetPrinter $printer, array $undefinedSteps)
+    {
+        $printableSteps = array();
+        foreach ($undefinedSteps as $undefinedStep) {
+            $suiteName = $undefinedStep->getEnvironment()->getSuite()->getName();
+            $step = $undefinedStep->getStep();
+
+            if (!isset($printableSteps[$suiteName])) {
+                $printableSteps[$suiteName] = array();
+            }
+
+            $printableSteps[$suiteName][$step->getText()] = $step;
+        }
+
+        foreach ($printableSteps as $suiteName => $steps) {
+            $printer->printUndefinedSteps($suiteName, array_values($steps));
+        }
+    }
+
+    /**
+     * Appends snippet to appropriate targets.
+     *
+     * @param AggregateSnippet $snippet
+     */
+    private function appendSnippet(AggregateSnippet $snippet)
+    {
+        foreach ($this->appenders as $appender) {
+            if (!$appender->supportsSnippet($snippet)) {
+                continue;
+            }
+
+            $appender->appendSnippet($snippet);
+        }
+    }
+}