Author: Marco Pivetta (ocramius@gmail.com)
Inheritance: implements instantiator\InstantiatorInterface
    /**
     * @param string $className
     *
     * @dataProvider getInstantiableClasses
     */
    public function testInstantiatesSeparateInstances($className)
    {
        $instance1 = $this->instantiator->instantiate($className);
        $instance2 = $this->instantiator->instantiate($className);

        $this->assertEquals($instance1, $instance2);
        $this->assertNotSame($instance1, $instance2);
    }
 public function testInstancesAreNotCloned()
 {
     $className = 'TemporaryClass' . uniqid();
     eval('namespace ' . __NAMESPACE__ . '; class ' . $className . '{}');
     $instance = $this->instantiator->instantiate(__NAMESPACE__ . '\\' . $className);
     $instance->foo = 'bar';
     $instance2 = $this->instantiator->instantiate(__NAMESPACE__ . '\\' . $className);
     $this->assertObjectNotHasAttribute('foo', $instance2);
 }
Example #3
0
 /**
  * @param string $invalidClassName
  *
  * @dataProvider getInvalidClassNames
  */
 public function testInstantiationFromNonExistingClass($invalidClassName)
 {
     $this->setExpectedException('Instantiator\\Exception\\InvalidArgumentException');
     $this->instantiator->instantiate($invalidClassName);
 }
Example #4
0
    /**
     * @param  string       $code
     * @param  string       $className
     * @param  array|string $type
     * @param  boolean      $callOriginalConstructor
     * @param  boolean      $callAutoload
     * @param  array        $arguments
     * @param  boolean      $callOriginalMethods
     * @param  object       $proxyTarget
     * @return object
     */
    protected function getObject($code, $className, $type = '', $callOriginalConstructor = FALSE, $callAutoload = FALSE, array $arguments = array(), $callOriginalMethods = FALSE, $proxyTarget = NULL)
    {
        $this->evalClass($code, $className);

        if ($callOriginalConstructor &&
            is_string($type) &&
            !interface_exists($type, $callAutoload)) {
            if (count($arguments) == 0) {
                $object = new $className;
            } else {
                $class  = new ReflectionClass($className);
                $object = $class->newInstanceArgs($arguments);
            }
        } else {
            $instantiator = new Instantiator;
            $object       = $instantiator->instantiate($className);
        }

        if ($callOriginalMethods) {
            if (!is_object($proxyTarget)) {
                if (count($arguments) == 0) {
                    $proxyTarget = new $type;
                } else {
                    $class       = new ReflectionClass($type);
                    $proxyTarget = $class->newInstanceArgs($arguments);
                }
            }

            $object->__phpunit_setOriginalObject($proxyTarget);
        }

        return $object;
    }
 /**
  * @iterations 20000
  * @group instantiation
  */
 public function testInstantiateUnCloneableAsset()
 {
     $this->instantiator->instantiate('InstantiatorTestAsset\\UnCloneableAsset');
 }
Example #6
0
 /**
  * @param  string       $code
  * @param  string       $className
  * @param  array|string $type
  * @param  boolean      $callOriginalConstructor
  * @param  boolean      $callAutoload
  * @param  array        $arguments
  * @param  boolean      $callOriginalMethods
  * @param  object       $proxyTarget
  * @return object
  */
 protected function getObject($code, $className, $type = '', $callOriginalConstructor = FALSE, $callAutoload = FALSE, array $arguments = array(), $callOriginalMethods = FALSE, $proxyTarget = NULL)
 {
     $this->evalClass($code, $className);
     if ($callOriginalConstructor && is_string($type) && !interface_exists($type, $callAutoload)) {
         if (count($arguments) == 0) {
             $object = new $className();
         } else {
             $class = new ReflectionClass($className);
             $object = $class->newInstanceArgs($arguments);
         }
     } else {
         try {
             $instantiator = new Instantiator();
             $object = $instantiator->instantiate($className);
         } catch (InstantiatorUnexpectedValueException $exception) {
             if ($exception->getPrevious()) {
                 $exception = $exception->getPrevious();
             }
             throw new PHPUnit_Framework_MockObject_RuntimeException($exception->getMessage());
         } catch (InstantiatorInvalidArgumentException $exception) {
             throw new PHPUnit_Framework_MockObject_RuntimeException($exception->getMessage());
         }
     }
     if ($callOriginalMethods) {
         if (!is_object($proxyTarget)) {
             if (count($arguments) == 0) {
                 $proxyTarget = new $type();
             } else {
                 $class = new ReflectionClass($type);
                 $proxyTarget = $class->newInstanceArgs($arguments);
             }
         }
         $object->__phpunit_setOriginalObject($proxyTarget);
     }
     return $object;
 }