/**
  * {@inheritdoc}
  */
 public function printStep(Formatter $formatter, Scenario $scenario, StepNode $step, StepResult $result)
 {
     $printer = $formatter->getOutputPrinter();
     $style = $this->resultConverter->convertResultToString($result);
     switch ($result->getResultCode()) {
         case TestResult::PASSED:
             $printer->write("{+{$style}}.{-{$style}}");
             break;
         case TestResult::SKIPPED:
             $printer->write("{+{$style}}-{-{$style}}");
             break;
         case TestResult::PENDING:
             $printer->write("{+{$style}}P{-{$style}}");
             break;
         case StepResult::UNDEFINED:
             $printer->write("{+{$style}}U{-{$style}}");
             break;
         case TestResult::FAILED:
             $printer->write("{+{$style}}F{-{$style}}");
             break;
     }
     if (++$this->stepsPrinted % 70 == 0) {
         $printer->writeln(' ' . $this->stepsPrinted);
     }
 }
 /**
  * {@inheritDoc}
  */
 public function printOpenTag(Formatter $formatter, FeatureNode $feature, ScenarioLikeInterface $scenario, TestResult $result)
 {
     $name = implode(' ', array_map(function ($l) {
         return trim($l);
     }, explode("\n", $scenario->getTitle())));
     if ($scenario instanceof ExampleNode) {
         $name = $this->buildExampleName();
     }
     /** @var JUnitOutputPrinter $outputPrinter */
     $outputPrinter = $formatter->getOutputPrinter();
     $outputPrinter->addTestcase(array('name' => $name, 'status' => $this->resultConverter->convertResultToString($result)));
 }
 /**
  * Prints step exception (if has one).
  *
  * @param OutputPrinter $printer
  * @param StepResult    $result
  */
 private function printStepException(OutputPrinter $printer, StepResult $result)
 {
     $style = $this->resultConverter->convertResultToString($result);
     if (!$result instanceof ExceptionResult || !$result->hasException()) {
         return;
     }
     $text = $this->exceptionPresenter->presentException($result->getException());
     $indentedText = implode("\n", array_map(array($this, 'subIndent'), explode("\n", $text)));
     $printer->writeln(sprintf('{+%s}%s{-%s}', $style, $indentedText, $style));
 }
Beispiel #4
0
 /**
  * Colorizes step text arguments according to definition.
  *
  * @param string     $text
  * @param Definition $definition
  * @param TestResult $result
  *
  * @return string
  */
 public function paintText($text, Definition $definition, TestResult $result)
 {
     $regex = $this->patternTransformer->transformPatternToRegex($definition->getPattern());
     $style = $this->resultConverter->convertResultToString($result);
     $paramStyle = $style . '_param';
     // If it's just a string - skip
     if ('/' !== substr($regex, 0, 1)) {
         return $text;
     }
     // Find arguments with offsets
     $matches = array();
     preg_match($regex, $text, $matches, PREG_OFFSET_CAPTURE);
     array_shift($matches);
     // Replace arguments with colorized ones
     $shift = 0;
     $lastReplacementPosition = 0;
     foreach ($matches as $key => $match) {
         if (!is_numeric($key) || -1 === $match[1] || false !== strpos($match[0], '<')) {
             continue;
         }
         $offset = $match[1] + $shift;
         $value = $match[0];
         // Skip inner matches
         if ($lastReplacementPosition > $offset) {
             continue;
         }
         $lastReplacementPosition = $offset + strlen($value);
         $begin = substr($text, 0, $offset);
         $end = substr($text, $lastReplacementPosition);
         $format = "{-{$style}}{+{$paramStyle}}%s{-{$paramStyle}}{+{$style}}";
         $text = sprintf("%s{$format}%s", $begin, $value, $end);
         // Keep track of how many extra characters are added
         $shift += strlen($format) - 2;
         $lastReplacementPosition += strlen($format) - 2;
     }
     // Replace "<", ">" with colorized ones
     $text = preg_replace('/(<[^>]+>)/', "{-{$style}}{+{$paramStyle}}\$1{-{$paramStyle}}{+{$style}}", $text);
     return $text;
 }