Passed
Push — master ( 5c87ed...e4bb53 )
by Stefan
04:05
created

Psr4AutoloaderTest::setUp()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 36
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 36
c 0
b 0
f 0
rs 8.8571
cc 1
eloc 23
nc 1
nop 0
1
<?php
2
/* 
3
 *******************************************************************************
4
 * Copyright 2011-2017 DANTE Ltd. and GÉANT on behalf of the GN3, GN3+, GN4-1 
5
 * and GN4-2 consortia
6
 *
7
 * License: see the web/copyright.php file in the file structure
8
 *******************************************************************************
9
 */
10
11
use core\autoloader\Psr4Autoloader;
12
13
class MockPsr4Autoloader extends Psr4Autoloader
14
{
15
    protected $files = array();
16
17
    public function setFiles(array $files)
18
    {
19
        $this->files = $files;
20
    }
21
22
    protected function requireFile($file)
23
    {
24
        return in_array($file, $this->files);
25
    }
26
}
27
28
class Psr4AutoloaderTest extends \PHPUnit\Framework\TestCase
29
{
30
    protected $loader;
31
32
    protected function setUp()
33
    {
34
        $this->loader = new MockPsr4Autoloader;
35
36
        $this->loader->setFiles(array(
37
            '/vendor/foo.bar/src/ClassName.php',
38
            '/vendor/foo.bar/src/DoomClassName.php',
39
            '/vendor/foo.bar/tests/ClassNameTest.php',
40
            '/vendor/foo.bardoom/src/ClassName.php',
41
            '/vendor/foo.bar.baz.dib/src/ClassName.php',
42
            '/vendor/foo.bar.baz.dib.zim.gir/src/ClassName.php',
43
        ));
44
45
        $this->loader->addNamespace(
46
            'Foo\Bar',
47
            '/vendor/foo.bar/src'
48
        );
49
50
        $this->loader->addNamespace(
51
            'Foo\Bar',
52
            '/vendor/foo.bar/tests'
53
        );
54
55
        $this->loader->addNamespace(
56
            'Foo\BarDoom',
57
            '/vendor/foo.bardoom/src'
58
        );
59
60
        $this->loader->addNamespace(
61
            'Foo\Bar\Baz\Dib',
62
            '/vendor/foo.bar.baz.dib/src'
63
        );
64
65
        $this->loader->addNamespace(
66
            'Foo\Bar\Baz\Dib\Zim\Gir',
67
            '/vendor/foo.bar.baz.dib.zim.gir/src'
68
        );
69
    }
70
71
    public function testExistingFile()
72
    {
73
        $actual = $this->loader->loadClass('Foo\Bar\ClassName');
74
        $expect = '/vendor/foo.bar/src/ClassName.php';
75
        $this->assertSame($expect, $actual);
76
77
        $actual = $this->loader->loadClass('Foo\Bar\ClassNameTest');
78
        $expect = '/vendor/foo.bar/tests/ClassNameTest.php';
79
        $this->assertSame($expect, $actual);
80
    }
81
82
    public function testMissingFile()
83
    {
84
        $actual = $this->loader->loadClass('No_Vendor\No_Package\NoClass');
85
        $this->assertFalse($actual);
86
    }
87
88
    public function testDeepFile()
89
    {
90
        $actual = $this->loader->loadClass('Foo\Bar\Baz\Dib\Zim\Gir\ClassName');
91
        $expect = '/vendor/foo.bar.baz.dib.zim.gir/src/ClassName.php';
92
        $this->assertSame($expect, $actual);
93
    }
94
95
    public function testConfusion()
96
    {
97
        $actual = $this->loader->loadClass('Foo\Bar\DoomClassName');
98
        $expect = '/vendor/foo.bar/src/DoomClassName.php';
99
        $this->assertSame($expect, $actual);
100
101
        $actual = $this->loader->loadClass('Foo\BarDoom\ClassName');
102
        $expect = '/vendor/foo.bardoom/src/ClassName.php';
103
        $this->assertSame($expect, $actual);
104
    }
105
}