/**
* Generate a mock class name.
*
* @param MockDefinition $definition The definition.
*
* @return string The mock class name.
*/
public function generateClassName(MockDefinition $definition)
{
$className = $definition->className();
if (null !== $className) {
return $className;
}
$className = 'PhonyMock';
$parentClassName = $definition->parentClassName();
if (null !== $parentClassName) {
$subject = $parentClassName;
} elseif ($interfaceNames = $definition->interfaceNames()) {
$subject = $interfaceNames[0];
} elseif ($traitNames = $definition->traitNames()) {
$subject = $traitNames[0];
} else {
$subject = null;
}
if (null !== $subject) {
$subjectAtoms = preg_split('/[_\\\\]/', $subject);
$className .= '_' . array_pop($subjectAtoms);
}
$className .= '_' . $this->labelSequencer->next();
return $className;
}