user_saml/tests/integration/vendor/behat/behat/src/Behat/Behat/Output/Node/Printer/Helper/WidthCalculator.php
Arthur Schiwon 3435d5093a
update behat and deps
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2022-04-07 17:00:47 +02:00

106 lines
2.9 KiB
PHP

<?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');
}
}