Completed
Push — master ( f71d4e...c66cbf )
by
unknown
08:22 queued 01:15
created

Mapping/Metadata/Driver/AbstractDriverTest.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace OpenOrchestra\FunctionalTests\Mapping\Metadata\Driver;
4
5
use Metadata\PropertyMetadata;
6
use Metadata\ClassMetadata;
7
use Metadata\Driver\DriverInterface;
8
use OpenOrchestra\Mapping\Metadata\MergeableClassMetadataFactory;
9
use OpenOrchestra\Mapping\Metadata\PropertySearchMetadataFactory;
10
use OpenOrchestra\FunctionalTests\Mapping\Metadata\Driver\FakeClass\FakeClassMetadata;
11
use OpenOrchestra\FunctionalTests\Mapping\Metadata\Driver\FakeClass\FakeClassWithOutMetadata;
12
use ReflectionObject;
13
14
/**
15
 * Class AbstractDriverTest
16
 */
17
abstract class AbstractDriverTest extends \PHPUnit_Framework_TestCase
18
{
19
    /**
20
     * @var DriverInterface
21
     */
22
    protected $driver;
23
    protected $propertySearchMetadataFactory;
24
    protected $mergeableClassMetadataFactory;
25
26
    public function setUp()
27
    {
28
        $this->propertySearchMetadataFactory = new PropertySearchMetadataFactory();
29
        $this->mergeableClassMetadataFactory = new MergeableClassMetadataFactory();
30
    }
31
32
    /**
33
     * Test LoadMetadataForClass with out search metadata
34
     */
35
    public function testLoadMetadaForClassWithOutMetadata()
36
    {
37
        $class = new \ReflectionClass(new FakeClassWithOutMetadata());
38
        $metadata = $this->driver->loadMetadataForClass($class);
39
        $this->assertNull($metadata);
40
    }
41
42
    /**
43
     * Test LoadMetadataForClass
44
     */
45
    public function testLoadMetadataForClass()
46
    {
47
        $class = new \ReflectionClass(new FakeClassMetadata());
48
        $metadata = $this->driver->loadMetadataForClass($class);
49
        $this->assertMetadata($metadata);
50
    }
51
52
    /**
53
     * @param ClassMetadata $metadata
54
     */
55
    protected function assertMetadata(ClassMetadata $metadata)
56
    {
57
        $this->assertInstanceOf('Metadata\ClassMetadata', $metadata);
58
        $propertiesMetadata = $metadata->propertyMetadata;
59
        $this->assertArrayHasKey('fakeProperty1', $propertiesMetadata);
60
        $this->assertArrayHasKey('fakeProperty2', $propertiesMetadata);
61
        $propertyMetadataFakeProperty1 = $propertiesMetadata['fakeProperty1']->propertySearchMetadata[0];
62
        $this->assertPropertyMetadata($propertyMetadataFakeProperty1, 'fake_property1', 'fakeType', 'fakeProperty1');
63
64
        $this->assertCount(2, $propertiesMetadata['fakeProperty2']->propertySearchMetadata);
65
        $propertyMetadataFakeProperty2 = $propertiesMetadata['fakeProperty2']->propertySearchMetadata[0];
66
        $this->assertPropertyMetadata($propertyMetadataFakeProperty2, array("fake_property2", "fake_property_multi"), 'string', 'fakeProperty2');
67
        $propertyMetadataFakeProperty2Other = $propertiesMetadata['fakeProperty2']->propertySearchMetadata[1];
68
        $this->assertPropertyMetadata($propertyMetadataFakeProperty2Other, "fake_property3", 'string', 'fakeProperty2');
69
70
    }
71
72
    /**
73
     * @param PropertyMetadata $property
74
     * @param array|string     $key
75
     * @param string           $type
76
     * @param string           $field
77
     */
78
    protected function assertPropertyMetadata($property, $key, $type, $field)
79
    {
80
        $this->assertEquals($property->key, $key);
81
        $this->assertEquals($property->type, $type);
82
        $this->assertEquals($property->field, $field);
83
    }
84
85
    /**
86
     * Clean up
87
     */
88 View Code Duplication
    protected function tearDown()
0 ignored issues
show
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
89
    {
90
        $refl = new ReflectionObject($this);
91
        foreach ($refl->getProperties() as $prop) {
92
            if (!$prop->isStatic() && 0 !== strpos($prop->getDeclaringClass()->getName(), 'PHPUnit_')) {
93
                $prop->setAccessible(true);
94
                $prop->setValue($this, null);
95
            }
96
        }
97
    }
98
}
99