2010-02-01 21:48:27 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Doctrine\Tests\ORM\Mapping;
|
|
|
|
|
2018-03-22 14:51:02 +01:00
|
|
|
use Doctrine\Common\Collections\Criteria;
|
2016-05-11 01:55:12 +07:00
|
|
|
use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService;
|
2014-06-19 15:53:11 +02:00
|
|
|
use Doctrine\ORM\Mapping\ClassMetadata;
|
|
|
|
use Doctrine\ORM\Mapping\ClassMetadataFactory;
|
|
|
|
use Doctrine\ORM\Mapping\Driver\XmlDriver;
|
2016-12-08 18:01:04 +01:00
|
|
|
use Doctrine\Tests\Models\DDC117\DDC117Translation;
|
|
|
|
use Doctrine\Tests\Models\DDC3293\DDC3293User;
|
|
|
|
use Doctrine\Tests\Models\DDC3293\DDC3293UserPrefixed;
|
|
|
|
use Doctrine\Tests\Models\DDC889\DDC889Class;
|
|
|
|
use Doctrine\Tests\Models\Generic\SerializationModel;
|
2018-03-22 14:51:02 +01:00
|
|
|
use Doctrine\Tests\Models\GH7141\GH7141Article;
|
2016-12-08 18:01:04 +01:00
|
|
|
use Doctrine\Tests\Models\ValueObjects\Name;
|
|
|
|
use Doctrine\Tests\Models\ValueObjects\Person;
|
2010-02-01 21:48:27 +00:00
|
|
|
|
|
|
|
class XmlMappingDriverTest extends AbstractMappingDriverTest
|
|
|
|
{
|
|
|
|
protected function _loadDriver()
|
|
|
|
{
|
|
|
|
return new XmlDriver(__DIR__ . DIRECTORY_SEPARATOR . 'xml');
|
|
|
|
}
|
2010-02-24 19:31:53 +00:00
|
|
|
|
|
|
|
public function testClassTableInheritanceDiscriminatorMap()
|
|
|
|
{
|
|
|
|
$mappingDriver = $this->_loadDriver();
|
|
|
|
|
2016-12-08 18:01:04 +01:00
|
|
|
$class = new ClassMetadata(CTI::class);
|
2016-05-11 01:55:12 +07:00
|
|
|
$class->initializeReflection(new RuntimeReflectionService());
|
2016-12-08 18:01:04 +01:00
|
|
|
$mappingDriver->loadMetadataForClass(CTI::class, $class);
|
2010-02-24 19:31:53 +00:00
|
|
|
|
2016-12-07 23:33:41 +01:00
|
|
|
$expectedMap = [
|
2016-12-08 18:01:04 +01:00
|
|
|
'foo' => CTIFoo::class,
|
|
|
|
'bar' => CTIBar::class,
|
|
|
|
'baz' => CTIBaz::class,
|
2016-12-07 23:33:41 +01:00
|
|
|
];
|
2010-02-24 19:31:53 +00:00
|
|
|
|
|
|
|
$this->assertEquals(3, count($class->discriminatorMap));
|
|
|
|
$this->assertEquals($expectedMap, $class->discriminatorMap);
|
|
|
|
}
|
2010-06-13 17:21:14 +02:00
|
|
|
|
2015-06-20 14:24:45 +02:00
|
|
|
/**
|
2016-11-16 17:56:07 +01:00
|
|
|
* @expectedException \Doctrine\ORM\Cache\CacheException
|
2015-06-20 14:24:45 +02:00
|
|
|
* @expectedExceptionMessage Entity association field "Doctrine\Tests\ORM\Mapping\XMLSLC#foo" not configured as part of the second-level cache.
|
|
|
|
*/
|
|
|
|
public function testFailingSecondLevelCacheAssociation()
|
|
|
|
{
|
|
|
|
$mappingDriver = $this->_loadDriver();
|
|
|
|
|
2016-12-08 18:01:04 +01:00
|
|
|
$class = new ClassMetadata(XMLSLC::class);
|
|
|
|
$mappingDriver->loadMetadataForClass(XMLSLC::class, $class);
|
2015-06-20 14:24:45 +02:00
|
|
|
}
|
|
|
|
|
2011-12-11 17:24:38 +04:00
|
|
|
public function testIdentifierWithAssociationKey()
|
|
|
|
{
|
|
|
|
$driver = $this->_loadDriver();
|
|
|
|
$em = $this->_getTestEntityManager();
|
2013-12-07 16:40:54 +01:00
|
|
|
$factory = new ClassMetadataFactory();
|
2011-12-11 17:24:38 +04:00
|
|
|
|
|
|
|
$em->getConfiguration()->setMetadataDriverImpl($driver);
|
|
|
|
$factory->setEntityManager($em);
|
|
|
|
|
2016-12-08 18:01:04 +01:00
|
|
|
$class = $factory->getMetadataFor(DDC117Translation::class);
|
2011-12-11 17:24:38 +04:00
|
|
|
|
2016-12-07 23:33:41 +01:00
|
|
|
$this->assertEquals(['language', 'article'], $class->identifier);
|
2011-12-11 17:24:38 +04:00
|
|
|
$this->assertArrayHasKey('article', $class->associationMappings);
|
|
|
|
|
|
|
|
$this->assertArrayHasKey('id', $class->associationMappings['article']);
|
|
|
|
$this->assertTrue($class->associationMappings['article']['id']);
|
|
|
|
}
|
|
|
|
|
2013-12-07 16:40:54 +01:00
|
|
|
public function testEmbeddableMapping()
|
|
|
|
{
|
2016-12-08 18:01:04 +01:00
|
|
|
$class = $this->createClassMetadata(Name::class);
|
2013-12-07 16:40:54 +01:00
|
|
|
|
|
|
|
$this->assertEquals(true, $class->isEmbeddedClass);
|
|
|
|
}
|
|
|
|
|
2015-01-08 13:28:11 +01:00
|
|
|
/**
|
|
|
|
* @group DDC-3293
|
|
|
|
* @group DDC-3477
|
|
|
|
* @group 1238
|
|
|
|
*/
|
2015-01-08 13:33:38 +01:00
|
|
|
public function testEmbeddedMappingsWithUseColumnPrefix()
|
2015-01-08 00:11:34 -02:00
|
|
|
{
|
|
|
|
$factory = new ClassMetadataFactory();
|
2015-01-08 13:33:38 +01:00
|
|
|
$em = $this->_getTestEntityManager();
|
2015-01-08 00:11:34 -02:00
|
|
|
|
2015-01-08 13:33:38 +01:00
|
|
|
$em->getConfiguration()->setMetadataDriverImpl($this->_loadDriver());
|
|
|
|
$factory->setEntityManager($em);
|
2015-01-08 00:11:34 -02:00
|
|
|
|
|
|
|
$this->assertEquals(
|
|
|
|
'__prefix__',
|
2016-12-08 18:01:04 +01:00
|
|
|
$factory->getMetadataFor(DDC3293UserPrefixed::class)
|
2015-01-08 13:33:38 +01:00
|
|
|
->embeddedClasses['address']['columnPrefix']
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @group DDC-3293
|
|
|
|
* @group DDC-3477
|
|
|
|
* @group 1238
|
|
|
|
*/
|
|
|
|
public function testEmbeddedMappingsWithFalseUseColumnPrefix()
|
|
|
|
{
|
|
|
|
$factory = new ClassMetadataFactory();
|
|
|
|
$em = $this->_getTestEntityManager();
|
|
|
|
|
|
|
|
$em->getConfiguration()->setMetadataDriverImpl($this->_loadDriver());
|
|
|
|
$factory->setEntityManager($em);
|
|
|
|
|
|
|
|
$this->assertFalse(
|
2016-12-08 18:01:04 +01:00
|
|
|
$factory->getMetadataFor(DDC3293User::class)
|
2015-01-08 13:33:38 +01:00
|
|
|
->embeddedClasses['address']['columnPrefix']
|
2015-01-08 00:11:34 -02:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2013-12-07 16:40:54 +01:00
|
|
|
public function testEmbeddedMapping()
|
|
|
|
{
|
2016-12-08 18:01:04 +01:00
|
|
|
$class = $this->createClassMetadata(Person::class);
|
2013-12-07 16:40:54 +01:00
|
|
|
|
|
|
|
$this->assertEquals(
|
2016-12-07 23:33:41 +01:00
|
|
|
[
|
|
|
|
'name' => [
|
2016-12-08 18:01:04 +01:00
|
|
|
'class' => Name::class,
|
2014-08-11 16:53:18 +02:00
|
|
|
'columnPrefix' => 'nm_',
|
|
|
|
'declaredField' => null,
|
|
|
|
'originalField' => null,
|
2016-12-07 23:33:41 +01:00
|
|
|
]
|
|
|
|
],
|
2013-12-07 16:40:54 +01:00
|
|
|
$class->embeddedClasses
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2011-12-15 17:12:01 -02:00
|
|
|
/**
|
|
|
|
* @group DDC-1468
|
2011-12-19 22:56:19 +01:00
|
|
|
*
|
2016-11-16 17:56:07 +01:00
|
|
|
* @expectedException \Doctrine\Common\Persistence\Mapping\MappingException
|
2011-12-15 17:12:01 -02:00
|
|
|
* @expectedExceptionMessage Invalid mapping file 'Doctrine.Tests.Models.Generic.SerializationModel.dcm.xml' for class 'Doctrine\Tests\Models\Generic\SerializationModel'.
|
|
|
|
*/
|
|
|
|
public function testInvalidMappingFileException()
|
|
|
|
{
|
2016-12-08 18:01:04 +01:00
|
|
|
$this->createClassMetadata(SerializationModel::class);
|
2011-12-15 17:12:01 -02:00
|
|
|
}
|
|
|
|
|
2010-09-15 21:51:44 +02:00
|
|
|
/**
|
|
|
|
* @param string $xmlMappingFile
|
|
|
|
* @dataProvider dataValidSchema
|
2013-05-13 11:04:36 -03:00
|
|
|
* @group DDC-2429
|
2010-09-15 21:51:44 +02:00
|
|
|
*/
|
|
|
|
public function testValidateXmlSchema($xmlMappingFile)
|
2010-06-13 17:21:14 +02:00
|
|
|
{
|
2018-08-10 11:33:32 +02:00
|
|
|
$xsdSchemaFile = __DIR__ . '/../../../../../doctrine-mapping.xsd';
|
|
|
|
$dom = new \DOMDocument();
|
2010-06-13 17:21:14 +02:00
|
|
|
|
2010-09-15 21:51:44 +02:00
|
|
|
$dom->load($xmlMappingFile);
|
2013-05-13 11:04:36 -03:00
|
|
|
|
2010-06-13 17:21:14 +02:00
|
|
|
$this->assertTrue($dom->schemaValidate($xsdSchemaFile));
|
|
|
|
}
|
2010-09-15 21:51:44 +02:00
|
|
|
|
|
|
|
static public function dataValidSchema()
|
|
|
|
{
|
2013-05-13 11:04:36 -03:00
|
|
|
$list = glob(__DIR__ . '/xml/*.xml');
|
2016-12-07 23:33:41 +01:00
|
|
|
$invalid = [
|
2013-05-13 11:04:36 -03:00
|
|
|
'Doctrine.Tests.Models.DDC889.DDC889Class.dcm'
|
2016-12-07 23:33:41 +01:00
|
|
|
];
|
2013-05-13 11:04:36 -03:00
|
|
|
|
|
|
|
$list = array_filter($list, function($item) use ($invalid){
|
|
|
|
return ! in_array(pathinfo($item, PATHINFO_FILENAME), $invalid);
|
|
|
|
});
|
|
|
|
|
|
|
|
return array_map(function($item){
|
2016-12-07 23:33:41 +01:00
|
|
|
return [$item];
|
2013-05-13 11:04:36 -03:00
|
|
|
}, $list);
|
2010-09-15 21:51:44 +02:00
|
|
|
}
|
2012-03-25 12:54:09 -03:00
|
|
|
|
2018-03-22 14:51:02 +01:00
|
|
|
/**
|
|
|
|
* @group GH-7141
|
|
|
|
*/
|
|
|
|
public function testOneToManyDefaultOrderByAsc()
|
|
|
|
{
|
|
|
|
$driver = $this->_loadDriver();
|
|
|
|
$class = new ClassMetadata(GH7141Article::class);
|
|
|
|
|
|
|
|
$class->initializeReflection(new RuntimeReflectionService());
|
|
|
|
$driver->loadMetadataForClass(GH7141Article::class, $class);
|
|
|
|
|
|
|
|
|
|
|
|
$this->assertEquals(
|
|
|
|
Criteria::ASC,
|
|
|
|
$class->getMetadataValue('associationMappings')['tags']['orderBy']['position']
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2012-03-25 12:54:09 -03:00
|
|
|
/**
|
|
|
|
* @group DDC-889
|
2014-06-19 15:53:37 +02:00
|
|
|
* @expectedException \Doctrine\Common\Persistence\Mapping\MappingException
|
2012-03-25 12:54:09 -03:00
|
|
|
* @expectedExceptionMessage Invalid mapping file 'Doctrine.Tests.Models.DDC889.DDC889Class.dcm.xml' for class 'Doctrine\Tests\Models\DDC889\DDC889Class'.
|
|
|
|
*/
|
|
|
|
public function testinvalidEntityOrMappedSuperClassShouldMentionParentClasses()
|
|
|
|
{
|
2016-12-08 18:01:04 +01:00
|
|
|
$this->createClassMetadata(DDC889Class::class);
|
2012-03-25 12:54:09 -03:00
|
|
|
}
|
2010-02-24 19:31:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
class CTI
|
|
|
|
{
|
|
|
|
public $id;
|
|
|
|
}
|
|
|
|
|
|
|
|
class CTIFoo extends CTI {}
|
|
|
|
class CTIBar extends CTI {}
|
2012-01-02 17:06:22 +01:00
|
|
|
class CTIBaz extends CTI {}
|
2015-06-20 14:24:45 +02:00
|
|
|
|
|
|
|
class XMLSLC
|
|
|
|
{
|
|
|
|
public $foo;
|
|
|
|
}
|
|
|
|
class XMLSLCFoo
|
|
|
|
{
|
|
|
|
public $id;
|
|
|
|
}
|