Security update for permissions_by_term
[yaffs-website] / vendor / behat / behat / src / Behat / Behat / Output / Node / Printer / Helper / WidthCalculator.php
diff --git a/vendor/behat/behat/src/Behat/Behat/Output/Node/Printer/Helper/WidthCalculator.php b/vendor/behat/behat/src/Behat/Behat/Output/Node/Printer/Helper/WidthCalculator.php
new file mode 100644 (file)
index 0000000..bef1881
--- /dev/null
@@ -0,0 +1,105 @@
+<?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\Output\Node\Printer\Helper;
+
+use Behat\Gherkin\Node\ExampleNode;
+use Behat\Gherkin\Node\ScenarioLikeInterface as Scenario;
+use Behat\Gherkin\Node\StepNode;
+
+/**
+ * Calculates width of scenario. Width of scenario = max width of scenario title and scenario step texts.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+final class WidthCalculator
+{
+    /**
+     * Calculates scenario width.
+     *
+     * @param Scenario $scenario
+     * @param integer  $indentation
+     * @param integer  $subIndentation
+     *
+     * @return integer
+     */
+    public function calculateScenarioWidth(Scenario $scenario, $indentation, $subIndentation)
+    {
+        $length = $this->calculateScenarioHeaderWidth($scenario, $indentation);
+
+        foreach ($scenario->getSteps() as $step) {
+            $stepLength = $this->calculateStepWidth($step, $indentation + $subIndentation);
+            $length = max($length, $stepLength);
+        }
+
+        return $length;
+    }
+
+    /**
+     * Calculates outline examples width.
+     *
+     * @param ExampleNode $example
+     * @param integer     $indentation
+     * @param integer     $subIndentation
+     *
+     * @return integer
+     */
+    public function calculateExampleWidth(ExampleNode $example, $indentation, $subIndentation)
+    {
+        $length = $this->calculateScenarioHeaderWidth($example, $indentation);
+
+        foreach ($example->getSteps() as $step) {
+            $stepLength = $this->calculateStepWidth($step, $indentation + $subIndentation);
+            $length = max($length, $stepLength);
+        }
+
+        return $length;
+    }
+
+    /**
+     * Calculates scenario header width.
+     *
+     * @param Scenario $scenario
+     * @param integer  $indentation
+     *
+     * @return integer
+     */
+    public function calculateScenarioHeaderWidth(Scenario $scenario, $indentation)
+    {
+        $indentText = str_repeat(' ', intval($indentation));
+
+        if ($scenario instanceof ExampleNode) {
+            $header = sprintf('%s%s', $indentText, $scenario->getTitle());
+        } else {
+            $title = $scenario->getTitle();
+            $lines = explode("\n", $title);
+            $header = sprintf('%s%s: %s', $indentText, $scenario->getKeyword(), array_shift($lines));
+        }
+
+        return mb_strlen(rtrim($header), 'utf8');
+    }
+
+    /**
+     * Calculates step width.
+     *
+     * @param StepNode $step
+     * @param integer  $indentation
+     *
+     * @return integer
+     */
+    public function calculateStepWidth(StepNode $step, $indentation)
+    {
+        $indentText = str_repeat(' ', intval($indentation));
+
+        $text = sprintf('%s%s %s', $indentText, $step->getKeyword(), $step->getText());
+
+        return mb_strlen($text, 'utf8');
+    }
+}