3 namespace Doctrine\Tests\Common\Persistence\Mapping;
5 use Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain;
6 use Doctrine\Tests\DoctrineTestCase;
8 class DriverChainTest extends DoctrineTestCase
10 public function testDelegateToMatchingNamespaceDriver()
12 $className = 'Doctrine\Tests\Common\Persistence\Mapping\DriverChainEntity';
13 $classMetadata = $this->getMock('Doctrine\Common\Persistence\Mapping\ClassMetadata');
15 $chain = new MappingDriverChain();
17 $driver1 = $this->getMock('Doctrine\Common\Persistence\Mapping\Driver\MappingDriver');
18 $driver1->expects($this->never())
19 ->method('loadMetadataForClass');
20 $driver1->expectS($this->never())
21 ->method('isTransient');
23 $driver2 = $this->getMock('Doctrine\Common\Persistence\Mapping\Driver\MappingDriver');
24 $driver2->expects($this->at(0))
25 ->method('loadMetadataForClass')
26 ->with($this->equalTo($className), $this->equalTo($classMetadata));
27 $driver2->expects($this->at(1))
28 ->method('isTransient')
29 ->with($this->equalTo($className))
30 ->will($this->returnValue( true ));
32 $chain->addDriver($driver1, 'Doctrine\Tests\Models\Company');
33 $chain->addDriver($driver2, 'Doctrine\Tests\Common\Persistence\Mapping');
35 $chain->loadMetadataForClass($className, $classMetadata);
37 $this->assertTrue( $chain->isTransient($className) );
40 public function testLoadMetadata_NoDelegatorFound_ThrowsMappingException()
42 $className = 'Doctrine\Tests\Common\Persistence\Mapping\DriverChainEntity';
43 $classMetadata = $this->getMock('Doctrine\Common\Persistence\Mapping\ClassMetadata');
45 $chain = new MappingDriverChain();
47 $this->setExpectedException('Doctrine\Common\Persistence\Mapping\MappingException');
48 $chain->loadMetadataForClass($className, $classMetadata);
51 public function testGatherAllClassNames()
53 $className = 'Doctrine\Tests\Common\Persistence\Mapping\DriverChainEntity';
54 $classMetadata = $this->getMock('Doctrine\Common\Peristence\ClassMetadata');
56 $chain = new MappingDriverChain();
58 $driver1 = $this->getMock('Doctrine\Common\Persistence\Mapping\Driver\MappingDriver');
59 $driver1->expects($this->once())
60 ->method('getAllClassNames')
61 ->will($this->returnValue(array('Doctrine\Tests\Models\Company\Foo')));
63 $driver2 = $this->getMock('Doctrine\Common\Persistence\Mapping\Driver\MappingDriver');
64 $driver2->expects($this->once())
65 ->method('getAllClassNames')
66 ->will($this->returnValue(array('Doctrine\Tests\ORM\Mapping\Bar', 'Doctrine\Tests\ORM\Mapping\Baz', 'FooBarBaz')));
68 $chain->addDriver($driver1, 'Doctrine\Tests\Models\Company');
69 $chain->addDriver($driver2, 'Doctrine\Tests\ORM\Mapping');
71 $this->assertEquals(array(
72 'Doctrine\Tests\Models\Company\Foo',
73 'Doctrine\Tests\ORM\Mapping\Bar',
74 'Doctrine\Tests\ORM\Mapping\Baz'
75 ), $chain->getAllClassNames());
81 public function testIsTransient()
83 $driver1 = $this->getMock('Doctrine\Common\Persistence\Mapping\Driver\MappingDriver');
84 $chain = new MappingDriverChain();
85 $chain->addDriver($driver1, 'Doctrine\Tests\Models\CMS');
87 $this->assertTrue($chain->isTransient('stdClass'), "stdClass isTransient");
93 public function testDefaultDriver()
95 $companyDriver = $this->getMock('Doctrine\Common\Persistence\Mapping\Driver\MappingDriver');
96 $dafaultDriver = $this->getMock('Doctrine\Common\Persistence\Mapping\Driver\MappingDriver');
97 $entityClassName = 'Doctrine\Tests\ORM\Mapping\DriverChainEntity';
98 $managerClassName = 'Doctrine\Tests\Models\Company\CompanyManager';
99 $chain = new MappingDriverChain();
101 $companyDriver->expects($this->never())
102 ->method('loadMetadataForClass');
103 $companyDriver->expects($this->once())
104 ->method('isTransient')
105 ->with($this->equalTo($managerClassName))
106 ->will($this->returnValue(false));
108 $dafaultDriver->expects($this->never())
109 ->method('loadMetadataForClass');
110 $dafaultDriver->expects($this->once())
111 ->method('isTransient')
112 ->with($this->equalTo($entityClassName))
113 ->will($this->returnValue(true));
115 $this->assertNull($chain->getDefaultDriver());
117 $chain->setDefaultDriver($dafaultDriver);
118 $chain->addDriver($companyDriver, 'Doctrine\Tests\Models\Company');
120 $this->assertSame($dafaultDriver, $chain->getDefaultDriver());
122 $this->assertTrue($chain->isTransient($entityClassName));
123 $this->assertFalse($chain->isTransient($managerClassName));
127 class DriverChainEntity