Security update for permissions_by_term
[yaffs-website] / vendor / behat / behat / src / Behat / Testwork / Argument / ConstructorArgumentOrganiser.php
1 <?php
2
3 /*
4  * This file is part of the Behat Testwork.
5  * (c) Konstantin Kudryashov <ever.zet@gmail.com>
6  *
7  * For the full copyright and license information, please view the LICENSE
8  * file that was distributed with this source code.
9  */
10
11 namespace Behat\Testwork\Argument;
12
13 use Behat\Testwork\Argument\Exception\UnknownParameterValueException;
14 use Behat\Testwork\Argument\Exception\UnsupportedFunctionException;
15 use ReflectionFunctionAbstract;
16 use ReflectionMethod;
17
18 /**
19  * Organises constructor arguments.
20  *
21  * @author Konstantin Kudryashov <ever.zet@gmail.com>
22  */
23 final class ConstructorArgumentOrganiser implements ArgumentOrganiser
24 {
25     /**
26      * @var ArgumentOrganiser
27      */
28     private $baseOrganiser;
29
30     /**
31      * Initializes organiser.
32      *
33      * @param ArgumentOrganiser $organiser
34      */
35     public function __construct(ArgumentOrganiser $organiser)
36     {
37         $this->baseOrganiser = $organiser;
38     }
39
40     /**
41      * {@inheritdoc}
42      */
43     public function organiseArguments(ReflectionFunctionAbstract $constructor, array $arguments)
44     {
45         if (!$constructor instanceof ReflectionMethod) {
46             throw new UnsupportedFunctionException(sprintf(
47                 'ConstructorArgumentOrganiser can only work with ReflectionMethod, but `%s` given.',
48                 get_class($constructor)
49             ));
50         }
51
52         $organisedArguments = $this->baseOrganiser->organiseArguments(
53             $constructor,
54             $arguments
55         );
56
57         $this->validateArguments($constructor, $arguments, $organisedArguments);
58
59         return $organisedArguments;
60     }
61
62     /**
63      * Checks that all provided constructor arguments are present in the constructor.
64      *
65      * @param ReflectionMethod $constructor
66      * @param mixed[]          $passedArguments
67      * @param mixed[]          $organisedArguments
68      *
69      * @throws UnknownParameterValueException
70      */
71     private function validateArguments(
72         ReflectionMethod $constructor,
73         array $passedArguments,
74         array $organisedArguments
75     ) {
76         foreach ($passedArguments as $key => $val) {
77             if (array_key_exists($key, $organisedArguments)) {
78                 continue;
79             }
80
81             throw new UnknownParameterValueException(
82                 sprintf(
83                     '`%s::__construct()` does not expect argument `$%s`.',
84                     $constructor->getDeclaringClass()->getName(),
85                     $key
86                 )
87             );
88         }
89     }
90 }