4 * This file is part of the Behat Testwork.
5 * (c) Konstantin Kudryashov <ever.zet@gmail.com>
7 * For the full copyright and license information, please view the LICENSE
8 * file that was distributed with this source code.
11 namespace Behat\Testwork\Argument;
13 use Behat\Testwork\Argument\Exception\UnknownParameterValueException;
14 use Behat\Testwork\Argument\Exception\UnsupportedFunctionException;
15 use ReflectionFunctionAbstract;
19 * Organises constructor arguments.
21 * @author Konstantin Kudryashov <ever.zet@gmail.com>
23 final class ConstructorArgumentOrganiser implements ArgumentOrganiser
26 * @var ArgumentOrganiser
28 private $baseOrganiser;
31 * Initializes organiser.
33 * @param ArgumentOrganiser $organiser
35 public function __construct(ArgumentOrganiser $organiser)
37 $this->baseOrganiser = $organiser;
43 public function organiseArguments(ReflectionFunctionAbstract $constructor, array $arguments)
45 if (!$constructor instanceof ReflectionMethod) {
46 throw new UnsupportedFunctionException(sprintf(
47 'ConstructorArgumentOrganiser can only work with ReflectionMethod, but `%s` given.',
48 get_class($constructor)
52 $organisedArguments = $this->baseOrganiser->organiseArguments(
57 $this->validateArguments($constructor, $arguments, $organisedArguments);
59 return $organisedArguments;
63 * Checks that all provided constructor arguments are present in the constructor.
65 * @param ReflectionMethod $constructor
66 * @param mixed[] $passedArguments
67 * @param mixed[] $organisedArguments
69 * @throws UnknownParameterValueException
71 private function validateArguments(
72 ReflectionMethod $constructor,
73 array $passedArguments,
74 array $organisedArguments
76 foreach ($passedArguments as $key => $val) {
77 if (array_key_exists($key, $organisedArguments)) {
81 throw new UnknownParameterValueException(
83 '`%s::__construct()` does not expect argument `$%s`.',
84 $constructor->getDeclaringClass()->getName(),