/** * 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; }