Skip to content
This repository was archived by the owner on Sep 16, 2021. It is now read-only.

Commit faa61f3

Browse files
committed
Merge pull request #51 from symfony-cmf/extend_bug
Fix bug while extending classes
2 parents ef91540 + ffae1e9 commit faa61f3

File tree

3 files changed

+11
-5
lines changed

3 files changed

+11
-5
lines changed

Mapping/ClassMetadata.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class ClassMetadata extends MergeableClassMetadata
3232
*/
3333
protected $tokenProviders = array();
3434

35-
/**
35+
/**
3636
* @var array
3737
*/
3838
protected $conflictResolver = array('name' => 'throw_exception', 'options' => array());
@@ -184,7 +184,7 @@ public function getClassName()
184184
* The URL schema will be overriden, you can use {parent} to refer to the
185185
* previous URL schema.
186186
*
187-
* @param ClassMetadata $metadata
187+
* @param MergeableInterface $metadata
188188
*/
189189
public function merge(MergeableInterface $metadata)
190190
{

Mapping/MetadataFactory.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
*/
2424
class MetadataFactory implements \IteratorAggregate, MetadataFactoryInterface
2525
{
26-
/**
26+
/**
2727
* @var ClassMetadata[]
2828
*/
2929
protected $metadatas = array();
@@ -115,7 +115,7 @@ protected function resolveMetadata($class)
115115
$metadata = null;
116116
foreach ($metadatas as $data) {
117117
if (null === $metadata) {
118-
$metadata = $data;
118+
$metadata = clone $data;
119119
} else {
120120
$metadata->merge($data);
121121
}
@@ -142,6 +142,7 @@ protected function doResolve($classFqn, array &$addedClasses)
142142
$metadatas[] = $extendData;
143143
}
144144
}
145+
145146
$metadatas[] = $this->metadatas[$classFqn];
146147
}
147148

Tests/Unit/Mapping/MetadataFactoryTest.php

+6-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public function testStoreAndGetClassMetadata()
3636

3737
$this->factory->addMetadatas(array($classMetadata));
3838

39-
$this->assertSame($classMetadata, $this->factory->getMetadataForClass('stdClass'));
39+
$this->assertEquals($classMetadata, $this->factory->getMetadataForClass('stdClass'));
4040
}
4141

4242
public function provideTestMerge()
@@ -148,15 +148,20 @@ public function testMergeExtendedClass()
148148
$parentMetadata->setExtendedClass('Symfony\Cmf\Component\RoutingAuto\Tests\Resources\Fixtures\Parent1Class');
149149

150150
$parent1Metadata = new ClassMetadata('Symfony\Cmf\Component\RoutingAuto\Tests\Resources\Fixtures\Parent1Class');
151+
$parent1Metadata->setUriSchema('{category}/{title}');
151152
$parent1TokenProvider = $this->createTokenProvider('provider1');
152153
$parent1Metadata->addTokenProvider('title', $parent1TokenProvider);
154+
$parent1Metadata->addTokenProvider('category', $this->createTokenProvider('provider11'));
153155

154156
$this->factory->addMetadatas(array($parentMetadata, $parent1Metadata));
155157

156158
$resolvedMetadata = $this->factory->getMetadataForClass('Symfony\Cmf\Component\RoutingAuto\Tests\Resources\Fixtures\ParentClass');
157159
$resolvedProviders = $resolvedMetadata->getTokenProviders();
158160
$this->assertSame($parent1TokenProvider, $resolvedProviders['title']);
159161
$this->assertEquals('{title}', $resolvedMetadata->getUriSchema());
162+
163+
$resolved1Metadata = $this->factory->getMetadataForClass('Symfony\Cmf\Component\RoutingAuto\Tests\Resources\Fixtures\Parent1Class');
164+
$this->assertEquals('{category}/{title}', $resolved1Metadata->getUriSchema());
160165
}
161166

162167
/**

0 commit comments

Comments
 (0)