Pull merge.
[yaffs-website] / vendor / phpunit / phpunit-mock-objects / src / Framework / MockObject / Matcher / Parameters.php
1 <?php
2 /*
3  * This file is part of the PHPUnit_MockObject package.
4  *
5  * (c) Sebastian Bergmann <sebastian@phpunit.de>
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 /**
12  * Invocation matcher which looks for specific parameters in the invocations.
13  *
14  * Checks the parameters of all incoming invocations, the parameter list is
15  * checked against the defined constraints in $parameters. If the constraint
16  * is met it will return true in matches().
17  *
18  * @since Class available since Release 1.0.0
19  */
20 class PHPUnit_Framework_MockObject_Matcher_Parameters extends PHPUnit_Framework_MockObject_Matcher_StatelessInvocation
21 {
22     /**
23      * @var PHPUnit_Framework_Constraint[]
24      */
25     protected $parameters = array();
26
27     /**
28      * @var PHPUnit_Framework_MockObject_Invocation
29      */
30     protected $invocation;
31
32     /**
33      * @param array $parameters
34      */
35     public function __construct(array $parameters)
36     {
37         foreach ($parameters as $parameter) {
38             if (!($parameter instanceof PHPUnit_Framework_Constraint)) {
39                 $parameter = new PHPUnit_Framework_Constraint_IsEqual(
40                     $parameter
41                 );
42             }
43
44             $this->parameters[] = $parameter;
45         }
46     }
47
48     /**
49      * @return string
50      */
51     public function toString()
52     {
53         $text = 'with parameter';
54
55         foreach ($this->parameters as $index => $parameter) {
56             if ($index > 0) {
57                 $text .= ' and';
58             }
59
60             $text .= ' ' . $index . ' ' . $parameter->toString();
61         }
62
63         return $text;
64     }
65
66     /**
67      * @param  PHPUnit_Framework_MockObject_Invocation $invocation
68      * @return bool
69      */
70     public function matches(PHPUnit_Framework_MockObject_Invocation $invocation)
71     {
72         $this->invocation = $invocation;
73
74         return $this->verify();
75     }
76
77     /**
78      * Checks if the invocation $invocation matches the current rules. If it
79      * does the matcher will get the invoked() method called which should check
80      * if an expectation is met.
81      *
82      * @param  PHPUnit_Framework_MockObject_Invocation      $invocation
83      *                                                                  Object containing information on a mocked or stubbed method which
84      *                                                                  was invoked.
85      * @return bool
86      * @throws PHPUnit_Framework_ExpectationFailedException
87      */
88     public function verify()
89     {
90         if ($this->invocation === null) {
91             throw new PHPUnit_Framework_ExpectationFailedException(
92                 'Mocked method does not exist.'
93             );
94         }
95
96         if (count($this->invocation->parameters) < count($this->parameters)) {
97             $message = 'Parameter count for invocation %s is too low.';
98
99             // The user called `->with($this->anything())`, but may have meant
100             // `->withAnyParameters()`.
101             //
102             // @see https://github.com/sebastianbergmann/phpunit-mock-objects/issues/199
103             if (count($this->parameters) === 1 &&
104                 get_class($this->parameters[0]) === 'PHPUnit_Framework_Constraint_IsAnything') {
105                 $message .= "\nTo allow 0 or more parameters with any value, omit ->with() or use ->withAnyParameters() instead.";
106             }
107
108             throw new PHPUnit_Framework_ExpectationFailedException(
109                 sprintf($message, $this->invocation->toString())
110             );
111         }
112
113         foreach ($this->parameters as $i => $parameter) {
114             $parameter->evaluate(
115                 $this->invocation->parameters[$i],
116                 sprintf(
117                     'Parameter %s for invocation %s does not match expected ' .
118                     'value.',
119                     $i,
120                     $this->invocation->toString()
121                 )
122             );
123         }
124
125         return true;
126     }
127 }