annotate vendor/phpunit/phpunit-mock-objects/src/Matcher/ConsecutiveParameters.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 1fec387a4317
children
rev   line source
Chris@14 1 <?php
Chris@14 2 /*
Chris@14 3 * This file is part of the phpunit-mock-objects package.
Chris@14 4 *
Chris@14 5 * (c) Sebastian Bergmann <sebastian@phpunit.de>
Chris@14 6 *
Chris@14 7 * For the full copyright and license information, please view the LICENSE
Chris@14 8 * file that was distributed with this source code.
Chris@14 9 */
Chris@14 10 namespace PHPUnit\Framework\MockObject\Matcher;
Chris@14 11
Chris@14 12 use PHPUnit\Framework\Constraint\Constraint;
Chris@14 13 use PHPUnit\Framework\Constraint\IsEqual;
Chris@14 14 use PHPUnit\Framework\ExpectationFailedException;
Chris@14 15 use PHPUnit\Framework\MockObject\Invocation as BaseInvocation;
Chris@14 16
Chris@14 17 /**
Chris@14 18 * Invocation matcher which looks for sets of specific parameters in the invocations.
Chris@14 19 *
Chris@14 20 * Checks the parameters of the incoming invocations, the parameter list is
Chris@14 21 * checked against the defined constraints in $parameters. If the constraint
Chris@14 22 * is met it will return true in matches().
Chris@14 23 *
Chris@14 24 * It takes a list of match groups and and increases a call index after each invocation.
Chris@14 25 * So the first invocation uses the first group of constraints, the second the next and so on.
Chris@14 26 */
Chris@14 27 class ConsecutiveParameters extends StatelessInvocation
Chris@14 28 {
Chris@14 29 /**
Chris@14 30 * @var array
Chris@14 31 */
Chris@14 32 private $parameterGroups = [];
Chris@14 33
Chris@14 34 /**
Chris@14 35 * @var array
Chris@14 36 */
Chris@14 37 private $invocations = [];
Chris@14 38
Chris@14 39 /**
Chris@14 40 * @param array $parameterGroups
Chris@14 41 *
Chris@14 42 * @throws \PHPUnit\Framework\Exception
Chris@14 43 */
Chris@14 44 public function __construct(array $parameterGroups)
Chris@14 45 {
Chris@14 46 foreach ($parameterGroups as $index => $parameters) {
Chris@14 47 foreach ($parameters as $parameter) {
Chris@14 48 if (!$parameter instanceof Constraint) {
Chris@14 49 $parameter = new IsEqual($parameter);
Chris@14 50 }
Chris@14 51
Chris@14 52 $this->parameterGroups[$index][] = $parameter;
Chris@14 53 }
Chris@14 54 }
Chris@14 55 }
Chris@14 56
Chris@14 57 /**
Chris@14 58 * @return string
Chris@14 59 */
Chris@14 60 public function toString()
Chris@14 61 {
Chris@14 62 return 'with consecutive parameters';
Chris@14 63 }
Chris@14 64
Chris@14 65 /**
Chris@14 66 * @param BaseInvocation $invocation
Chris@14 67 *
Chris@14 68 * @return bool
Chris@14 69 *
Chris@14 70 * @throws \PHPUnit\Framework\ExpectationFailedException
Chris@14 71 */
Chris@14 72 public function matches(BaseInvocation $invocation)
Chris@14 73 {
Chris@14 74 $this->invocations[] = $invocation;
Chris@14 75 $callIndex = \count($this->invocations) - 1;
Chris@14 76
Chris@14 77 $this->verifyInvocation($invocation, $callIndex);
Chris@14 78
Chris@14 79 return false;
Chris@14 80 }
Chris@14 81
Chris@14 82 public function verify()
Chris@14 83 {
Chris@14 84 foreach ($this->invocations as $callIndex => $invocation) {
Chris@14 85 $this->verifyInvocation($invocation, $callIndex);
Chris@14 86 }
Chris@14 87 }
Chris@14 88
Chris@14 89 /**
Chris@14 90 * Verify a single invocation
Chris@14 91 *
Chris@14 92 * @param BaseInvocation $invocation
Chris@14 93 * @param int $callIndex
Chris@14 94 *
Chris@14 95 * @throws ExpectationFailedException
Chris@14 96 */
Chris@14 97 private function verifyInvocation(BaseInvocation $invocation, $callIndex)
Chris@14 98 {
Chris@14 99 if (isset($this->parameterGroups[$callIndex])) {
Chris@14 100 $parameters = $this->parameterGroups[$callIndex];
Chris@14 101 } else {
Chris@14 102 // no parameter assertion for this call index
Chris@14 103 return;
Chris@14 104 }
Chris@14 105
Chris@14 106 if ($invocation === null) {
Chris@14 107 throw new ExpectationFailedException(
Chris@14 108 'Mocked method does not exist.'
Chris@14 109 );
Chris@14 110 }
Chris@14 111
Chris@14 112 if (\count($invocation->getParameters()) < \count($parameters)) {
Chris@14 113 throw new ExpectationFailedException(
Chris@14 114 \sprintf(
Chris@14 115 'Parameter count for invocation %s is too low.',
Chris@14 116 $invocation->toString()
Chris@14 117 )
Chris@14 118 );
Chris@14 119 }
Chris@14 120
Chris@14 121 foreach ($parameters as $i => $parameter) {
Chris@14 122 $parameter->evaluate(
Chris@14 123 $invocation->getParameters()[$i],
Chris@14 124 \sprintf(
Chris@14 125 'Parameter %s for invocation #%d %s does not match expected ' .
Chris@14 126 'value.',
Chris@14 127 $i,
Chris@14 128 $callIndex,
Chris@14 129 $invocation->toString()
Chris@14 130 )
Chris@14 131 );
Chris@14 132 }
Chris@14 133 }
Chris@14 134 }