Mercurial > hg > isophonics-drupal-site
comparison vendor/webflo/drupal-finder/tests/DrupalFinderTestBase.php @ 18:af1871eacc83
Update to Drupal core 8.7.1
author | Chris Cannam |
---|---|
date | Thu, 09 May 2019 15:33:08 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
17:129ea1e6d783 | 18:af1871eacc83 |
---|---|
1 <?php | |
2 | |
3 namespace DrupalFinder\Tests; | |
4 | |
5 use DrupalFinder\DrupalFinder; | |
6 use Exception; | |
7 use PHPUnit_Framework_TestCase; | |
8 | |
9 abstract class DrupalFinderTestBase extends PHPUnit_Framework_TestCase | |
10 { | |
11 /** | |
12 * @var \DrupalFinder\DrupalFinder | |
13 */ | |
14 protected $finder; | |
15 | |
16 protected function setUp() | |
17 { | |
18 parent::setUp(); | |
19 $this->finder = new DrupalFinder(); | |
20 } | |
21 | |
22 protected function dumpToFileSystem($fileStructure, $root) | |
23 { | |
24 $fileStructure = $this->prepareFileStructure($fileStructure); | |
25 foreach ($fileStructure as $name => $content) { | |
26 if (is_array($content)) { | |
27 mkdir($root . '/' . $name); | |
28 $this->dumpToFileSystem($content, $root . '/' . $name); | |
29 } else { | |
30 file_put_contents($root . '/' . $name, $content); | |
31 } | |
32 } | |
33 } | |
34 | |
35 protected function prepareFileStructure($fileStructure) | |
36 { | |
37 foreach ($fileStructure as $name => $content) { | |
38 if (($name === 'composer.json' || $name === 'composer.lock') && is_array($content)) { | |
39 $fileStructure[$name] = json_encode($content, JSON_UNESCAPED_SLASHES); | |
40 } elseif (is_array($content)) { | |
41 $fileStructure[$name] = $this->prepareFileStructure($content); | |
42 } | |
43 } | |
44 return $fileStructure; | |
45 } | |
46 | |
47 protected function tempdir($dir, $prefix = '', $mode = 0700) | |
48 { | |
49 if (substr($dir, -1) != '/') { | |
50 $dir .= '/'; | |
51 } | |
52 do { | |
53 $path = $dir . $prefix . mt_rand(0, 9999999); | |
54 } while (!mkdir($path, $mode)); | |
55 register_shutdown_function( | |
56 [get_called_class(), 'tempdir_remove'], | |
57 $path | |
58 ); | |
59 | |
60 return realpath($path); | |
61 } | |
62 | |
63 public static function tempdir_remove($path) | |
64 { | |
65 if (is_link($path)) { | |
66 if (defined('PHP_WINDOWS_VERSION_BUILD')) { | |
67 rmdir($path); | |
68 } else { | |
69 unlink($path); | |
70 } | |
71 | |
72 return; | |
73 } | |
74 | |
75 foreach (scandir($path) as $child) { | |
76 if (in_array($child, ['.', '..'])) { | |
77 continue; | |
78 } | |
79 $child = "$path/$child"; | |
80 is_dir($child) ? static::tempdir_remove($child) : unlink($child); | |
81 } | |
82 rmdir($path); | |
83 } | |
84 | |
85 /** | |
86 * @param $target | |
87 * @param $link | |
88 * | |
89 * @throws \PHPUnit_Framework_SkippedTestError | |
90 */ | |
91 protected function symlink($target, $link) | |
92 { | |
93 try { | |
94 return symlink($target, $link); | |
95 } catch (Exception $e) { | |
96 if (defined('PHP_WINDOWS_VERSION_BUILD') | |
97 && strstr($e->getMessage(), WIN_ERROR_PRIVILEGE_NOT_HELD) | |
98 ) { | |
99 $this->markTestSkipped(<<<'MESSAGE' | |
100 No privilege to create symlinks. Run test as Administrator (elevated process). | |
101 MESSAGE | |
102 ); | |
103 } | |
104 throw $e; | |
105 } | |
106 } | |
107 } | |
108 | |
109 define('WIN_ERROR_PRIVILEGE_NOT_HELD', '1314'); |