/** * {@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)); }
/** * 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; }