/** * @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); }
/** * @param string $invalidClassName * * @dataProvider getInvalidClassNames */ public function testInstantiationFromNonExistingClass($invalidClassName) { $this->setExpectedException('Instantiator\\Exception\\InvalidArgumentException'); $this->instantiator->instantiate($invalidClassName); }
/** * @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'); }
/** * @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; }