Pull merge.
[yaffs-website] / vendor / phpspec / prophecy / src / Prophecy / Prediction / CallPrediction.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\Prediction;
13
14 use Prophecy\Call\Call;
15 use Prophecy\Prophecy\ObjectProphecy;
16 use Prophecy\Prophecy\MethodProphecy;
17 use Prophecy\Argument\ArgumentsWildcard;
18 use Prophecy\Argument\Token\AnyValuesToken;
19 use Prophecy\Util\StringUtil;
20 use Prophecy\Exception\Prediction\NoCallsException;
21
22 /**
23  * Call prediction.
24  *
25  * @author Konstantin Kudryashov <ever.zet@gmail.com>
26  */
27 class CallPrediction implements PredictionInterface
28 {
29     private $util;
30
31     /**
32      * Initializes prediction.
33      *
34      * @param StringUtil $util
35      */
36     public function __construct(StringUtil $util = null)
37     {
38         $this->util = $util ?: new StringUtil;
39     }
40
41     /**
42      * Tests that there was at least one call.
43      *
44      * @param Call[]         $calls
45      * @param ObjectProphecy $object
46      * @param MethodProphecy $method
47      *
48      * @throws \Prophecy\Exception\Prediction\NoCallsException
49      */
50     public function check(array $calls, ObjectProphecy $object, MethodProphecy $method)
51     {
52         if (count($calls)) {
53             return;
54         }
55
56         $methodCalls = $object->findProphecyMethodCalls(
57             $method->getMethodName(),
58             new ArgumentsWildcard(array(new AnyValuesToken))
59         );
60
61         if (count($methodCalls)) {
62             throw new NoCallsException(sprintf(
63                 "No calls have been made that match:\n".
64                 "  %s->%s(%s)\n".
65                 "but expected at least one.\n".
66                 "Recorded `%s(...)` calls:\n%s",
67
68                 get_class($object->reveal()),
69                 $method->getMethodName(),
70                 $method->getArgumentsWildcard(),
71                 $method->getMethodName(),
72                 $this->util->stringifyCalls($methodCalls)
73             ), $method);
74         }
75
76         throw new NoCallsException(sprintf(
77             "No calls have been made that match:\n".
78             "  %s->%s(%s)\n".
79             "but expected at least one.",
80
81             get_class($object->reveal()),
82             $method->getMethodName(),
83             $method->getArgumentsWildcard()
84         ), $method);
85     }
86 }