MappingDriverTest.php 4.72 KB
Newer Older
1 2 3 4
<?php

namespace Doctrine\Tests\ORM\Mapping;

5 6 7
use Doctrine\ORM\Mapping\ClassMetadata,
    Doctrine\ORM\Mapping\Driver\XmlDriver,
    Doctrine\ORM\Mapping\Driver\YamlDriver;
8 9 10

require_once __DIR__ . '/../../TestInit.php';
 
11
class MappingDriverTest extends \Doctrine\Tests\OrmTestCase
12
{
13 14 15 16 17 18 19 20 21 22 23 24 25 26
    public function testXmlMapping()
    {
        $className = 'Doctrine\Tests\ORM\Mapping\User';
        $xmlDriver = new XmlDriver(__DIR__ . DIRECTORY_SEPARATOR . 'xml', XmlDriver::FILE_PER_CLASS);
        
        $class = new ClassMetadata($className);
        
        $this->assertFalse($xmlDriver->isTransient($className));
        
        $xmlDriver->loadMetadataForClass($className, $class);
        
        $this->_testUserClassMapping($class);
    }
    
27 28
    public function testYamlMapping()
    {
29
        $className = 'Doctrine\Tests\ORM\Mapping\User';
30 31 32 33 34 35 36 37
        $yamlDriver = new YamlDriver(__DIR__ . DIRECTORY_SEPARATOR . 'yaml');
        
        $class = new ClassMetadata($className);
        
        $this->assertFalse($yamlDriver->isTransient($className));
        
        $yamlDriver->loadMetadataForClass($className, $class);
        
38 39 40 41 42 43
        $this->_testUserClassMapping($class);
    }
    
    public function testXmlPreloadMode()
    {
        $className = 'Doctrine\Tests\ORM\Mapping\User';
44
        $xmlDriver = new XmlDriver(__DIR__ . DIRECTORY_SEPARATOR . 'xml', XmlDriver::PRELOAD);
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
        $class = new ClassMetadata($className);
        
        $classNames = $xmlDriver->preload();
        
        $this->assertEquals($className, $classNames[0]);
        $this->assertEquals(1, count($xmlDriver->getPreloadedElements()));
        
        $xmlDriver->loadMetadataForClass($className, $class);
        
        $this->assertEquals(0, count($xmlDriver->getPreloadedElements()));
    }
    
    public function testYamlPreloadMode()
    {
        $className = 'Doctrine\Tests\ORM\Mapping\User';
60
        $yamlDriver = new YamlDriver(__DIR__ . DIRECTORY_SEPARATOR . 'yaml', YamlDriver::PRELOAD);
61 62 63 64 65 66 67 68 69 70 71 72 73 74
        $class = new ClassMetadata($className);
        
        $classNames = $yamlDriver->preload();
        
        $this->assertEquals($className, $classNames[0]);
        $this->assertEquals(1, count($yamlDriver->getPreloadedElements()));
        
        $yamlDriver->loadMetadataForClass($className, $class);
        
        $this->assertEquals(0, count($yamlDriver->getPreloadedElements()));
    }
    
    private function _testUserClassMapping($class)
    {        
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
        $this->assertEquals('cms_users', $class->getTableName());
        $this->assertEquals(ClassMetadata::INHERITANCE_TYPE_NONE, $class->getInheritanceType());
        $this->assertEquals(2, count($class->fieldMappings));
        $this->assertTrue(isset($class->fieldMappings['id']));
        $this->assertTrue(isset($class->fieldMappings['name']));
        $this->assertEquals('string', $class->fieldMappings['name']['type']);
        $this->assertEquals(array('id'), $class->identifier);
        $this->assertEquals(ClassMetadata::GENERATOR_TYPE_AUTO, $class->getIdGeneratorType());
        
        $this->assertEquals(3, count($class->associationMappings));
        $this->assertEquals(1, count($class->inverseMappings));
        
        $this->assertTrue($class->associationMappings['address'] instanceof \Doctrine\ORM\Mapping\OneToOneMapping);
        $this->assertTrue(isset($class->associationMappings['address']));
        $this->assertTrue($class->associationMappings['address']->isOwningSide);
        
        $this->assertTrue($class->associationMappings['phonenumbers'] instanceof \Doctrine\ORM\Mapping\OneToManyMapping);
        $this->assertTrue(isset($class->associationMappings['phonenumbers']));
        $this->assertFalse($class->associationMappings['phonenumbers']->isOwningSide);
        $this->assertTrue($class->associationMappings['phonenumbers']->isInverseSide());
95
        $this->assertTrue($class->associationMappings['phonenumbers']->isCascadePersist);
96 97 98 99
        
        $this->assertTrue($class->associationMappings['groups'] instanceof \Doctrine\ORM\Mapping\ManyToManyMapping);
        $this->assertTrue(isset($class->associationMappings['groups']));
        $this->assertTrue($class->associationMappings['groups']->isOwningSide);
100 101 102
        $this->assertEquals(count($class->lifecycleCallbacks), 2);
        $this->assertEquals($class->lifecycleCallbacks['prePersist'][0], 'doStuffOnPrePersist');
        $this->assertEquals($class->lifecycleCallbacks['postPersist'][0], 'doStuffOnPostPersist');
103
    }
104
}
105

106 107 108 109 110 111 112 113
class User {
    private $id;
    private $name;
    private $address;
    private $phonenumbers;
    private $groups;
    
    // ... rest of code omitted, irrelevant for the mapping tests
114 115 116 117 118 119 120 121 122

    public function doStuffOnPrePersist()
    {
    }

    public function doStuffOnPostPersist()
    {
        
    }
123
}