public function checkReceived($value = null)
{
$cardinality = $this->resetCardinality();
$argumentCount = func_num_args();
if (0 === $argumentCount) {
$checkValue = false;
} else {
$checkValue = true;
$value = $this->matcherFactory->adapt($value);
}
$isCall = $this->subject instanceof Call;
$matchingEvents = array();
$matchCount = 0;
$eventCount = 0;
foreach ($this->calls as $call) {
$isMatchingCall = false;
foreach ($call->iterableEvents() as $event) {
if ($event instanceof ReceivedEvent) {
++$eventCount;
if (!$checkValue || $value->matches($event->value())) {
$matchingEvents[] = $event;
$isMatchingCall = true;
if ($isCall) {
++$matchCount;
}
}
}
}
if (!$isCall && $isMatchingCall) {
++$matchCount;
}
}
if ($isCall) {
$totalCount = $eventCount;
} else {
$totalCount = $this->callCount;
}
if ($cardinality->matches($matchCount, $totalCount)) {
return $this->assertionRecorder->createSuccess($matchingEvents);
}
}