/**
  * {@inheritdoc}
  */
 public function generateRegex($suiteName, $pattern, $language)
 {
     $translatedPattern = $this->translator->trans($pattern, array(), $suiteName, $language);
     if ($pattern == $translatedPattern) {
         return $this->patternTransformer->transformPatternToRegex($pattern);
     }
     return $this->patternTransformer->transformPatternToRegex($translatedPattern);
 }
 /**
  * {@inheritdoc}
  */
 public function generateSnippet(Environment $environment, StepNode $step)
 {
     if (!$environment instanceof ContextEnvironment) {
         throw new EnvironmentSnippetGenerationException(sprintf('ContextSnippetGenerator does not support `%s` environment.', get_class($environment)), $environment);
     }
     $contextClass = $this->getSnippetAcceptingContextClass($environment);
     $patternType = $this->getPatternType($contextClass);
     $stepText = $step->getText();
     $pattern = $this->patternTransformer->generatePattern($patternType, $stepText);
     $methodName = $this->getMethodName($contextClass, $pattern->getCanonicalText(), $pattern->getPattern());
     $methodArguments = $this->getMethodArguments($step, $pattern->getPlaceholderCount());
     $snippetTemplate = $this->getSnippetTemplate($pattern->getPattern(), $methodName, $methodArguments);
     return new ContextSnippet($step, $snippetTemplate, $contextClass);
 }
 /**
  * Returns transformation regex.
  *
  * @param string $assetsId
  * @param string $pattern
  * @param string $language
  *
  * @return string
  */
 private function getRegex($assetsId, $pattern, $language)
 {
     $translatedPattern = $this->translator->trans($pattern, array(), $assetsId, $language);
     if ($pattern == $translatedPattern) {
         return $this->patternTransformer->transformPatternToRegex($pattern);
     }
     return $this->patternTransformer->transformPatternToRegex($translatedPattern);
 }
 /**
  * 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);
 }
Esempio n. 5
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;
 }