public function ProxyLogicTest::setUp in Plug 7
File
- lib/
doctrine/ common/ tests/ Doctrine/ Tests/ Common/ Proxy/ ProxyLogicTest.php, line 63
Class
- ProxyLogicTest
- Test the generated proxies behavior. These tests make assumptions about the structure of LazyLoadableObject
Namespace
Doctrine\Tests\Common\ProxyCode
public function setUp() {
$this->proxyLoader = $loader = $this
->getMock('stdClass', array(
'load',
), array(), '', false);
$this->initializerCallbackMock = $this
->getMock('stdClass', array(
'__invoke',
));
$identifier = $this->identifier;
$this->lazyLoadableObjectMetadata = $metadata = new LazyLoadableObjectClassMetadata();
// emulating what should happen in a proxy factory
$cloner = function (LazyLoadableObject $proxy) use ($loader, $identifier, $metadata) {
/* @var $proxy LazyLoadableObject|Proxy */
if ($proxy
->__isInitialized()) {
return;
}
$proxy
->__setInitialized(true);
$proxy
->__setInitializer(null);
$original = $loader
->load($identifier);
if (null === $original) {
throw new UnexpectedValueException();
}
foreach ($metadata
->getReflectionClass()
->getProperties() as $reflProperty) {
$propertyName = $reflProperty
->getName();
if ($metadata
->hasField($propertyName) || $metadata
->hasAssociation($propertyName)) {
$reflProperty
->setAccessible(true);
$reflProperty
->setValue($proxy, $reflProperty
->getValue($original));
}
}
};
$proxyClassName = 'Doctrine\\Tests\\Common\\ProxyProxy\\__CG__\\Doctrine\\Tests\\Common\\Proxy\\LazyLoadableObject';
// creating the proxy class
if (!class_exists($proxyClassName, false)) {
$proxyGenerator = new ProxyGenerator(__DIR__ . '/generated', __NAMESPACE__ . 'Proxy', true);
$proxyGenerator
->generateProxyClass($metadata);
require_once $proxyGenerator
->getProxyFileName($metadata
->getName());
}
$this->lazyObject = new $proxyClassName($this
->getClosure($this->initializerCallbackMock), $cloner);
// setting identifiers in the proxy via reflection
foreach ($metadata
->getIdentifierFieldNames() as $idField) {
$prop = $metadata
->getReflectionClass()
->getProperty($idField);
$prop
->setAccessible(true);
$prop
->setValue($this->lazyObject, $identifier[$idField]);
}
$this
->assertFalse($this->lazyObject
->__isInitialized());
}