/** * Returns whether or not a call has been made in the associated call recorder. * * @todo Maybe rename this to findMatchedCalls? * * @param Phake_CallRecorder_CallExpectation $expectation * * @return Phake_CallRecorder_VerifierResult */ public function verifyCall(Phake_CallRecorder_CallExpectation $expectation) { $matcher = new Phake_Matchers_MethodMatcher($expectation->getMethod(), $expectation->getArgumentMatchers()); $calls = $this->recorder->getAllCalls(); $matchedCalls = array(); $methodNonMatched = array(); $obj_interactions = false; foreach ($calls as $call) { /* @var $call Phake_CallRecorder_Call */ if ($call->getObject() === $expectation->getObject()) { $obj_interactions = true; $args = $call->getArguments(); if ($matcher->matches($call->getMethod(), $args)) { $matchedCalls[] = $this->recorder->getCallInfo($call); } elseif ($call->getMethod() == $expectation->getMethod()) { $methodNonMatched[] = $call->__toString(); } } } $verifierModeResult = $expectation->getVerifierMode()->verify($matchedCalls); if (!$verifierModeResult->getVerified()) { $additions = ''; if (!$obj_interactions) { $additions .= ' In fact, there are no interactions with this mock.'; } if (count($methodNonMatched)) { $additions .= "\nOther Invocations:\n " . implode("\n ", $methodNonMatched); } return new Phake_CallRecorder_VerifierResult(false, array(), $expectation->__toString() . ', ' . $verifierModeResult->getFailureDescription() . '.' . $additions); } return new Phake_CallRecorder_VerifierResult(true, $matchedCalls); }
/** * Tests an internal php nested object issue (#47) */ public function testRetrieveCallInfoUsesStrictChecking() { $objA = new stdClass(); $objB = new stdClass(); $objA->b = $objB; $objB->a = $objA; $objC = new stdClass(); $objD = new stdClass(); $objC->b = $objD; $objD->a = $objC; $call = new Phake_CallRecorder_Call($this->mock, 'someMethod', array($objA), new Phake_MockReader()); $callRecorder = new Phake_CallRecorder_Recorder(); $callRecorder->recordCall($call); $checkCall = new Phake_CallRecorder_Call($this->mock, 'someMethod', array($objC), new Phake_MockReader()); $this->assertNull($callRecorder->getCallInfo($checkCall)); }