예제 #1
0
 /**
  * Gathers up all the fiddly details we need for the ClassData object
  *
  * @param   MockData   $obj
  * @param   EntityData $entity
  * @return  MockData
  */
 private function generateMockDataDetails(MockData $obj, EntityData $entity)
 {
     $methodWorker = new MethodDataWorker();
     $propertyWorker = new PropertyDataWorker();
     $targetClass = $entity->getClassNamespace() . '\\' . $entity->getClassName();
     $obj->setHasConstructor($entity->getHasConstructor())->addUseStatements($entity->getUseStatements())->setExtends($entity->getExtends())->addImplements($entity->getImplements())->addMethods($methodWorker->generateMethodObjects($entity->getMethods()))->addProperties($propertyWorker->generatePropertyObjects($targetClass, $entity->getProperties(), $obj->getMethods()));
     return $obj;
 }
 /**
  * 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;
 }