Beispiel #1
0
 public function build(\reflectionClass $class, &$instance = null)
 {
     $this->factory = null;
     if ($class->isInterface() === false && $class->isAbstract() === false) {
         $constructor = $class->getConstructor();
         if ($constructor === null || $constructor->isPublic() === true) {
             $constructorParameters = $closureParameters = array();
             if ($constructor !== null) {
                 $this->allArgumentsAreOptional = $constructor->getNumberOfRequiredParameters() === 0;
                 foreach ($constructor->getParameters() as $position => $parameter) {
                     $closureParameters[$position] = ($parameter->isPassedByReference() === false ? '' : '& ') . ($constructorParameters[$position] = '$' . $parameter->getName());
                     if (self::isVariadic($parameter)) {
                         $closureParameters[$position] = '...' . $closureParameters[$position];
                         $constructorParameters[$position] = '...' . $constructorParameters[$position];
                     }
                     switch (true) {
                         case $parameter->isDefaultValueAvailable():
                             $defaultValue = var_export($parameter->getDefaultValue(), true);
                             break;
                         case $parameter->isOptional() && self::isVariadic($parameter) === false:
                             $defaultValue = 'null';
                             break;
                         default:
                             $defaultValue = null;
                     }
                     if ($defaultValue !== null) {
                         $closureParameters[$position] .= ' = ' . $defaultValue;
                     }
                 }
             }
             if ($constructor === null || sizeof($closureParameters) <= 0) {
                 $this->factory = function () use(&$instance, $class) {
                     return $instance = $class->newInstanceArgs(func_get_args());
                 };
             } else {
                 $this->factory = eval('return function(' . join(', ', $closureParameters) . ') use (& $instance) { return ($instance = new ' . $class->getName() . '(' . join(', ', $constructorParameters) . ')); };');
             }
         }
     }
     return $this;
 }
Beispiel #2
0
 protected function generateInterfaceCode(\reflectionClass $class, $mockNamespace, $mockClass)
 {
     $addIteratorAggregate = $class->isInstantiable() === false && ($class->implementsInterface('traversable') === true && $class->implementsInterface('iterator') === false && $class->implementsInterface('iteratorAggregate') === false);
     return 'namespace ' . ltrim($mockNamespace, '\\') . ' {' . PHP_EOL . 'final class ' . $mockClass . ' implements \\' . ($addIteratorAggregate === false ? '' : 'iteratorAggregate, \\') . $class->getName() . ', \\' . __NAMESPACE__ . '\\aggregator' . PHP_EOL . '{' . PHP_EOL . self::generateMockControllerMethods() . $this->generateInterfaceMethodCode($class, $addIteratorAggregate) . '}' . PHP_EOL . '}';
 }
Beispiel #3
0
 protected function isExcluded(\reflectionClass $class)
 {
     $className = $class->getName();
     if ($this->isInExcludedClasses($className) === true || $this->isInExcludedNamespaces($className) === true) {
         return true;
     } else {
         $fileName = $class->getFileName();
         return $fileName === false || $this->isInExcludedDirectories($fileName) === true;
     }
 }
Beispiel #4
0
 protected static function generateInterfaceCode(\reflectionClass $class, $mockNamespace, $mockClass)
 {
     return 'namespace ' . ltrim($mockNamespace, '\\') . ' {' . PHP_EOL . 'final class ' . $mockClass . ' implements \\' . $class->getName() . ', \\' . __NAMESPACE__ . '\\aggregator' . PHP_EOL . '{' . PHP_EOL . self::generateMockControllerMethod() . self::generateInterfaceMethodCode($class) . '}' . PHP_EOL . '}';
 }