/**
  * Extracts the formatted header from the definition.
  *
  * @param Suite      $suite
  * @param Definition $definition
  *
  * @return string[]
  */
 private function extractHeader(Suite $suite, Definition $definition)
 {
     $pattern = $definition->getPattern();
     $lines = array();
     $lines[] = strtr('{suite} <def_dimmed>|</def_dimmed> <info>{type}</info> <def_regex>{regex}</def_regex>', array('{suite}' => $suite->getName(), '{type}' => $this->getDefinitionType($definition), '{regex}' => $pattern));
     return $lines;
 }
 /**
  * Attempts to translate definition using translator and produce translated one on success.
  *
  * @param Suite       $suite
  * @param Definition  $definition
  * @param null|string $language
  *
  * @return Definition|TranslatedDefinition
  */
 public function translateDefinition(Suite $suite, Definition $definition, $language = null)
 {
     $assetsId = $suite->getName();
     $pattern = $definition->getPattern();
     $translatedPattern = $this->translator->trans($pattern, array(), $assetsId, $language);
     if ($pattern != $translatedPattern) {
         return new TranslatedDefinition($definition, $translatedPattern, $language);
     }
     return $definition;
 }
Example #3
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;
 }
 /**
  * Attempts to match provided definition against a step text.
  *
  * @param Definition          $definition
  * @param string              $stepText
  * @param ArgumentInterface[] $multiline
  *
  * @return null|SearchResult
  */
 private function match(Definition $definition, $stepText, array $multiline)
 {
     $regex = $this->patternTransformer->transformPatternToRegex($definition->getPattern());
     if (!preg_match($regex, $stepText, $match)) {
         return null;
     }
     $function = $definition->getReflection();
     $match = array_merge($match, array_values($multiline));
     $arguments = $this->argumentOrganiser->organiseArguments($function, $match);
     return new SearchResult($definition, $stepText, $arguments);
 }
 /**
  * Returns original (not translated) pattern.
  *
  * @return string
  */
 public function getOriginalPattern()
 {
     return $this->definition->getPattern();
 }
 /**
  * Initializes redundant exception.
  *
  * @param Definition $step2 duplicate step definition
  * @param Definition $step1 firstly matched step definition
  */
 public function __construct(Definition $step2, Definition $step1)
 {
     $message = sprintf("Step \"%s\" is already defined in %s\n\n%s\n%s", $step2->getPattern(), $step1->getPath(), $step1->getPath(), $step2->getPath());
     parent::__construct($message);
 }