1
0
mirror of synced 2025-01-10 02:57:10 +03:00
doctrine2/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php
2014-09-06 18:29:14 +03:00

133 lines
4.2 KiB
PHP

<?php
namespace Doctrine\Tests\ORM\Tools;
use Doctrine\ORM\Tools\EntityGenerator;
use Doctrine\ORM\Tools\EntityRepositoryGenerator;
use Doctrine\ORM\Mapping\ClassMetadataFactory;
class EntityRepositoryGeneratorTest extends \Doctrine\Tests\OrmTestCase
{
/**
* @var EntityGenerator
*/
private $_generator;
/**
* @var EntityRepositoryGenerator
*/
private $_repositoryGenerator;
private $_tmpDir;
private $_namespace;
/**
* @inheritdoc
*/
public function setUp()
{
$this->_namespace = uniqid("doctrine_");
$this->_tmpDir = \sys_get_temp_dir();
\mkdir($this->_tmpDir . \DIRECTORY_SEPARATOR . $this->_namespace);
$this->_generator = new EntityGenerator();
$this->_generator->setAnnotationPrefix("");
$this->_generator->setGenerateAnnotations(true);
$this->_generator->setGenerateStubMethods(true);
$this->_generator->setRegenerateEntityIfExists(false);
$this->_generator->setUpdateEntityIfExists(true);
$this->_generator->setFieldVisibility(EntityGenerator::FIELD_VISIBLE_PROTECTED);
$this->_repositoryGenerator = new EntityRepositoryGenerator();
}
/**
* @inheritdoc
*/
public function tearDown()
{
$ri = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($this->_tmpDir . '/' . $this->_namespace));
foreach ($ri AS $file) {
/* @var $file \SplFileInfo */
if ($file->isFile()) {
\unlink($file->getPathname());
}
}
rmdir($this->_tmpDir . '/' . $this->_namespace);
}
/**
* @group DDC-3231
*/
public function testGeneratedEntityRepositoryClass()
{
$em = $this->_getTestEntityManager();
$ns = $this->_namespace;
$className = 'DDC3231User';
$this->writeEntityClass('Doctrine\Tests\Models\DDC3231\\' . $className, $ns . '\\' . $className);
$rpath = $this->writeRepositoryClass($ns . '\\' . $className, 'Doctrine\Tests\Models\DDC3231\DDC3231EntityRepository');
$this->assertNotNull($rpath);
$this->assertFileExists($rpath);
require $rpath;
$repo = new \ReflectionClass($em->getRepository($ns . '\\' . $className));
$this->assertSame($ns . '\\' . $className . 'Repository', $repo->getName());
$this->assertSame('Doctrine\Tests\Models\DDC3231\DDC3231EntityRepository', $repo->getParentClass()->getName());
$className2 = 'DDC3231User2';
$this->writeEntityClass('Doctrine\Tests\Models\DDC3231\\' . $className2, $ns . '\\' . $className2);
$rpath2 = $this->writeRepositoryClass($ns . '\\' . $className2);
$this->assertNotNull($rpath2);
$this->assertFileExists($rpath2);
require $rpath2;
$repo2 = new \ReflectionClass($em->getRepository($ns . '\\' . $className2));
$this->assertSame($ns . '\\' . $className2 . 'Repository', $repo2->getName());
$this->assertSame('Doctrine\ORM\EntityRepository', $repo2->getParentClass()->getName());
}
/**
* @param string $className
* @param string $newClassName
*/
private function writeEntityClass($className, $newClassName)
{
$cmf = new ClassMetadataFactory();
$em = $this->_getTestEntityManager();
$cmf->setEntityManager($em);
$metadata = $cmf->getMetadataFor($className);
$metadata->namespace = $this->_namespace;
$metadata->name = $newClassName;
$metadata->customRepositoryClassName = $newClassName . "Repository";
$this->_generator->writeEntityClass($metadata, $this->_tmpDir);
require $this->_tmpDir . '/' . str_replace('\\', '/', $newClassName) . ".php";
}
/**
* @param string $className
* @param string $defaultRepository
* @return string
*/
private function writeRepositoryClass($className, $defaultRepository = null)
{
$this->_repositoryGenerator->setDefaultRepositoryName($defaultRepository);
return $this->_repositoryGenerator->writeEntityRepositoryClass($className . 'Repository', $this->_tmpDir);
}
}