Pull merge.
[yaffs-website] / vendor / phpspec / prophecy / src / Prophecy / Promise / ReturnArgumentPromise.php
1 <?php
2
3 /*
4  * This file is part of the Prophecy.
5  * (c) Konstantin Kudryashov <ever.zet@gmail.com>
6  *     Marcello Duarte <marcello.duarte@gmail.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Prophecy\Promise;
13
14 use Prophecy\Exception\InvalidArgumentException;
15 use Prophecy\Prophecy\ObjectProphecy;
16 use Prophecy\Prophecy\MethodProphecy;
17
18 /**
19  * Return argument promise.
20  *
21  * @author Konstantin Kudryashov <ever.zet@gmail.com>
22  */
23 class ReturnArgumentPromise implements PromiseInterface
24 {
25     /**
26      * @var int
27      */
28     private $index;
29
30     /**
31      * Initializes callback promise.
32      *
33      * @param int $index The zero-indexed number of the argument to return
34      *
35      * @throws \Prophecy\Exception\InvalidArgumentException
36      */
37     public function __construct($index = 0)
38     {
39         if (!is_int($index) || $index < 0) {
40             throw new InvalidArgumentException(sprintf(
41                 'Zero-based index expected as argument to ReturnArgumentPromise, but got %s.',
42                 $index
43             ));
44         }
45         $this->index = $index;
46     }
47
48     /**
49      * Returns nth argument if has one, null otherwise.
50      *
51      * @param array          $args
52      * @param ObjectProphecy $object
53      * @param MethodProphecy $method
54      *
55      * @return null|mixed
56      */
57     public function execute(array $args, ObjectProphecy $object, MethodProphecy $method)
58     {
59         return count($args) > $this->index ? $args[$this->index] : null;
60     }
61 }