This repository has been archived on 2025-01-19. You can view files and clone it, but cannot push or open issues or pull requests.
drupalcampbristol/vendor/webflo/drupal-finder/tests/DrupalFinderTestBase.php
2018-11-23 12:29:20 +00:00

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');