Failed Conditions
Pull Request — master (#1)
by Jonathan
03:02
created

TestFileDriver   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 12
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 3
dl 0
loc 12
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A loadMetadataForClass() 0 2 1
A loadMappingFile() 0 6 2
1
<?php
2
3
namespace Doctrine\Tests\Common\Persistence\Mapping;
4
5
use Doctrine\Common\Persistence\Mapping\Driver\FileLocator;
6
use Doctrine\Tests\DoctrineTestCase;
7
use Doctrine\Common\Persistence\Mapping\Driver\FileDriver;
8
use Doctrine\Common\Persistence\Mapping\ClassMetadata;
9
10
class FileDriverTest extends DoctrineTestCase
11
{
12
    public function testGlobalBasename()
13
    {
14
        $driver = new TestFileDriver([]);
15
16
        self::assertNull($driver->getGlobalBasename());
17
18
        $driver->setGlobalBasename("global");
19
        self::assertEquals("global", $driver->getGlobalBasename());
20
    }
21
22
    public function testGetElementFromGlobalFile()
23
    {
24
        $driver = new TestFileDriver($this->newLocator());
25
        $driver->setGlobalBasename("global");
26
27
        $element = $driver->getElement('stdGlobal');
28
29
        self::assertEquals('stdGlobal', $element);
30
    }
31
32
    public function testGetElementFromFile()
33
    {
34
        $locator = $this->newLocator();
35
        $locator->expects($this->once())
36
                ->method('findMappingFile')
37
                ->with($this->equalTo('stdClass'))
38
                ->will($this->returnValue(__DIR__ . '/_files/stdClass.yml'));
39
40
        $driver = new TestFileDriver($locator);
41
42
        self::assertEquals('stdClass', $driver->getElement('stdClass'));
43
    }
44
45
    public function testGetElementUpdatesClassCache()
46
    {
47
        $locator = $this->newLocator();
48
49
        // findMappingFile should only be called once
50
        $locator->expects($this->once())
51
            ->method('findMappingFile')
52
            ->with($this->equalTo('stdClass'))
53
            ->will($this->returnValue(__DIR__ . '/_files/stdClass.yml'));
54
55
        $driver = new TestFileDriver($locator);
56
57
        // not cached
58
        self::assertEquals('stdClass', $driver->getElement('stdClass'));
59
60
        // cached call
61
        self::assertEquals('stdClass', $driver->getElement('stdClass'));
62
    }
63
64
    public function testGetAllClassNamesGlobalBasename()
65
    {
66
        $driver = new TestFileDriver($this->newLocator());
67
        $driver->setGlobalBasename("global");
68
69
        $classNames = $driver->getAllClassNames();
70
71
        self::assertEquals(['stdGlobal', 'stdGlobal2'], $classNames);
72
    }
73
74
    public function testGetAllClassNamesFromMappingFile()
75
    {
76
        $locator = $this->newLocator();
77
        $locator->expects($this->any())
78
                ->method('getAllClassNames')
79
                ->with($this->equalTo(null))
80
                ->will($this->returnValue(['stdClass']));
81
        $driver = new TestFileDriver($locator);
82
83
        $classNames = $driver->getAllClassNames();
84
85
        self::assertEquals(['stdClass'], $classNames);
86
    }
87
88
    public function testGetAllClassNamesBothSources()
89
    {
90
        $locator = $this->newLocator();
91
        $locator->expects($this->any())
92
                ->method('getAllClassNames')
93
                ->with($this->equalTo('global'))
94
                ->will($this->returnValue(['stdClass']));
95
        $driver = new TestFileDriver($locator);
96
        $driver->setGlobalBasename("global");
97
98
        $classNames = $driver->getAllClassNames();
99
100
        self::assertEquals(['stdGlobal', 'stdGlobal2', 'stdClass'], $classNames);
101
    }
102
103
    public function testIsNotTransient()
104
    {
105
        $locator = $this->newLocator();
106
        $locator->expects($this->once())
107
                ->method('fileExists')
108
                ->with($this->equalTo('stdClass'))
109
                ->will($this->returnValue(true));
110
111
        $driver = new TestFileDriver($locator);
112
        $driver->setGlobalBasename("global");
113
114
        self::assertFalse($driver->isTransient('stdClass'));
115
        self::assertFalse($driver->isTransient('stdGlobal'));
116
        self::assertFalse($driver->isTransient('stdGlobal2'));
117
    }
118
119
    public function testIsTransient()
120
    {
121
        $locator = $this->newLocator();
122
        $locator->expects($this->once())
123
                ->method('fileExists')
124
                ->with($this->equalTo('stdClass2'))
125
                ->will($this->returnValue(false));
126
127
        $driver = new TestFileDriver($locator);
128
129
        self::assertTrue($driver->isTransient('stdClass2'));
130
    }
131
132
    public function testNonLocatorFallback()
133
    {
134
        $driver = new TestFileDriver(__DIR__ . '/_files', '.yml');
135
        self::assertTrue($driver->isTransient('stdClass2'));
136
        self::assertFalse($driver->isTransient('stdClass'));
137
    }
138
139
    private function newLocator()
140
    {
141
        $locator = $this->createMock(FileLocator::class);
142
        $locator->expects($this->any())->method('getFileExtension')->will($this->returnValue('.yml'));
143
        $locator->expects($this->any())->method('getPaths')->will($this->returnValue([__DIR__ . "/_files"]));
144
        return $locator;
145
    }
146
}
147
148
class TestFileDriver extends FileDriver
149
{
150
    protected function loadMappingFile($file)
151
    {
152
        if (strpos($file, "global.yml") !== false) {
153
            return ['stdGlobal' => 'stdGlobal', 'stdGlobal2' => 'stdGlobal2'];
154
        }
155
        return ['stdClass' => 'stdClass'];
156
    }
157
158
    public function loadMetadataForClass($className, ClassMetadata $metadata)
159
    {
160
    }
161
}
162