diff --git a/spec/Prophecy/Call/CallCenterSpec.php b/spec/Prophecy/Call/CallCenterSpec.php index e0cdab646..83d61f1ec 100644 --- a/spec/Prophecy/Call/CallCenterSpec.php +++ b/spec/Prophecy/Call/CallCenterSpec.php @@ -3,7 +3,6 @@ namespace spec\Prophecy\Call; use PhpSpec\ObjectBehavior; -use Prophecy\Exception\Call\UnexpectedCallException; use Prophecy\Promise\PromiseInterface; use Prophecy\Prophecy\MethodProphecy; use Prophecy\Prophecy\ObjectProphecy; @@ -124,6 +123,23 @@ function it_executes_promise_of_method_prophecy_that_matches_with_highest_score_ ->shouldReturn('second'); } + function it_throws_exception_if_call_does_not_match_any_of_defined_method_prophecies( + $objectProphecy, + MethodProphecy $method, + ArgumentsWildcard $arguments + ) { + $method->getMethodName()->willReturn('getName'); + $method->getArgumentsWildcard()->willReturn($arguments); + $arguments->scoreArguments(array('world', 'everything'))->willReturn(false); + $arguments->__toString()->willReturn('arg1, arg2'); + + $objectProphecy->getMethodProphecies()->willReturn(array('method1' => array($method))); + $objectProphecy->getMethodProphecies('getName')->willReturn(array($method)); + + $this->shouldThrow('Prophecy\Exception\Call\UnexpectedCallException') + ->duringMakeCall($objectProphecy, 'getName', array('world', 'everything')); + } + function it_returns_null_if_method_prophecy_that_matches_makeCall_arguments_has_no_promise( $objectProphecy, MethodProphecy $method, @@ -161,25 +177,4 @@ function it_finds_recorded_calls_by_a_method_name_and_arguments_wildcard( $calls[0]->getMethodName()->shouldReturn('getName'); $calls[0]->getArguments()->shouldReturn(array('everything')); } - - function it_records_the_error_when_stub_has_got_unexpected_method_calls( - $objectProphecy, - MethodProphecy $method, - ArgumentsWildcard $arguments - ) { - $method->getMethodName()->willReturn('getName'); - $method->getArgumentsWildcard()->willReturn($arguments); - - $arguments->getTokens()->willReturn(array()); - - $objectProphecy->getMethodProphecies()->willReturn(array('getName' => array($method))); - $objectProphecy->getMethodProphecies('getName')->willReturn(array($method)); - $objectProphecy->getMethodProphecies('method1')->willReturn(array()); - $objectProphecy->reveal()->willReturn(new \stdClass()); - - $this->shouldNotThrow('Prophecy\Exception\Call\UnexpectedCallException') - ->duringMakeCall($objectProphecy, 'method1', array()); - - $this->shouldThrow('Prophecy\Exception\Call\UnexpectedCallException')->duringCheckUnexpectedCalls(); - } } diff --git a/spec/Prophecy/Prophecy/MethodProphecySpec.php b/spec/Prophecy/Prophecy/MethodProphecySpec.php index 9b5bde6cd..3ff43af22 100644 --- a/spec/Prophecy/Prophecy/MethodProphecySpec.php +++ b/spec/Prophecy/Prophecy/MethodProphecySpec.php @@ -369,7 +369,6 @@ function it_checks_prediction_via_shouldHave_method_call_with_callback( Call $call1, Call $call2 ) { - $objectProphecy->addMethodProphecy($this)->willReturn(null); $callback = function ($calls, $object, $method) { throw new RuntimeException; }; diff --git a/spec/Prophecy/Prophecy/ObjectProphecySpec.php b/spec/Prophecy/Prophecy/ObjectProphecySpec.php index 27c5ff667..f26896c9a 100644 --- a/spec/Prophecy/Prophecy/ObjectProphecySpec.php +++ b/spec/Prophecy/Prophecy/ObjectProphecySpec.php @@ -276,17 +276,6 @@ function it_returns_new_MethodProphecy_for_all_callback_signatures( $methodProphecy2->shouldNotBe($methodProphecy1); } - - function it_throws_UnexpectedCallException_during_checkPredictions_if_unexpected_method_was_called( - $lazyDouble, CallCenter $callCenter - ) { - $this->beConstructedWith($lazyDouble, $callCenter); - - $callCenter->checkUnexpectedCalls()->willThrow('Prophecy\Exception\Call\UnexpectedCallException'); - - $this->shouldThrow('Prophecy\Exception\Call\UnexpectedCallException') - ->duringCheckProphecyMethodsPredictions(); - } } class ObjectProphecySpecFixtureA diff --git a/src/Prophecy/Call/CallCenter.php b/src/Prophecy/Call/CallCenter.php index e2d0b98f2..64ade06a1 100644 --- a/src/Prophecy/Call/CallCenter.php +++ b/src/Prophecy/Call/CallCenter.php @@ -17,7 +17,6 @@ use Prophecy\Argument\ArgumentsWildcard; use Prophecy\Util\StringUtil; use Prophecy\Exception\Call\UnexpectedCallException; -use SplObjectStorage; /** * Calls receiver & manager. @@ -33,11 +32,6 @@ class CallCenter */ private $recordedCalls = array(); - /** - * @var SplObjectStorage> - */ - private $unexpectedCalls; - /** * Initializes call center. * @@ -46,7 +40,6 @@ class CallCenter public function __construct(StringUtil $util = null) { $this->util = $util ?: new StringUtil; - $this->unexpectedCalls = new SplObjectStorage(); } /** @@ -80,14 +73,16 @@ public function makeCall(ObjectProphecy $prophecy, $methodName, array $arguments } // There are method prophecies, so it's a fake/stub. Searching prophecy for this call - $matches = $this->findMethodProphecies($prophecy, $methodName, $arguments); + $matches = array(); + foreach ($prophecy->getMethodProphecies($methodName) as $methodProphecy) { + if (0 < $score = $methodProphecy->getArgumentsWildcard()->scoreArguments($arguments)) { + $matches[] = array($score, $methodProphecy); + } + } // If fake/stub doesn't have method prophecy for this call - throw exception if (!count($matches)) { - $this->unexpectedCalls->attach(new Call($methodName, $arguments, null, null, $file, $line), $prophecy); - $this->recordedCalls[] = new Call($methodName, $arguments, null, null, $file, $line); - - return null; + throw $this->createUnexpectedCallException($prophecy, $methodName, $arguments); } // Sort matches by their score value @@ -146,22 +141,6 @@ public function findCalls($methodName, ArgumentsWildcard $wildcard) ); } - /** - * @return void - * @throws UnexpectedCallException - */ - public function checkUnexpectedCalls() - { - foreach ($this->unexpectedCalls as $call) { - $prophecy = $this->unexpectedCalls[$call]; - - // If fake/stub doesn't have method prophecy for this call - throw exception - if (!count($this->findMethodProphecies($prophecy, $call->getMethodName(), $call->getArguments()))) { - throw $this->createUnexpectedCallException($prophecy, $call->getMethodName(), $call->getArguments()); - } - } - } - /** * @param ObjectProphecy $prophecy * @param string $methodName @@ -232,25 +211,4 @@ function () use ($indentationLength) { $arguments ); } - - /** - * @param ObjectProphecy $prophecy - * @param string $methodName - * @param array $arguments - * - * @return array - * - * @phpstan-return list - */ - private function findMethodProphecies(ObjectProphecy $prophecy, $methodName, array $arguments) - { - $matches = array(); - foreach ($prophecy->getMethodProphecies($methodName) as $methodProphecy) { - if (0 < $score = $methodProphecy->getArgumentsWildcard()->scoreArguments($arguments)) { - $matches[] = array($score, $methodProphecy); - } - } - - return $matches; - } } diff --git a/src/Prophecy/Prophecy/ObjectProphecy.php b/src/Prophecy/Prophecy/ObjectProphecy.php index d10332f71..ca7f299b1 100644 --- a/src/Prophecy/Prophecy/ObjectProphecy.php +++ b/src/Prophecy/Prophecy/ObjectProphecy.php @@ -214,15 +214,12 @@ public function findProphecyMethodCalls($methodName, ArgumentsWildcard $wildcard * @return void * * @throws \Prophecy\Exception\Prediction\AggregateException If any of registered predictions fail - * @throws \Prophecy\Exception\Call\UnexpectedCallException */ public function checkProphecyMethodsPredictions() { $exception = new AggregateException(sprintf("%s:\n", get_class($this->reveal()))); $exception->setObjectProphecy($this); - $this->callCenter->checkUnexpectedCalls(); - foreach ($this->methodProphecies as $prophecies) { foreach ($prophecies as $prophecy) { try {