Passed
Pull Request — master (#1)
by Peter
07:07
created

UrlFixerTest::fixCssProvider()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 98
Code Lines 73

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 73
nc 1
nop 0
dl 0
loc 98
rs 8.589
c 0
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
declare(strict_types=1);
4
5
namespace AbterPhp\Framework\Assets;
6
7
use PHPUnit\Framework\TestCase;
8
9
class UrlFixerTest extends TestCase
10
{
11
    /** @var UrlFixer */
12
    protected $sut;
13
14
    protected $cacheUrl = 'xxx/www';
15
16
    public function setUp(): void
17
    {
18
        $this->sut = new UrlFixer($this->cacheUrl);
19
    }
20
21
    /**
22
     * @return array
23
     */
24
    public function fixCssProvider(): array
25
    {
26
        return [
27
            'empty'                                   => ['', 'yyy/zzz.css', ''],
28
            'empty-url'                               => ['url()', 'yyy/zzz.css', 'url()'],
29
            '1ch-url'                                 => ['url(a)', 'yyy/zzz.css', 'url(a)'],
30
            '2ch-url'                                 => ['url(ab)', 'yyy/zzz.css', 'url(xxx/www/yyy/ab)'],
31
            'data'                                    => [
32
                'url(data:/fonts/roboto/Roboto-Regular-webfont.eot?xasd)',
33
                'yyy/zzz.css',
34
                "url(data:/fonts/roboto/Roboto-Regular-webfont.eot?xasd)",
35
            ],
36
            'url'                                     => [
37
                'url(abc://fonts/roboto/Roboto-Regular-webfont.eot?xasd)',
38
                'yyy/zzz.css',
39
                'url(abc://fonts/roboto/Roboto-Regular-webfont.eot?xasd)',
40
            ],
41
            //
42
            'relative-implicit-current-simple-quotes' => [
43
                "url('fonts/roboto/Roboto-Regular-webfont.eot?xasd')",
44
                'yyy/zzz.css',
45
                "url('xxx/www/yyy/fonts/roboto/Roboto-Regular-webfont.eot?xasd')",
46
            ],
47
            'relative-implicit-current-double-quotes' => [
48
                'url("fonts/roboto/Roboto-Regular-webfont.eot?xasd")',
49
                'yyy/zzz.css',
50
                'url("xxx/www/yyy/fonts/roboto/Roboto-Regular-webfont.eot?xasd")',
51
            ],
52
            'relative-implicit-current-no-quotes'     => [
53
                "url(fonts/roboto/Roboto-Regular-webfont.eot?xasd)",
54
                'yyy/zzz.css',
55
                "url(xxx/www/yyy/fonts/roboto/Roboto-Regular-webfont.eot?xasd)",
56
            ],
57
            //
58
            'relative-explicit-current-simple-quotes' => [
59
                "url('./fonts/roboto/Roboto-Regular-webfont.eot?xasd')",
60
                'yyy/zzz.css',
61
                "url('xxx/www/yyy/fonts/roboto/Roboto-Regular-webfont.eot?xasd')",
62
            ],
63
            'relative-explicit-current-double-quotes' => [
64
                'url("./fonts/roboto/Roboto-Regular-webfont.eot?xasd")',
65
                'yyy/zzz.css',
66
                'url("xxx/www/yyy/fonts/roboto/Roboto-Regular-webfont.eot?xasd")',
67
            ],
68
            'relative-explicit-current-no-quotes'     => [
69
                "url(./fonts/roboto/Roboto-Regular-webfont.eot?xasd)",
70
                'yyy/zzz.css',
71
                "url(xxx/www/yyy/fonts/roboto/Roboto-Regular-webfont.eot?xasd)",
72
            ],
73
            //
74
            'relative-parent-simple-quotes'           => [
75
                "url('../fonts/roboto/Roboto-Regular-webfont.eot?xasd')",
76
                'yyy/zzz.css',
77
                "url('xxx/www/yyy/roboto/Roboto-Regular-webfont.eot?xasd')",
78
            ],
79
            'relative-parent-double-quotes'           => [
80
                "url('../fonts/roboto/Roboto-Regular-webfont.eot?xasd')",
81
                'yyy/zzz.css',
82
                "url('xxx/www/yyy/roboto/Roboto-Regular-webfont.eot?xasd')",
83
            ],
84
            'relative-parent-no-quotes'               => [
85
                "url('../fonts/roboto/Roboto-Regular-webfont.eot?xasd')",
86
                'yyy/zzz.css',
87
                "url('xxx/www/yyy/roboto/Roboto-Regular-webfont.eot?xasd')",
88
            ],
89
            //
90
            'absolute-simple-quotes'                  => [
91
                "url('/fonts/roboto/Roboto-Regular-webfont.eot?xasd')",
92
                'yyy/zzz.css',
93
                "url('xxx/www/fonts/roboto/Roboto-Regular-webfont.eot?xasd')",
94
            ],
95
            'absolute-double-quotes'                  => [
96
                'url("/fonts/roboto/Roboto-Regular-webfont.eot?xasd")',
97
                'yyy/zzz.css',
98
                'url("xxx/www/fonts/roboto/Roboto-Regular-webfont.eot?xasd")',
99
            ],
100
            'absolute-no-quotes'                      => [
101
                'url(/fonts/roboto/Roboto-Regular-webfont.eot?xasd)',
102
                'yyy/zzz.css',
103
                'url(xxx/www/fonts/roboto/Roboto-Regular-webfont.eot?xasd)',
104
            ],
105
            //
106
            'absolute-more'                           => [
107
                "url(/fonts/Roboto-Regular-webfont.eot?xasd), url('/fonts/Roboto-Bold-webfont.eot?dsa')",
108
                'yyy/zzz.css',
109
                "url(xxx/www/fonts/Roboto-Regular-webfont.eot?xasd), url('xxx/www/fonts/Roboto-Bold-webfont.eot?dsa')",
110
            ],
111
            //
112
            'absolute-mixed-case'                     => [
113
                "uRl(/fonts/Roboto-Regular-webfont.eot?xasd), urL('/fonts/Roboto-Bold-webfont.eot?dsa')",
114
                'yyy/zzz.css',
115
                "url(xxx/www/fonts/Roboto-Regular-webfont.eot?xasd), url('xxx/www/fonts/Roboto-Bold-webfont.eot?dsa')",
116
            ],
117
            //
118
            'relative-overdone'                       => [
119
                "url(../../../../../../fonts/Roboto-Regular-webfont.eot?xasd)",
120
                'yyy/zzz.css',
121
                "url(xxx/www/Roboto-Regular-webfont.eot?xasd)",
122
            ],
123
        ];
124
    }
125
126
    /**
127
     * @dataProvider fixCssProvider
128
     *
129
     * @param string $content
130
     * @param string $baseUrl
131
     * @param string $expectedOutput
132
     */
133
    public function testFixCss(string $content, string $baseUrl, string $expectedOutput)
134
    {
135
        $actualOutput = $this->sut->fixCss($content, $baseUrl);
136
137
        $this->assertSame($expectedOutput, $actualOutput);
138
    }
139
}
140