annotate vendor/webflo/drupal-finder/tests/DrupalFinderTestBase.php @ 19:fa3358dc1485 tip

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