annotate vendor/webflo/drupal-finder/tests/DrupalFinderTestBase.php @ 0:c75dbcec494b

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