diff --git a/tests/Doctrine/Tests/Models/OrnementalOrphanRemoval/Person.php b/tests/Doctrine/Tests/Models/OrnementalOrphanRemoval/Person.php
new file mode 100644
index 000000000..68904001d
--- /dev/null
+++ b/tests/Doctrine/Tests/Models/OrnementalOrphanRemoval/Person.php
@@ -0,0 +1,8 @@
+ [
+ Person::class,
+ PhoneNumber::class,
+ ]
+ ];
+
+ protected function setUp()
+ {
+ $this->useModelSet('ornemental_orphan_removal');
+
+ parent::setUp();
+
+ $person = new Person;
+ $person->id = 'ca41a293-799f-4d68-bf79-626c3ad223ec';
+
+ $phone1 = new PhoneNumber;
+ $phone1->id = 'f4132478-c492-4dfe-aab5-a5b79ae129e7';
+ $phone1->phonenumber = '123456';
+
+ $phone2 = new PhoneNumber;
+ $phone2->id = '7faa4cd3-a155-4fbf-bc42-aa4269a4454d';
+ $phone2->phonenumber = '234567';
+
+ $phone1->person = $person;
+ $phone2->person = $person;
+
+ $this->_em->persist($phone1);
+ $this->_em->persist($phone2);
+ $this->_em->persist($person);
+ $this->_em->flush();
+
+ $this->personId = $person->id;
+ $this->_em->clear();
+ }
+
+ public function testOrphanRemovalIsPurelyOrnemental()
+ {
+ $person = $this->_em->getReference(Person::class, $this->personId);
+
+ $this->_em->remove($person);
+ $this->_em->flush();
+ $this->_em->clear();
+
+ $query = $this->_em->createQuery(
+ 'SELECT u FROM Doctrine\Tests\Models\OrnementalOrphanRemoval\Person u'
+ );
+ $result = $query->getResult();
+
+ $this->assertEquals(0, count($result), 'Person should be removed by EntityManager');
+
+ $query = $this->_em->createQuery(
+ 'SELECT p FROM Doctrine\Tests\Models\OrnementalOrphanRemoval\PhoneNumber p'
+ );
+ $result = $query->getResult();
+
+ $this->assertEquals(2, count($result), 'Orphan removal should not kick in');
+ }
+
+ protected function _getEntityManager(
+ Connection $connection = null,
+ MappingDriver $mappingDriver = null
+ ) {
+ return parent::_getEntityManager($connection, new XmlDriver(
+ __DIR__.DIRECTORY_SEPARATOR.'xml'
+ ));
+ }
+}
diff --git a/tests/Doctrine/Tests/ORM/Functional/xml/Doctrine.Tests.Models.OrnementalOrphanRemoval.Person.dcm.xml b/tests/Doctrine/Tests/ORM/Functional/xml/Doctrine.Tests.Models.OrnementalOrphanRemoval.Person.dcm.xml
new file mode 100644
index 000000000..6d151af12
--- /dev/null
+++ b/tests/Doctrine/Tests/ORM/Functional/xml/Doctrine.Tests.Models.OrnementalOrphanRemoval.Person.dcm.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/tests/Doctrine/Tests/ORM/Functional/xml/Doctrine.Tests.Models.OrnementalOrphanRemoval.PhoneNumber.dcm.xml b/tests/Doctrine/Tests/ORM/Functional/xml/Doctrine.Tests.Models.OrnementalOrphanRemoval.PhoneNumber.dcm.xml
new file mode 100644
index 000000000..2e404254a
--- /dev/null
+++ b/tests/Doctrine/Tests/ORM/Functional/xml/Doctrine.Tests.Models.OrnementalOrphanRemoval.PhoneNumber.dcm.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/Doctrine/Tests/OrmFunctionalTestCase.php b/tests/Doctrine/Tests/OrmFunctionalTestCase.php
index e9299b1c6..d45ebac63 100644
--- a/tests/Doctrine/Tests/OrmFunctionalTestCase.php
+++ b/tests/Doctrine/Tests/OrmFunctionalTestCase.php
@@ -3,6 +3,7 @@
namespace Doctrine\Tests;
use Doctrine\Common\Cache\ArrayCache;
+use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver;
use Doctrine\DBAL\Driver\Connection;
use Doctrine\DBAL\Driver\PDOSqlite\Driver as SqliteDriver;
use Doctrine\DBAL\Logging\DebugStack;
@@ -488,6 +489,11 @@ abstract class OrmFunctionalTestCase extends OrmTestCase
$conn->executeUpdate('DELETE FROM ddc3346_users');
}
+ if (isset($this->_usedModelSets['ornemental_orphan_removal'])) {
+ $conn->executeUpdate('DELETE FROM ornemental_orphan_removal_person');
+ $conn->executeUpdate('DELETE FROM ornemental_orphan_removal_phone_number');
+ }
+
if (isset($this->_usedModelSets['quote'])) {
$conn->executeUpdate(
sprintf(
@@ -678,7 +684,10 @@ abstract class OrmFunctionalTestCase extends OrmTestCase
*
* @throws \Doctrine\ORM\ORMException
*/
- protected function _getEntityManager(Connection $connection = null) {
+ protected function _getEntityManager(
+ Connection $connection = null,
+ MappingDriver $mappingDriver = null
+ ) {
// NOTE: Functional tests use their own shared metadata cache, because
// the actual database platform used during execution has effect on some
// metadata mapping behaviors (like the choice of the ID generation).
@@ -732,7 +741,7 @@ abstract class OrmFunctionalTestCase extends OrmTestCase
}
$config->setMetadataDriverImpl(
- $config->newDefaultAnnotationDriver(
+ $mappingDriver ?? $config->newDefaultAnnotationDriver(
[
realpath(__DIR__ . '/Models/Cache'),
realpath(__DIR__ . '/Models/GeoNames')