Skip to content

Commit

Permalink
Revert phpspec#441
Browse files Browse the repository at this point in the history
  • Loading branch information
Jean85 committed Mar 17, 2021
1 parent 8a38463 commit 3780d3f
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 85 deletions.
39 changes: 17 additions & 22 deletions spec/Prophecy/Call/CallCenterSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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();
}
}
3 changes: 1 addition & 2 deletions spec/Prophecy/Prophecy/MethodProphecySpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,7 @@ function it_records_even_failed_checked_predictions(
$this->withArguments($arguments);

try {
$this->callOnWrappedObject('shouldHave', array($prediction));
$this->callOnWrappedObject('shouldHave', array($prediction));
} catch (\Exception $e) {}

$this->getCheckedPredictions()->shouldReturn(array($prediction));
Expand All @@ -365,7 +365,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;
};
Expand Down
11 changes: 0 additions & 11 deletions spec/Prophecy/Prophecy/ObjectProphecySpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -287,17 +287,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
Expand Down
54 changes: 7 additions & 47 deletions src/Prophecy/Call/CallCenter.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
use Prophecy\Argument\ArgumentsWildcard;
use Prophecy\Util\StringUtil;
use Prophecy\Exception\Call\UnexpectedCallException;
use SplObjectStorage;

/**
* Calls receiver & manager.
Expand All @@ -32,11 +31,6 @@ class CallCenter
*/
private $recordedCalls = array();

/**
* @var SplObjectStorage
*/
private $unexpectedCalls;

/**
* Initializes call center.
*
Expand All @@ -45,7 +39,6 @@ class CallCenter
public function __construct(StringUtil $util = null)
{
$this->util = $util ?: new StringUtil;
$this->unexpectedCalls = new SplObjectStorage();
}

/**
Expand Down Expand Up @@ -79,14 +72,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
Expand Down Expand Up @@ -145,22 +140,6 @@ public function findCalls($methodName, ArgumentsWildcard $wildcard)
);
}

/**
* @throws UnexpectedCallException
*/
public function checkUnexpectedCalls()
{
/** @var Call $call */
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());
}
}
}

private function createUnexpectedCallException(ObjectProphecy $prophecy, $methodName,
array $arguments)
{
Expand Down Expand Up @@ -218,23 +197,4 @@ function () use ($indentationLength) {
$arguments
);
}

/**
* @param ObjectProphecy $prophecy
* @param string $methodName
* @param array $arguments
*
* @return array
*/
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;
}
}
3 changes: 0 additions & 3 deletions src/Prophecy/Prophecy/ObjectProphecy.php
Original file line number Diff line number Diff line change
Expand Up @@ -210,15 +210,12 @@ public function findProphecyMethodCalls($methodName, ArgumentsWildcard $wildcard
* Checks that registered method predictions do not fail.
*
* @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 {
Expand Down

0 comments on commit 3780d3f

Please sign in to comment.