110 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | |
| 
 | |
| namespace DrupalFinder\Tests;
 | |
| 
 | |
| use DrupalFinder\DrupalFinder;
 | |
| use Exception;
 | |
| use PHPUnit_Framework_TestCase;
 | |
| 
 | |
| abstract class DrupalFinderTestBase extends PHPUnit_Framework_TestCase
 | |
| {
 | |
|     /**
 | |
|      * @var \DrupalFinder\DrupalFinder
 | |
|      */
 | |
|     protected $finder;
 | |
| 
 | |
|     protected function setUp()
 | |
|     {
 | |
|         parent::setUp();
 | |
|         $this->finder = new DrupalFinder();
 | |
|     }
 | |
| 
 | |
|     protected function dumpToFileSystem($fileStructure, $root)
 | |
|     {
 | |
|         $fileStructure = $this->prepareFileStructure($fileStructure);
 | |
|         foreach ($fileStructure as $name => $content) {
 | |
|             if (is_array($content)) {
 | |
|                 mkdir($root . '/' . $name);
 | |
|                 $this->dumpToFileSystem($content, $root . '/' . $name);
 | |
|             } else {
 | |
|                 file_put_contents($root . '/' . $name, $content);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     protected function prepareFileStructure($fileStructure)
 | |
|     {
 | |
|         foreach ($fileStructure as $name => $content) {
 | |
|             if (($name === 'composer.json' || $name === 'composer.lock') && is_array($content)) {
 | |
|                 $fileStructure[$name] = json_encode($content, JSON_UNESCAPED_SLASHES);
 | |
|             } elseif (is_array($content)) {
 | |
|                 $fileStructure[$name] = $this->prepareFileStructure($content);
 | |
|             }
 | |
|         }
 | |
|         return $fileStructure;
 | |
|     }
 | |
| 
 | |
|     protected function tempdir($dir, $prefix = '', $mode = 0700)
 | |
|     {
 | |
|         if (substr($dir, -1) != '/') {
 | |
|             $dir .= '/';
 | |
|         }
 | |
|         do {
 | |
|             $path = $dir . $prefix . mt_rand(0, 9999999);
 | |
|         } while (!mkdir($path, $mode));
 | |
|         register_shutdown_function(
 | |
|             [get_called_class(), 'tempdir_remove'],
 | |
|             $path
 | |
|         );
 | |
| 
 | |
|         return realpath($path);
 | |
|     }
 | |
| 
 | |
|     public static function tempdir_remove($path)
 | |
|     {
 | |
|         if (is_link($path)) {
 | |
|             if (defined('PHP_WINDOWS_VERSION_BUILD')) {
 | |
|                 rmdir($path);
 | |
|             } else {
 | |
|                 unlink($path);
 | |
|             }
 | |
| 
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         foreach (scandir($path) as $child) {
 | |
|             if (in_array($child, ['.', '..'])) {
 | |
|                 continue;
 | |
|             }
 | |
|             $child = "$path/$child";
 | |
|             is_dir($child) ? static::tempdir_remove($child) : unlink($child);
 | |
|         }
 | |
|         rmdir($path);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param $target
 | |
|      * @param $link
 | |
|      *
 | |
|      * @throws \PHPUnit_Framework_SkippedTestError
 | |
|      */
 | |
|     protected function symlink($target, $link)
 | |
|     {
 | |
|         try {
 | |
|             return symlink($target, $link);
 | |
|         } catch (Exception $e) {
 | |
|             if (defined('PHP_WINDOWS_VERSION_BUILD')
 | |
|                 && strstr($e->getMessage(), WIN_ERROR_PRIVILEGE_NOT_HELD)
 | |
|             ) {
 | |
|                 $this->markTestSkipped(<<<'MESSAGE'
 | |
| No privilege to create symlinks. Run test as Administrator (elevated process).
 | |
| MESSAGE
 | |
|                 );
 | |
|             }
 | |
|             throw $e;
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| define('WIN_ERROR_PRIVILEGE_NOT_HELD', '1314');
 |