4 * This file is part of the Behat.
5 * (c) Konstantin Kudryashov <ever.zet@gmail.com>
7 * For the full copyright and license information, please view the LICENSE
8 * file that was distributed with this source code.
11 namespace Behat\Behat\Definition\Printer;
13 use Behat\Behat\Definition\Definition;
14 use Behat\Testwork\Suite\Suite;
17 * Prints definitions with full information about them.
19 * @author Konstantin Kudryashov <ever.zet@gmail.com>
21 final class ConsoleDefinitionInformationPrinter extends ConsoleDefinitionPrinter
26 private $searchCriterion;
29 * Sets search criterion.
31 * @param string $criterion
33 public function setSearchCriterion($criterion)
35 $this->searchCriterion = $criterion;
41 public function printDefinitions(Suite $suite, $definitions)
43 $search = $this->searchCriterion;
46 foreach ($definitions as $definition) {
47 $definition = $this->translateDefinition($suite, $definition);
48 $pattern = $definition->getPattern();
50 if (null !== $search && false === mb_strpos($pattern, $search, 0, 'utf8')) {
55 $this->extractHeader($suite, $definition),
56 $this->extractDescription($suite, $definition),
57 $this->extractFooter($suite, $definition)
60 $output[] = implode(PHP_EOL, $lines) . PHP_EOL;
63 $this->write(rtrim(implode(PHP_EOL, $output)));
67 * Extracts the formatted header from the definition.
70 * @param Definition $definition
74 private function extractHeader(Suite $suite, Definition $definition)
76 $pattern = $definition->getPattern();
79 '{suite} <def_dimmed>|</def_dimmed> <info>{type}</info> <def_regex>{regex}</def_regex>', array(
80 '{suite}' => $suite->getName(),
81 '{type}' => $this->getDefinitionType($definition),
82 '{regex}' => $pattern,
90 * Extracts the formatted description from the definition.
93 * @param Definition $definition
97 private function extractDescription(Suite $suite, Definition $definition)
99 $definition = $this->translateDefinition($suite, $definition);
102 if ($description = $definition->getDescription()) {
103 foreach (explode("\n", $description) as $descriptionLine) {
105 '{space}<def_dimmed>|</def_dimmed> {description}', array(
106 '{space}' => str_pad('', mb_strlen($suite->getName(), 'utf8') + 1),
107 '{description}' => $descriptionLine
117 * Extracts the formatted footer from the definition.
119 * @param Suite $suite
120 * @param Definition $definition
124 private function extractFooter(Suite $suite, Definition $definition)
128 '{space}<def_dimmed>|</def_dimmed> at `{path}`', array(
129 '{space}' => str_pad('', mb_strlen($suite->getName(), 'utf8') + 1),
130 '{path}' => $definition->getPath()
134 if ($this->isVerbose()) {
136 '{space}<def_dimmed>|</def_dimmed> on `{filepath}[{start}:{end}]`', array(
137 '{space}' => str_pad('', mb_strlen($suite->getName(), 'utf8') + 1),
138 '{filepath}' => $definition->getReflection()->getFileName(),
139 '{start}' => $definition->getReflection()->getStartLine(),
140 '{end}' => $definition->getReflection()->getEndLine()