#1272 DDC-2704 - specification for a property getter utility
This commit is contained in:
parent
8910c2c482
commit
1b0a5e38d9
@ -0,0 +1,129 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Doctrine\Tests\ORM\Mapping\Reflection;
|
||||||
|
|
||||||
|
use Doctrine\Common\Persistence\Mapping\ReflectionService;
|
||||||
|
use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService;
|
||||||
|
use Doctrine\ORM\Mapping\Reflection\ReflectionPropertiesGetter;
|
||||||
|
use Doctrine\Tests\Models\Reflection\ClassWithMixedProperties;
|
||||||
|
use Doctrine\Tests\Models\Reflection\ParentClass;
|
||||||
|
use PHPUnit_Framework_TestCase;
|
||||||
|
use ReflectionClass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests for {@see \Doctrine\ORM\Mapping\Reflection\ReflectionPropertiesGetter}
|
||||||
|
*
|
||||||
|
* @covers \Doctrine\ORM\Mapping\Reflection\ReflectionPropertiesGetter
|
||||||
|
*/
|
||||||
|
class ReflectionPropertiesGetterTest extends PHPUnit_Framework_TestCase
|
||||||
|
{
|
||||||
|
public function testRetrievesProperties()
|
||||||
|
{
|
||||||
|
$properties = (new ReflectionPropertiesGetter(new RuntimeReflectionService()))
|
||||||
|
->getProperties(ClassWithMixedProperties::CLASSNAME);
|
||||||
|
|
||||||
|
$this->assertCount(5, $properties);
|
||||||
|
|
||||||
|
foreach ($properties as $property) {
|
||||||
|
$this->assertInstanceOf('ReflectionProperty', $property);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRetrievedInstancesAreNotStatic()
|
||||||
|
{
|
||||||
|
$properties = (new ReflectionPropertiesGetter(new RuntimeReflectionService()))
|
||||||
|
->getProperties(ClassWithMixedProperties::CLASSNAME);
|
||||||
|
|
||||||
|
foreach ($properties as $property) {
|
||||||
|
$this->assertFalse($property->isStatic());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testExpectedKeys()
|
||||||
|
{
|
||||||
|
$properties = (new ReflectionPropertiesGetter(new RuntimeReflectionService()))
|
||||||
|
->getProperties(ClassWithMixedProperties::CLASSNAME);
|
||||||
|
|
||||||
|
$this->assertArrayHasKey(
|
||||||
|
"\0" . ClassWithMixedProperties::CLASSNAME . "\0" . 'privateProperty',
|
||||||
|
$properties
|
||||||
|
);
|
||||||
|
$this->assertArrayHasKey(
|
||||||
|
"\0" . ClassWithMixedProperties::CLASSNAME . "\0" . 'privatePropertyOverride',
|
||||||
|
$properties
|
||||||
|
);
|
||||||
|
$this->assertArrayHasKey(
|
||||||
|
"\0" . ParentClass::CLASSNAME . "\0" . 'privatePropertyOverride',
|
||||||
|
$properties
|
||||||
|
);
|
||||||
|
$this->assertArrayHasKey(
|
||||||
|
"\0*\0protectedProperty",
|
||||||
|
$properties
|
||||||
|
);
|
||||||
|
$this->assertArrayHasKey(
|
||||||
|
"publicProperty",
|
||||||
|
$properties
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPropertiesAreAccessible()
|
||||||
|
{
|
||||||
|
$object = new ClassWithMixedProperties();
|
||||||
|
$properties = (new ReflectionPropertiesGetter(new RuntimeReflectionService()))
|
||||||
|
->getProperties(ClassWithMixedProperties::CLASSNAME);
|
||||||
|
|
||||||
|
foreach ($properties as $property) {
|
||||||
|
$this->assertSame($property->getName(), $property->getValue($object));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPropertyGetterIsIdempotent()
|
||||||
|
{
|
||||||
|
$getter = (new ReflectionPropertiesGetter(new RuntimeReflectionService()));
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
$getter->getProperties(ClassWithMixedProperties::CLASSNAME),
|
||||||
|
$getter->getProperties(ClassWithMixedProperties::CLASSNAME)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPropertyGetterWillSkipPropertiesNotRetrievedByTheRuntimeReflectionService()
|
||||||
|
{
|
||||||
|
/* @var $reflectionService ReflectionService|\PHPUnit_Framework_MockObject_MockObject */
|
||||||
|
$reflectionService = $this->getMock('Doctrine\Common\Persistence\Mapping\ReflectionService');
|
||||||
|
|
||||||
|
$reflectionService
|
||||||
|
->expects($this->exactly(2))
|
||||||
|
->method('getClass')
|
||||||
|
->with($this->logicalOr(ClassWithMixedProperties::CLASSNAME, ParentClass::CLASSNAME))
|
||||||
|
->will($this->returnValueMap([
|
||||||
|
[ClassWithMixedProperties::CLASSNAME, new ReflectionClass(ClassWithMixedProperties::CLASSNAME)],
|
||||||
|
[ParentClass::CLASSNAME, new ReflectionClass(ParentClass::CLASSNAME)],
|
||||||
|
]));
|
||||||
|
|
||||||
|
$reflectionService
|
||||||
|
->expects($this->atLeastOnce())
|
||||||
|
->method('getAccessibleProperty');
|
||||||
|
|
||||||
|
$getter = (new ReflectionPropertiesGetter($reflectionService));
|
||||||
|
|
||||||
|
$this->assertEmpty($getter->getProperties(ClassWithMixedProperties::CLASSNAME));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPropertyGetterWillSkipClassesNotRetrievedByTheRuntimeReflectionService()
|
||||||
|
{
|
||||||
|
/* @var $reflectionService ReflectionService|\PHPUnit_Framework_MockObject_MockObject */
|
||||||
|
$reflectionService = $this->getMock('Doctrine\Common\Persistence\Mapping\ReflectionService');
|
||||||
|
|
||||||
|
$reflectionService
|
||||||
|
->expects($this->once())
|
||||||
|
->method('getClass')
|
||||||
|
->with(ClassWithMixedProperties::CLASSNAME);
|
||||||
|
|
||||||
|
$reflectionService->expects($this->never())->method('getAccessibleProperty');
|
||||||
|
|
||||||
|
$getter = (new ReflectionPropertiesGetter($reflectionService));
|
||||||
|
|
||||||
|
$this->assertEmpty($getter->getProperties(ClassWithMixedProperties::CLASSNAME));
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user