1
0
mirror of synced 2025-01-18 06:21:40 +03:00

Merge pull request #396 from Ocramius/DDC-1893

DDC-1893 - Updating configuration to reflect latest Doctrine Common changes
This commit is contained in:
Benjamin Eberlei 2012-07-08 09:26:15 -07:00
commit 3b04cf5b2f
9 changed files with 320 additions and 56 deletions

View File

@ -28,7 +28,9 @@ use Doctrine\Common\Cache\Cache,
Doctrine\ORM\Mapping\QuoteStrategy,
Doctrine\ORM\Mapping\DefaultQuoteStrategy,
Doctrine\ORM\Mapping\NamingStrategy,
Doctrine\ORM\Mapping\DefaultNamingStrategy;
Doctrine\ORM\Mapping\DefaultNamingStrategy,
Doctrine\Common\Annotations\SimpleAnnotationReader,
Doctrine\Common\Annotations\CachedReader;
/**
* Configuration container for all configuration options of Doctrine.
@ -124,45 +126,30 @@ class Configuration extends \Doctrine\DBAL\Configuration
}
/**
* Add a new default annotation driver with a correctly configured annotation reader.
* Add a new default annotation driver with a correctly configured annotation reader. If $useSimpleAnnotationReader
* is true, the notation `@Entity` will work, otherwise, the notation `@ORM\Entity` will be supported.
*
* @param array $paths
* @return Mapping\Driver\AnnotationDriver
* @param bool $useSimpleAnnotationReader
* @return AnnotationDriver
*/
public function newDefaultAnnotationDriver($paths = array())
public function newDefaultAnnotationDriver($paths = array(), $useSimpleAnnotationReader = true)
{
switch (true) {
case (version_compare(\Doctrine\Common\Version::VERSION, '2.2.0-DEV', '>=')):
// Register the ORM Annotations in the AnnotationRegistry
AnnotationRegistry::registerFile(__DIR__ . '/Mapping/Driver/DoctrineAnnotations.php');
AnnotationRegistry::registerFile(__DIR__ . '/Mapping/Driver/DoctrineAnnotations.php');
$reader = new \Doctrine\Common\Annotations\SimpleAnnotationReader();
$reader->addNamespace('Doctrine\ORM\Mapping');
if ($useSimpleAnnotationReader) {
// Register the ORM Annotations in the AnnotationRegistry
$reader = new SimpleAnnotationReader();
$reader->addNamespace('Doctrine\ORM\Mapping');
$cachedReader = new CachedReader($reader, new ArrayCache());
$reader = new \Doctrine\Common\Annotations\CachedReader($reader, new ArrayCache());
break;
case (version_compare(\Doctrine\Common\Version::VERSION, '2.1.0-DEV', '>=')):
// Register the ORM Annotations in the AnnotationRegistry
AnnotationRegistry::registerFile(__DIR__ . '/Mapping/Driver/DoctrineAnnotations.php');
$reader = new AnnotationReader();
$reader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\');
$reader->setIgnoreNotImportedAnnotations(true);
$reader->setEnableParsePhpImports(false);
$reader = new \Doctrine\Common\Annotations\CachedReader(
new \Doctrine\Common\Annotations\IndexedReader($reader), new ArrayCache()
);
break;
default:
$reader = new AnnotationReader();
$reader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\');
break;
return new AnnotationDriver($cachedReader, (array) $paths);
}
return new AnnotationDriver($reader, (array) $paths);
return new AnnotationDriver(
new CachedReader(new AnnotationReader(), new ArrayCache()),
(array) $paths
);
}
/**
@ -180,8 +167,8 @@ class Configuration extends \Doctrine\DBAL\Configuration
* Resolves a registered namespace alias to the full namespace.
*
* @param string $entityNamespaceAlias
* @throws ORMException
* @return string
* @throws MappingException
*/
public function getEntityNamespace($entityNamespaceAlias)
{
@ -195,8 +182,7 @@ class Configuration extends \Doctrine\DBAL\Configuration
/**
* Set the entity alias map
*
* @param array $entityAliasMap
* @return void
* @param array $entityNamespaces
*/
public function setEntityNamespaces(array $entityNamespaces)
{
@ -307,6 +293,7 @@ class Configuration extends \Doctrine\DBAL\Configuration
* Gets a previously registered named DQL query.
*
* @param string $name The name of the query.
* @throws ORMException
* @return string The DQL query.
*/
public function getNamedQuery($name)
@ -321,9 +308,9 @@ class Configuration extends \Doctrine\DBAL\Configuration
/**
* Adds a named native query to the configuration.
*
* @param string $name The name of the query.
* @param string $sql The native SQL query string.
* @param ResultSetMapping $rsm The ResultSetMapping used for the results of the SQL query.
* @param string $name The name of the query.
* @param string $sql The native SQL query string.
* @param Query\ResultSetMapping $rsm The ResultSetMapping used for the results of the SQL query.
*/
public function addNamedNativeQuery($name, $sql, Query\ResultSetMapping $rsm)
{
@ -333,9 +320,10 @@ class Configuration extends \Doctrine\DBAL\Configuration
/**
* Gets the components of a previously registered named native query.
*
* @param string $name The name of the query.
* @return array A tuple with the first element being the SQL string and the second
* element being the ResultSetMapping.
* @param string $name The name of the query.
* @throws ORMException
* @return array A tuple with the first element being the SQL string and the second
* element being the ResultSetMapping.
*/
public function getNamedNativeQuery($name)
{
@ -377,6 +365,7 @@ class Configuration extends \Doctrine\DBAL\Configuration
*
* @param string $name
* @param string $className
* @throws ORMException
*/
public function addCustomStringFunction($name, $className)
{
@ -428,6 +417,7 @@ class Configuration extends \Doctrine\DBAL\Configuration
*
* @param string $name
* @param string $className
* @throws ORMException
*/
public function addCustomNumericFunction($name, $className)
{
@ -479,6 +469,7 @@ class Configuration extends \Doctrine\DBAL\Configuration
*
* @param string $name
* @param string $className
* @throws ORMException
*/
public function addCustomDatetimeFunction($name, $className)
{
@ -548,7 +539,7 @@ class Configuration extends \Doctrine\DBAL\Configuration
/**
* Set a class metadata factory.
*
* @param string $cmf
* @param string $cmfName
*/
public function setClassMetadataFactoryName($cmfName)
{

View File

@ -32,7 +32,17 @@ class ORMException extends Exception
public static function missingMappingDriverImpl()
{
return new self("It's a requirement to specify a Metadata Driver and pass it ".
"to Doctrine\ORM\Configuration::setMetadataDriverImpl().");
"to Doctrine\\ORM\\Configuration::setMetadataDriverImpl().");
}
public static function namedQueryNotFound($queryName)
{
return new self('Could not find a named query by the name "' . $queryName . '"');
}
public static function namedNativeQueryNotFound($nativeQueryName)
{
return new self('Could not find a named native query by the name "' . $nativeQueryName . '"');
}
public static function entityMissingForeignAssignedId($entity, $relatedEntity)
@ -54,6 +64,7 @@ class ORMException extends Exception
"you need to adjust the metadata mapping accordingly."
);
}
public static function unrecognizedField($field)
{
return new self("Unrecognized field: $field");
@ -110,7 +121,7 @@ class ORMException extends Exception
}
public static function invalidResultCacheDriver() {
return new self("Invalid result cache driver; it must implement \Doctrine\Common\Cache\Cache.");
return new self("Invalid result cache driver; it must implement Doctrine\\Common\\Cache\\Cache.");
}
public static function notSupported() {
@ -142,7 +153,7 @@ class ORMException extends Exception
public static function invalidEntityRepository($className)
{
return new self("Invalid repository class '".$className."'. ".
"it must be a Doctrine\ORM\EntityRepository.");
"it must be a Doctrine\\ORM\\EntityRepository.");
}
public static function missingIdentifierField($className, $fieldName)

View File

@ -111,12 +111,13 @@ class Setup
* @param boolean $isDevMode
* @param string $proxyDir
* @param Cache $cache
* @param bool $useSimpleAnnotationReader
* @return Configuration
*/
static public function createAnnotationMetadataConfiguration(array $paths, $isDevMode = false, $proxyDir = null, Cache $cache = null)
static public function createAnnotationMetadataConfiguration(array $paths, $isDevMode = false, $proxyDir = null, Cache $cache = null, $useSimpleAnnotationReader = true)
{
$config = self::createConfiguration($isDevMode, $proxyDir, $cache);
$config->setMetadataDriverImpl($config->newDefaultAnnotationDriver($paths));
$config->setMetadataDriverImpl($config->newDefaultAnnotationDriver($paths, $useSimpleAnnotationReader));
return $config;
}

View File

@ -78,7 +78,7 @@ class EntityManagerMock extends \Doctrine\ORM\EntityManager
$config = new \Doctrine\ORM\Configuration();
$config->setProxyDir(__DIR__ . '/../Proxies');
$config->setProxyNamespace('Doctrine\Tests\Proxies');
$config->setMetadataDriverImpl($config->newDefaultAnnotationDriver());
$config->setMetadataDriverImpl($config->newDefaultAnnotationDriver(array(), true));
}
if (is_null($eventManager)) {
$eventManager = new \Doctrine\Common\EventManager();

View File

@ -0,0 +1,261 @@
<?php
namespace Doctrine\Tests\ORM;
use Doctrine\ORM\Mapping as AnnotationNamespace;
use Doctrine\ORM\Configuration;
use Doctrine\ORM\ORMException;
use ReflectionClass;
use PHPUnit_Framework_TestCase;
require_once __DIR__ . '/../TestInit.php';
/**
* Tests for the Configuration object
* @author Marco Pivetta <ocramius@gmail.com>
*/
class ConfigurationTest extends PHPUnit_Framework_TestCase
{
/**
* @var Configuration
*/
private $configuration;
protected function setUp()
{
parent::setUp();
$this->configuration = new Configuration();
}
public function testSetGetProxyDir()
{
$this->assertSame(null, $this->configuration->getProxyDir()); // defaults
$this->configuration->setProxyDir(__DIR__);
$this->assertSame(__DIR__, $this->configuration->getProxyDir());
}
public function testSetGetAutoGenerateProxyClasses()
{
$this->assertSame(true, $this->configuration->getAutoGenerateProxyClasses()); // defaults
$this->configuration->setAutoGenerateProxyClasses(false);
$this->assertSame(false, $this->configuration->getAutoGenerateProxyClasses());
}
public function testSetGetProxyNamespace()
{
$this->assertSame(null, $this->configuration->getProxyNamespace()); // defaults
$this->configuration->setProxyNamespace(__NAMESPACE__);
$this->assertSame(__NAMESPACE__, $this->configuration->getProxyNamespace());
}
public function testSetGetMetadataDriverImpl()
{
$this->assertSame(null, $this->configuration->getMetadataDriverImpl()); // defaults
$metadataDriver = $this->getMock('Doctrine\Common\Persistence\Mapping\Driver\MappingDriver');
$this->configuration->setMetadataDriverImpl($metadataDriver);
$this->assertSame($metadataDriver, $this->configuration->getMetadataDriverImpl());
}
public function testNewDefaultAnnotationDriver()
{
$paths = array(__DIR__);
$reflectionClass = new ReflectionClass(__NAMESPACE__ . '\ConfigurationTestAnnotationReaderChecker');
$annotationDriver = $this->configuration->newDefaultAnnotationDriver($paths, false);
$reader = $annotationDriver->getReader();
$annotation = $reader->getMethodAnnotation(
$reflectionClass->getMethod('namespacedAnnotationMethod'),
'Doctrine\ORM\Mapping\PrePersist'
);
$this->assertInstanceOf('Doctrine\ORM\Mapping\PrePersist', $annotation);
$annotationDriver = $this->configuration->newDefaultAnnotationDriver($paths);
$reader = $annotationDriver->getReader();
$annotation = $reader->getMethodAnnotation(
$reflectionClass->getMethod('simpleAnnotationMethod'),
'Doctrine\ORM\Mapping\PrePersist'
);
$this->assertInstanceOf('Doctrine\ORM\Mapping\PrePersist', $annotation);
}
public function testSetGetEntityNamespace()
{
$this->configuration->addEntityNamespace('TestNamespace', __NAMESPACE__);
$this->assertSame(__NAMESPACE__, $this->configuration->getEntityNamespace('TestNamespace'));
$namespaces = array('OtherNamespace' => __NAMESPACE__);
$this->configuration->setEntityNamespaces($namespaces);
$this->assertSame($namespaces, $this->configuration->getEntityNamespaces());
$this->setExpectedException('Doctrine\ORM\ORMException');
$this->configuration->getEntityNamespace('NonExistingNamespace');
}
public function testSetGetQueryCacheImpl()
{
$this->assertSame(null, $this->configuration->getQueryCacheImpl()); // defaults
$queryCacheImpl = $this->getMock('Doctrine\Common\Cache\Cache');
$this->configuration->setQueryCacheImpl($queryCacheImpl);
$this->assertSame($queryCacheImpl, $this->configuration->getQueryCacheImpl());
}
public function testSetGetHydrationCacheImpl()
{
$this->assertSame(null, $this->configuration->getHydrationCacheImpl()); // defaults
$queryCacheImpl = $this->getMock('Doctrine\Common\Cache\Cache');
$this->configuration->setHydrationCacheImpl($queryCacheImpl);
$this->assertSame($queryCacheImpl, $this->configuration->getHydrationCacheImpl());
}
public function testSetGetMetadataCacheImpl()
{
$this->assertSame(null, $this->configuration->getMetadataCacheImpl()); // defaults
$queryCacheImpl = $this->getMock('Doctrine\Common\Cache\Cache');
$this->configuration->setMetadataCacheImpl($queryCacheImpl);
$this->assertSame($queryCacheImpl, $this->configuration->getMetadataCacheImpl());
}
public function testAddGetNamedQuery()
{
$dql = 'SELECT u FROM User u';
$this->configuration->addNamedQuery('QueryName', $dql);
$this->assertSame($dql, $this->configuration->getNamedQuery('QueryName'));
$this->setExpectedException('Doctrine\ORM\ORMException');
$this->configuration->getNamedQuery('NonExistingQuery');
}
public function testAddGetNamedNativeQuery()
{
$sql = 'SELECT * FROM user';
$rsm = $this->getMock('Doctrine\ORM\Query\ResultSetMapping');
$this->configuration->addNamedNativeQuery('QueryName', $sql, $rsm);
$fetched = $this->configuration->getNamedNativeQuery('QueryName');
$this->assertSame($sql, $fetched[0]);
$this->assertSame($rsm, $fetched[1]);
$this->setExpectedException('Doctrine\ORM\ORMException');
$this->configuration->getNamedQuery('NonExistingQuery');
}
public function ensureProductionSettings()
{
$cache = $this->getMock('Doctrine\Common\Cache\Cache');
$this->configuration->setAutoGenerateProxyClasses(true);
try {
$this->configuration->ensureProductionSettings();
$this->fail('Didn\'t check all production settings');
} catch (ORMException $e) {}
$this->configuration->setQueryCacheImpl($cache);
try {
$this->configuration->ensureProductionSettings();
$this->fail('Didn\'t check all production settings');
} catch (ORMException $e) {}
$this->configuration->setMetadataCacheImpl($cache);
try {
$this->configuration->ensureProductionSettings();
$this->fail('Didn\'t check all production settings');
} catch (ORMException $e) {}
$this->configuration->setAutoGenerateProxyClasses(false);
$this->configuration->ensureProductionSettings();
}
public function testAddGetCustomStringFunction()
{
$this->configuration->addCustomStringFunction('FunctionName', __CLASS__);
$this->assertSame(__CLASS__, $this->configuration->getCustomStringFunction('FunctionName'));
$this->assertSame(null, $this->configuration->getCustomStringFunction('NonExistingFunction'));
$this->configuration->setCustomStringFunctions(array('OtherFunctionName' => __CLASS__));
$this->assertSame(__CLASS__, $this->configuration->getCustomStringFunction('OtherFunctionName'));
$this->setExpectedException('Doctrine\ORM\ORMException');
$this->configuration->addCustomStringFunction('concat', __CLASS__);
}
public function testAddGetCustomNumericFunction()
{
$this->configuration->addCustomNumericFunction('FunctionName', __CLASS__);
$this->assertSame(__CLASS__, $this->configuration->getCustomNumericFunction('FunctionName'));
$this->assertSame(null, $this->configuration->getCustomNumericFunction('NonExistingFunction'));
$this->configuration->setCustomNumericFunctions(array('OtherFunctionName' => __CLASS__));
$this->assertSame(__CLASS__, $this->configuration->getCustomNumericFunction('OtherFunctionName'));
$this->setExpectedException('Doctrine\ORM\ORMException');
$this->configuration->addCustomNumericFunction('abs', __CLASS__);
}
public function testAddGetCustomDatetimeFunction()
{
$this->configuration->addCustomDatetimeFunction('FunctionName', __CLASS__);
$this->assertSame(__CLASS__, $this->configuration->getCustomDatetimeFunction('FunctionName'));
$this->assertSame(null, $this->configuration->getCustomDatetimeFunction('NonExistingFunction'));
$this->configuration->setCustomDatetimeFunctions(array('OtherFunctionName' => __CLASS__));
$this->assertSame(__CLASS__, $this->configuration->getCustomDatetimeFunction('OtherFunctionName'));
$this->setExpectedException('Doctrine\ORM\ORMException');
$this->configuration->addCustomDatetimeFunction('date_add', __CLASS__);
}
public function testAddGetCustomHydrationMode()
{
$this->assertSame(null, $this->configuration->getCustomHydrationMode('NonExisting'));
$this->configuration->addCustomHydrationMode('HydrationModeName', __CLASS__);
$this->assertSame(__CLASS__, $this->configuration->getCustomHydrationMode('HydrationModeName'));
}
public function testSetGetClassMetadataFactoryName()
{
$this->assertSame('Doctrine\ORM\Mapping\ClassMetadataFactory', $this->configuration->getClassMetadataFactoryName());
$this->configuration->setClassMetadataFactoryName(__CLASS__);
$this->assertSame(__CLASS__, $this->configuration->getClassMetadataFactoryName());
}
public function testAddGetFilters()
{
$this->assertSame(null, $this->configuration->getFilterClassName('NonExistingFilter'));
$this->configuration->addFilter('FilterName', __CLASS__);
$this->assertSame(__CLASS__, $this->configuration->getFilterClassName('FilterName'));
}
public function setDefaultRepositoryClassName()
{
$this->assertSame('Doctrine\ORM\EntityRepository', $this->configuration->getDefaultRepositoryClassName());
$repositoryClass = 'Doctrine\Tests\Models\DDC753\DDC753CustomRepository';
$this->configuration->setDefaultRepositoryClassName($repositoryClass);
$this->assertSame($repositoryClass, $this->configuration->getDefaultRepositoryClassName());
$this->setExpectedException('Doctrine\ORM\ORMException');
$this->configuration->setDefaultRepositoryClassName(__CLASS__);
}
public function testSetGetNamingStrategy()
{
$this->assertInstanceOf('Doctrine\ORM\Mapping\NamingStrategy', $this->configuration->getNamingStrategy());
$namingStrategy = $this->getMock('Doctrine\ORM\Mapping\NamingStrategy');
$this->configuration->setNamingStrategy($namingStrategy);
$this->assertSame($namingStrategy, $this->configuration->getNamingStrategy());
}
public function testSetGetQuoteStrategy()
{
$this->assertInstanceOf('Doctrine\ORM\Mapping\QuoteStrategy', $this->configuration->getQuoteStrategy());
$quoteStrategy = $this->getMock('Doctrine\ORM\Mapping\QuoteStrategy');
$this->configuration->setQuoteStrategy($quoteStrategy);
$this->assertSame($quoteStrategy, $this->configuration->getQuoteStrategy());
}
}
class ConfigurationTestAnnotationReaderChecker
{
/** @PrePersist */
public function simpleAnnotationMethod()
{
}
/** @AnnotationNamespace\PrePersist */
public function namespacedAnnotationMethod()
{
}
}

View File

@ -95,7 +95,7 @@ class LockAgentWorker
$config->setProxyNamespace('MyProject\Proxies');
$config->setAutoGenerateProxyClasses(true);
$annotDriver = $config->newDefaultAnnotationDriver(array(__DIR__ . '/../../../Models/'));
$annotDriver = $config->newDefaultAnnotationDriver(array(__DIR__ . '/../../../Models/'), true);
$config->setMetadataDriverImpl($annotDriver);
$cache = new \Doctrine\Common\Cache\ArrayCache();

View File

@ -342,7 +342,7 @@ abstract class OrmFunctionalTestCase extends OrmTestCase
$config->setProxyDir(__DIR__ . '/Proxies');
$config->setProxyNamespace('Doctrine\Tests\Proxies');
$config->setMetadataDriverImpl($config->newDefaultAnnotationDriver());
$config->setMetadataDriverImpl($config->newDefaultAnnotationDriver(array(), true));
$conn = static::$_sharedConn;
$conn->getConfiguration()->setSQLLogger($this->_sqlLoggerStack);

View File

@ -76,7 +76,7 @@ abstract class OrmTestCase extends DoctrineTestCase
$config = new \Doctrine\ORM\Configuration();
$config->setMetadataCacheImpl($metadataCache);
$config->setMetadataDriverImpl($config->newDefaultAnnotationDriver());
$config->setMetadataDriverImpl($config->newDefaultAnnotationDriver(array(), true));
$config->setQueryCacheImpl(self::getSharedQueryCacheImpl());
$config->setProxyDir(__DIR__ . '/Proxies');
$config->setProxyNamespace('Doctrine\Tests\Proxies');