public function exactly($number, $failMessage = null)
{
$callsNumber = $this->removeFromManager()->countBeforeAndAfterCalls();
if ((int) $number != $number) {
throw new atoum\exceptions\logic\invalidArgument('Argument 1 of ' . __FUNCTION__ . ' must be an integer');
}
if ($callsNumber == $number) {
$this->pass();
} else {
if ($failMessage === null) {
$failMessage = $this->__('%s is called %d time instead of %d', '%s is called %d times instead of %d', $callsNumber, $this->call, $callsNumber, $number);
if (sizeof($this->beforeCalls) > 0) {
$beforeCalls = array();
foreach ($this->beforeCalls as $asserter) {
$beforeCalls[] = (string) $asserter->getCall();
}
$failMessage = $this->_('%s before %s', $failMessage, join(', ', $beforeCalls));
}
if (sizeof($this->afterCalls) > 0) {
$afterCalls = array();
foreach ($this->afterCalls as $asserter) {
$afterCalls[] = (string) $asserter->getCall();
}
$failMessage = $this->_('%s after %s', $failMessage, join(', ', $afterCalls));
}
$failMessage .= $this->getCallsAsString();
}
$this->fail($failMessage);
}
return $this;
}