1
0
mirror of synced 2025-01-20 23:41:39 +03:00
doctrine2/tests/Doctrine/Tests/ORM/Mapping/Reflection/ReflectionPropertiesGetterTest.php

130 lines
4.6 KiB
PHP

<?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));
}
}