/** * {@inheritdoc} */ public function organiseArguments(ReflectionFunctionAbstract $constructor, array $arguments) { if (!$constructor instanceof ReflectionMethod) { throw new UnsupportedFunctionException(sprintf('ConstructorArgumentOrganiser can only work with ReflectionMethod, but `%s` given.', get_class($constructor))); } $organisedArguments = $this->baseOrganiser->organiseArguments($constructor, $arguments); $this->validateArguments($constructor, $arguments, $organisedArguments); return $organisedArguments; }
public function organiseArguments(ReflectionFunctionAbstract $function, array $arguments) { foreach ($function->getParameters() as $parameter) { $parameterClass = $parameter->getClass(); if (is_null($parameterClass) || !$parameterClass->isSubclassOf('Behat\\Behat\\Context\\Context')) { continue; } //it will be resolved by transformer $arguments[$parameter->getName()] = null; } return $this->baseArgumentOrganiser->organiseArguments($function, $arguments); }
/** * Resolves arguments for a specific class using registered argument resolvers. * * @param ReflectionClass $reflection * @param array $arguments * * @return mixed[] */ private function createArguments(ReflectionClass $reflection, array $arguments) { foreach ($this->argumentResolvers as $resolver) { $arguments = $resolver->resolveArguments($reflection, $arguments); } if (!$reflection->hasMethod('__construct') || !count($arguments)) { return $arguments; } $constructor = $reflection->getConstructor(); return $this->argumentOrganiser->organiseArguments($constructor, $arguments); }
/** * 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); }