the whole shebang

This commit is contained in:
2014-11-25 16:42:40 +01:00
parent 7f74c0613e
commit ab1334c0cf
3686 changed files with 496409 additions and 1 deletions

View File

@@ -0,0 +1,7 @@
<?php
namespace Doctrine\Tests\Common\Reflection;
class SameNamespaceParent extends Dummies\NoParent
{
}

View File

@@ -0,0 +1,8 @@
<?php
namespace Doctrine\Tests\Common\Reflection\Dummies;
class NoParent
{
public $test;
}

View File

@@ -0,0 +1,7 @@
<?php
namespace Doctrine\Tests\Common\Reflection;
class FullyClassifiedParent extends \Doctrine\Tests\Common\Reflection\NoParent
{
}

View File

@@ -0,0 +1,8 @@
<?php
namespace Doctrine\Tests\Common\Reflection;
class NoParent
{
public $test;
}

View File

@@ -0,0 +1,192 @@
<?php
namespace Doctrine\Tests\Common\Reflection;
use PHPUnit_Framework_TestCase;
use Doctrine\Common\Reflection\RuntimePublicReflectionProperty;
use Doctrine\Common\Proxy\Proxy;
class RuntimePublicReflectionPropertyTest extends PHPUnit_Framework_TestCase
{
public function testGetValueOnProxyPublicProperty()
{
$getCheckMock = $this->getMock('stdClass', array('callGet'));
$getCheckMock->expects($this->never())->method('callGet');
$initializer = function () use ($getCheckMock) {
call_user_func($getCheckMock);
};
$mockProxy = new RuntimePublicReflectionPropertyTestProxyMock();
$mockProxy->__setInitializer($initializer);
$reflProperty = new RuntimePublicReflectionProperty(
__NAMESPACE__ . '\RuntimePublicReflectionPropertyTestProxyMock',
'checkedProperty'
);
$this->assertSame('testValue', $reflProperty->getValue($mockProxy));
unset($mockProxy->checkedProperty);
$this->assertNull($reflProperty->getValue($mockProxy));
}
public function testSetValueOnProxyPublicProperty()
{
$setCheckMock = $this->getMock('stdClass', array('neverCallSet'));
$setCheckMock->expects($this->never())->method('neverCallSet');
$initializer = function () use ($setCheckMock) {
call_user_func(array($setCheckMock, 'neverCallSet'));
};
$mockProxy = new RuntimePublicReflectionPropertyTestProxyMock();
$mockProxy->__setInitializer($initializer);
$reflProperty = new RuntimePublicReflectionProperty(
__NAMESPACE__ . '\RuntimePublicReflectionPropertyTestProxyMock',
'checkedProperty'
);
$reflProperty->setValue($mockProxy, 'newValue');
$this->assertSame('newValue', $mockProxy->checkedProperty);
unset($mockProxy->checkedProperty);
$reflProperty->setValue($mockProxy, 'otherNewValue');
$this->assertSame('otherNewValue', $mockProxy->checkedProperty);
$setCheckMock = $this->getMock('stdClass', array('callSet'));
$setCheckMock->expects($this->once())->method('callSet');
$initializer = function () use ($setCheckMock) {
call_user_func(array($setCheckMock, 'callSet'));
};
$mockProxy->__setInitializer($initializer);
$mockProxy->__setInitialized(true);
unset($mockProxy->checkedProperty);
$reflProperty->setValue($mockProxy, 'againNewValue');
$this->assertSame('againNewValue', $mockProxy->checkedProperty);
}
}
/**
* Mock that simulates proxy public property lazy loading
*/
class RuntimePublicReflectionPropertyTestProxyMock implements Proxy
{
/**
* @var \Closure|null
*/
private $initializer = null;
/**
* @var \Closure|null
*/
private $initialized = false;
/**
* @var string
*/
public $checkedProperty = 'testValue';
/**
* {@inheritDoc}
*/
public function __getInitializer()
{
return $this->initializer;
}
/**
* {@inheritDoc}
*/
public function __setInitializer(\Closure $initializer = null)
{
$this->initializer = $initializer;
}
/**
* {@inheritDoc}
*/
public function __getLazyProperties()
{
}
/**
* {@inheritDoc}
*/
public function __load()
{
}
/**
* {@inheritDoc}
*/
public function __isInitialized()
{
return $this->initialized;
}
/**
* {@inheritDoc}
*/
public function __setInitialized($initialized)
{
$this->initialized = (bool) $initialized;
}
/**
* @param string $name
*/
public function __get($name)
{
if ($this->initializer) {
$cb = $this->initializer;
$cb();
}
return $this->checkedProperty;
}
/**
* @param string $name
* @param mixed $value
*/
public function __set($name, $value)
{
if ($this->initializer) {
$cb = $this->initializer;
$cb();
}
// triggers notices if `$name` is used: see https://bugs.php.net/bug.php?id=63463
$this->checkedProperty = $value;
}
/**
* @param string $name
*
* @return integer
*/
public function __isset($name)
{
if ($this->initializer) {
$cb = $this->initializer;
$cb();
}
return isset($this->checkedProperty);
}
/**
* {@inheritDoc}
*/
public function __setCloner(\Closure $cloner = null)
{
}
/**
* {@inheritDoc}
*/
public function __getCloner()
{
}
}

View File

@@ -0,0 +1,7 @@
<?php
namespace Doctrine\Tests\Common\Reflection;
class SameNamespaceParent extends NoParent
{
}

View File

@@ -0,0 +1,63 @@
<?php
namespace Doctrine\Tests\Common\Reflection;
use Doctrine\Tests\DoctrineTestCase;
use Doctrine\Common\Reflection\StaticReflectionParser;
use Doctrine\Common\Reflection\Psr0FindFile;
class StaticReflectionParserTest extends DoctrineTestCase
{
/**
* @dataProvider classAnnotationOptimize
*
* @param bool $classAnnotationOptimize
*
* @return void
*/
public function testParentClass($classAnnotationOptimize)
{
$testsRoot = substr(__DIR__, 0, -strlen(__NAMESPACE__) - 1);
$paths = array(
'Doctrine\\Tests' => array($testsRoot),
);
$noParentClassName = 'Doctrine\\Tests\\Common\\Reflection\\NoParent';
$staticReflectionParser = new StaticReflectionParser($noParentClassName, new Psr0FindFile($paths), $classAnnotationOptimize);
$declaringClassName = $staticReflectionParser->getStaticReflectionParserForDeclaringClass('property', 'test')->getClassName();
$this->assertEquals($noParentClassName, $declaringClassName);
$className = 'Doctrine\\Tests\\Common\\Reflection\\FullyClassifiedParent';
$staticReflectionParser = new StaticReflectionParser($className, new Psr0FindFile($paths), $classAnnotationOptimize);
$declaringClassName = $staticReflectionParser->getStaticReflectionParserForDeclaringClass('property', 'test')->getClassName();
$this->assertEquals($noParentClassName, $declaringClassName);
$className = 'Doctrine\\Tests\\Common\\Reflection\\SameNamespaceParent';
$staticReflectionParser = new StaticReflectionParser($className, new Psr0FindFile($paths), $classAnnotationOptimize);
$declaringClassName = $staticReflectionParser->getStaticReflectionParserForDeclaringClass('property', 'test')->getClassName();
$this->assertEquals($noParentClassName, $declaringClassName);
$dummyParentClassName = 'Doctrine\\Tests\\Common\\Reflection\\Dummies\\NoParent';
$className = 'Doctrine\\Tests\\Common\\Reflection\\DeeperNamespaceParent';
$staticReflectionParser = new StaticReflectionParser($className, new Psr0FindFile($paths), $classAnnotationOptimize);
$declaringClassName = $staticReflectionParser->getStaticReflectionParserForDeclaringClass('property', 'test')->getClassName();
$this->assertEquals($dummyParentClassName, $declaringClassName);
$className = 'Doctrine\\Tests\\Common\\Reflection\\UseParent';
$staticReflectionParser = new StaticReflectionParser($className, new Psr0FindFile($paths), $classAnnotationOptimize);
$declaringClassName = $staticReflectionParser->getStaticReflectionParserForDeclaringClass('property', 'test')->getClassName();
$this->assertEquals($dummyParentClassName, $declaringClassName);
}
/**
* @return array
*/
public function classAnnotationOptimize()
{
return array(
array(false),
array(true)
);
}
}

View File

@@ -0,0 +1,9 @@
<?php
namespace Doctrine\Tests\Common\Reflection;
use Doctrine\Tests\Common\Reflection\Dummies\NoParent as Test;
class UseParent extends Test
{
}