public function testDeriveChildMetadata()
{
$cm = new ClassMetadata("Doctrine\\Tests\\ODM\\CouchDB\\Mapping\\Person");
$cm->mapField(array('fieldName' => 'id', 'id' => true));
$cm->mapField(array('fieldName' => 'username', 'type' => 'string'));
$cm->mapAttachments('attachments');
$cm->mapManyToOne(array('targetDocument' => 'Address', 'fieldName' => 'address'));
$child = new ClassMetadata('Doctrine\\Tests\\ODM\\CouchDB\\Mapping\\Employee');
$cm->deriveChildMetadata($child);
$child->mapField(array('fieldName' => 'status', 'type' => 'string'));
$this->assertFalse(isset($child->fieldMappings['status']['declared']));
$this->assertEquals("Doctrine\\Tests\\ODM\\CouchDB\\Mapping\\Employee", $child->name);
$this->assertTrue(isset($child->fieldMappings['id']), "id field has to be on child metadata");
$this->assertEquals("Doctrine\\Tests\\ODM\\CouchDB\\Mapping\\Person", $child->fieldMappings['id']['declared']);
$this->assertTrue(isset($child->fieldMappings['username']), "Username field has to be on child metadata");
$this->assertEquals("Doctrine\\Tests\\ODM\\CouchDB\\Mapping\\Person", $child->fieldMappings['username']['declared']);
$this->assertTrue(isset($child->associationsMappings['address']), "address association has to be on child metadata");
$this->assertEquals("Doctrine\\Tests\\ODM\\CouchDB\\Mapping\\Person", $child->associationsMappings['address']['declared']);
$this->assertEquals("attachments", $child->attachmentField);
$this->assertEquals("Doctrine\\Tests\\ODM\\CouchDB\\Mapping\\Person", $child->attachmentDeclaredClass);
return $child;
}