Completed
Push — master ( 5ff4ab...0cf65a )
by Alexander
16s queued 10s
created

TestCase::unlink()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 3
rs 10
1
<?php
2
declare(strict_types = 1);
3
4
namespace Yiisoft\Assets\Tests;
5
6
use hiqdev\composer\config\Builder;
7
use PHPUnit\Framework\TestCase as BaseTestCase;
8
use Psr\Container\ContainerInterface;
9
use Psr\Log\LoggerInterface;
10
use Yiisoft\Aliases\Aliases;
11
use Yiisoft\Assets\AssetBundle;
12
use Yiisoft\Assets\AssetManager;
13
use Yiisoft\Files\FileHelper;
14
use Yiisoft\Di\Container;
15
16
abstract class TestCase extends BaseTestCase
17
{
18
    /**
19
     * @var Aliases $aliases
20
     */
21
    protected $aliases;
22
23
    /**
24
     * @var AssetManager $assetManager
25
     */
26
    protected $assetManager;
27
28
    /**
29
     * @var ContainerInterface $container
30
     */
31
    private $container;
32
33
    /**
34
     * @var LoggerInterface $logger
35
     */
36
    protected $logger;
37
38
    /**
39
     * setUp
40
     *
41
     * @return void
42
     */
43
    protected function setUp(): void
44
    {
45
        parent::setUp();
46
47
        $config = require Builder::path('tests');
48
49
        $this->container = new Container($config);
50
51
        $this->aliases = $this->container->get(Aliases::class);
52
        $this->assetManager = $this->container->get(AssetManager::class);
53
        $this->logger = $this->container->get(LoggerInterface::class);
54
55
        $this->removeAssets('@basePath');
56
    }
57
58
    /**
59
     * tearDown
60
     *
61
     * @return void
62
     */
63
    protected function tearDown(): void
64
    {
65
        $this->container = null;
66
        parent::tearDown();
67
    }
68
69
    /**
70
     * Asserting two strings equality ignoring line endings.
71
     * @param string $expected
72
     * @param string $actual
73
     * @param string $message
74
     *
75
     * @return void
76
     */
77
    protected function assertEqualsWithoutLE(string $expected, string $actual, string $message = ''): void
78
    {
79
        $expected = str_replace("\r\n", "\n", $expected);
80
        $actual = str_replace("\r\n", "\n", $actual);
81
82
        $this->assertEquals($expected, $actual, $message);
83
    }
84
85
    protected function removeAssets(string $basePath): void
86
    {
87
        $handle = opendir($dir = $this->aliases->get($basePath));
88
89
        if ($handle === false) {
90
            throw new \Exception("Unable to open directory: $dir");
91
        }
92
93
        while (($file = readdir($handle)) !== false) {
94
            if ($file === '.' || $file === '..' || $file === '.gitignore') {
95
                continue;
96
            }
97
            $path = $dir.DIRECTORY_SEPARATOR.$file;
98
            if (is_dir($path)) {
99
                FileHelper::removeDirectory($path);
100
            } else {
101
                FileHelper::unlink($path);
102
            }
103
        }
104
105
        closedir($handle);
106
    }
107
108
    /**
109
     * Verify sources publish files assetbundle.
110
     *
111
     * @param string $type
112
     * @param AssetBundle $bundle
113
     *
114
     * @return void
115
     */
116
    protected function sourcesPublishVerifyFiles(string $type, AssetBundle $bundle): void
117
    {
118
        foreach ($bundle->$type as $filename) {
119
            $publishedFile = $bundle->basePath . DIRECTORY_SEPARATOR . $filename;
120
            $sourceFile = $this->aliases->get($bundle->sourcePath) . DIRECTORY_SEPARATOR . $filename;
121
122
            $this->assertFileExists($publishedFile);
123
            $this->assertFileEquals($publishedFile, $sourceFile);
124
        }
125
126
        $this->assertDirectoryExists($bundle->basePath . DIRECTORY_SEPARATOR . $type);
127
    }
128
129
    /**
130
     * Properly removes symlinked directory under Windows, MacOS and Linux.
131
     *
132
     * @param string $file path to symlink
133
     *
134
     * @return bool
135
     */
136
    protected function unlink(string $file): bool
137
    {
138
        return FileHelper::unlink($file);
139
    }
140
}
141