* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Filesystem\Tests; use PHPUnit\Framework\TestCase; use Symfony\Component\Filesystem\Filesystem; class FilesystemTestCase extends TestCase { private $umask; protected $longPathNamesWindows = array(); /** * @var \Symfony\Component\Filesystem\Filesystem */ protected $filesystem = null; /** * @var string */ protected $workspace = null; /** * @var null|bool Flag for hard links on Windows */ private static $linkOnWindows = null; /** * @var null|bool Flag for symbolic links on Windows */ private static $symlinkOnWindows = null; public static function setUpBeforeClass() { if ('\\' === DIRECTORY_SEPARATOR) { self::$linkOnWindows = true; $originFile = tempnam(sys_get_temp_dir(), 'li'); $targetFile = tempnam(sys_get_temp_dir(), 'li'); if (true !== @link($originFile, $targetFile)) { $report = error_get_last(); if (is_array($report) && false !== strpos($report['message'], 'error code(1314)')) { self::$linkOnWindows = false; } } else { @unlink($targetFile); } self::$symlinkOnWindows = true; $originDir = tempnam(sys_get_temp_dir(), 'sl'); $targetDir = tempnam(sys_get_temp_dir(), 'sl'); if (true !== @symlink($originDir, $targetDir)) { $report = error_get_last(); if (is_array($report) && false !== strpos($report['message'], 'error code(1314)')) { self::$symlinkOnWindows = false; } } else { @unlink($targetDir); } } } protected function setUp() { $this->umask = umask(0); $this->filesystem = new Filesystem(); $this->workspace = sys_get_temp_dir().'/'.microtime(true).'.'.mt_rand(); mkdir($this->workspace, 0777, true); $this->workspace = realpath($this->workspace); } protected function tearDown() { if (!empty($this->longPathNamesWindows)) { foreach ($this->longPathNamesWindows as $path) { exec('DEL '.$path); } $this->longPathNamesWindows = array(); } $this->filesystem->remove($this->workspace); umask($this->umask); } /** * @param int $expectedFilePerms Expected file permissions as three digits (i.e. 755) * @param string $filePath */ protected function assertFilePermissions($expectedFilePerms, $filePath) { $actualFilePerms = (int) substr(sprintf('%o', fileperms($filePath)), -3); $this->assertEquals( $expectedFilePerms, $actualFilePerms, sprintf('File permissions for %s must be %s. Actual %s', $filePath, $expectedFilePerms, $actualFilePerms) ); } protected function getFileOwner($filepath) { $this->markAsSkippedIfPosixIsMissing(); $infos = stat($filepath); if ($datas = posix_getpwuid($infos['uid'])) { return $datas['name']; } } protected function getFileGroup($filepath) { $this->markAsSkippedIfPosixIsMissing(); $infos = stat($filepath); if ($datas = posix_getgrgid($infos['gid'])) { return $datas['name']; } $this->markTestSkipped('Unable to retrieve file group name'); } protected function markAsSkippedIfLinkIsMissing() { if (!function_exists('link')) { $this->markTestSkipped('link is not supported'); } if ('\\' === DIRECTORY_SEPARATOR && false === self::$linkOnWindows) { $this->markTestSkipped('link requires "Create hard links" privilege on windows'); } } protected function markAsSkippedIfSymlinkIsMissing($relative = false) { if ('\\' === DIRECTORY_SEPARATOR && false === self::$symlinkOnWindows) { $this->markTestSkipped('symlink requires "Create symbolic links" privilege on Windows'); } // https://bugs.php.net/bug.php?id=69473 if ($relative && '\\' === DIRECTORY_SEPARATOR && 1 === PHP_ZTS) { $this->markTestSkipped('symlink does not support relative paths on thread safe Windows PHP versions'); } } protected function markAsSkippedIfChmodIsMissing() { if ('\\' === DIRECTORY_SEPARATOR) { $this->markTestSkipped('chmod is not supported on Windows'); } } protected function markAsSkippedIfPosixIsMissing() { if (!function_exists('posix_isatty')) { $this->markTestSkipped('Function posix_isatty is required.'); } } } __halt_compiler();----SIGNATURE:----oGwHVj/aD+qltf2xtzVpiaKDC7KP4vAWEADDGIEuiflX1YvgSBmn3vc0MmZU0ZCSZetPVUR6+ZeoUJgNf+6TfmT1/TpKXkOf2Z5E9Hhn/0Qh7rVP1rM9N/M4n2hTdxQ/Asz+DmujRHCm71oEzvmxpHpRQdv4RbraEoOFVVOIGyvZ0umdfYAbbZWx7FI25sP5+hRJpXa9sNmNSlNeTi7oqSIUoa9bkx+3jqntgLnYi2QkVmFfpYRmUx6NGytMT//ODfycFOvI5Fnz9Qs8e0lNckimTX2quoTpzgW1heYB+TbQ2JbTAKBBsPlhH6tRPiC0pNW020/PZPzSHxl+mxbhtF+kRyqj75D2X1/VrlOitWFrW8TobTky0lF902lrxuWVJrppHCEZ/CEdNRSxGXU4M9xgQZvNV2G9CH/eabc4CraVjlG/3QDJ/EH6/1YgE3Y1kyrD0AXFOqtaJWE6Ij2w6bbhyQA3Xi5KEbpB+SGb/URaTH1fINPd7phlYFLRP1rgJhmYMJrkvI5mIeZSHv+S4WNQ6pzDEqBSuDk0b8M77e4f2uhPwxtmugBJRqKpwJOuUY3ijr+g9YNGzOxRHKDus31oUGUIluB+cwUn4dSYUzraiTFD1Y5s2ksuWAAUDg9tEViYSd1oCyVU+8xU+UnRum0q6daKXP1jQHxrbglhD8w=----ATTACHMENT:----MzUyNDExODU0NjM4MDcxNiAzMDE2NTY5MjgwMTU0MTkzIDgwOTk5MjMyNDcwOTA5MjQ=