public function renderCalled($subject, Cardinality $cardinality)
{
$isCall = $subject instanceof Call;
if ($isCall) {
$calls = array($subject);
$renderedSubject = $this->bold . $this->exporter->exportCallable($subject->callback()) . $this->reset;
} else {
$calls = $subject->allCalls();
$renderedSubject = $this->bold . $this->exporter->exportCallable($subject) . $this->reset;
}
$minimum = $cardinality->minimum();
$maximum = $cardinality->maximum();
$isNever = null !== $maximum && $maximum < 1;
if ($isNever) {
$expected = 'Expected no ' . $renderedSubject . ' call.';
} else {
$expected = 'Expected ' . $renderedSubject . ' call with any arguments.';
}
$totalCount = count($calls);
$matchCount = $totalCount;
if ($totalCount) {
if ($isNever) {
$renderedResult = $this->fail;
} else {
$renderedResult = $this->pass;
}
$renderedCalls = array();
foreach ($calls as $call) {
$renderedArguments = array();
foreach ($call->arguments()->all() as $argument) {
$renderedArguments[] = ' ' . $renderedResult . ' ' . $this->exporter->export($argument);
}
if (empty($renderedArguments)) {
$renderedArgumentList = ' (no arguments)';
} else {
$renderedArgumentList = ':' . PHP_EOL . implode(PHP_EOL, $renderedArguments);
}
$renderedCalls[] = $renderedResult . ' Call #' . $call->index() . $renderedArgumentList;
}
$actual = PHP_EOL . implode(PHP_EOL, $renderedCalls);
} else {
$actual = '';
}
$cardinality = $this->renderCardinality($minimum, $maximum, $matchCount, $totalCount, $totalCount, true);
return $this->reset . $expected . $cardinality . $actual;
}