/** * Gets an array of arguments to use in the mock tests * * @param MockData $mockData * @return array */ private function getMockArgs(MockData $mockData) { $args = []; $default = (object) array('visibility' => 'private', 'property' => 'id', 'value' => 1); // try to get one from public/protected/private $props = $mockData->getProperties(); foreach (array('public', 'private', 'protected') as $vis) { if (!empty($props[$vis])) { if ($arg = $this->getRandomProperty($props[$vis])) { $args[] = $arg; } } } return empty($args) ? array($default) : $args; }
/** * Generates use statements out of namespaces for all classes used by the mocked class * * To help out with generating mocks, we're gathering the namespaces * that are used in typehinting as well as the ones declared at the * top of the file. * * @param MockData $mockData MockData object * @param EntityData $entityData EntityData object * @return string */ protected function generateUseStatements(MockData $mockData, EntityData $entityData) { $classUse = $mockData->getUseStatements(); $mockedClassUse = "use {$entityData->getClassNamespace()}\\{$entityData->getClassName()};"; array_unshift($classUse, $mockedClassUse); $propUse = $this->getUseStatementsFromClassProperties($mockData->getProperties()); $methodUse = $this->getUseStatementsFromClassMethods($mockData->getMethods()); $statements = array_merge($classUse, $propUse, $methodUse); return join(PHP_EOL, array_unique($statements)); }
/** * Generates the mock visibility arrays * * @param MockData $mockData MockData object * @return string */ private function getPropertyConstants(MockData $mockData) { $visStr = " \$constant = [];"; $properties = $mockData->getProperties(); if (!empty($properties['constant'])) { $visStr = " \$constant = array("; foreach ($properties['constant'] as $prop) { $visStr .= "'{$prop->name}', "; } $visStr = rtrim($visStr, ', ') . ');'; } return $visStr; }