<?php namespace Doctrine\Tests\Common\Persistence\Mapping; use Doctrine\Tests\DoctrineTestCase; use Doctrine\Common\Persistence\Mapping\Driver\DefaultFileLocator; use Doctrine\Common\Persistence\Mapping\ReflectionService; use Doctrine\Common\Persistence\Mapping\ClassMetadata; use Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory; use Doctrine\Common\Cache\ArrayCache; class ClassMetadataFactoryTest extends DoctrineTestCase { /** * @var TestClassMetadataFactory */ private $cmf; public function setUp() { $driver = $this ->getMock('Doctrine\\Common\\Persistence\\Mapping\\Driver\\MappingDriver'); $metadata = $this ->getMock('Doctrine\\Common\\Persistence\\Mapping\\ClassMetadata'); $this->cmf = new TestClassMetadataFactory($driver, $metadata); } public function testGetCacheDriver() { $this ->assertNull($this->cmf ->getCacheDriver()); $cache = new ArrayCache(); $this->cmf ->setCacheDriver($cache); $this ->assertSame($cache, $this->cmf ->getCacheDriver()); } public function testGetMetadataFor() { $metadata = $this->cmf ->getMetadataFor('stdClass'); $this ->assertInstanceOf('Doctrine\\Common\\Persistence\\Mapping\\ClassMetadata', $metadata); $this ->assertTrue($this->cmf ->hasMetadataFor('stdClass')); } public function testGetParentMetadata() { $metadata = $this->cmf ->getMetadataFor(__NAMESPACE__ . '\\ChildEntity'); $this ->assertInstanceOf('Doctrine\\Common\\Persistence\\Mapping\\ClassMetadata', $metadata); $this ->assertTrue($this->cmf ->hasMetadataFor(__NAMESPACE__ . '\\ChildEntity')); $this ->assertTrue($this->cmf ->hasMetadataFor(__NAMESPACE__ . '\\RootEntity')); } public function testGetCachedMetadata() { $metadata = $this ->getMock('Doctrine\\Common\\Persistence\\Mapping\\ClassMetadata'); $cache = new ArrayCache(); $cache ->save(__NAMESPACE__ . '\\ChildEntity$CLASSMETADATA', $metadata); $this->cmf ->setCacheDriver($cache); $loadedMetadata = $this->cmf ->getMetadataFor(__NAMESPACE__ . '\\ChildEntity'); $this ->assertSame($loadedMetadata, $metadata); } public function testCacheGetMetadataFor() { $cache = new ArrayCache(); $this->cmf ->setCacheDriver($cache); $loadedMetadata = $this->cmf ->getMetadataFor(__NAMESPACE__ . '\\ChildEntity'); $this ->assertSame($loadedMetadata, $cache ->fetch(__NAMESPACE__ . '\\ChildEntity$CLASSMETADATA')); } public function testGetAliasedMetadata() { $loadedMetadata = $this->cmf ->getMetadataFor('prefix:ChildEntity'); $this ->assertTrue($this->cmf ->hasMetadataFor(__NAMESPACE__ . '\\ChildEntity')); $this ->assertTrue($this->cmf ->hasMetadataFor('prefix:ChildEntity')); } } class TestClassMetadataFactory extends AbstractClassMetadataFactory { public $driver; public $metadata; public function __construct($driver, $metadata) { $this->driver = $driver; $this->metadata = $metadata; } protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents) { } protected function getFqcnFromAlias($namespaceAlias, $simpleClassName) { return __NAMESPACE__ . '\\' . $simpleClassName; } protected function initialize() { } protected function newClassMetadataInstance($className) { return $this->metadata; } protected function getDriver() { return $this->driver; } protected function wakeupReflection(ClassMetadata $class, ReflectionService $reflService) { } protected function initializeReflection(ClassMetadata $class, ReflectionService $reflService) { } protected function isEntity(ClassMetadata $class) { return true; } } class RootEntity { } class ChildEntity extends RootEntity { }