Added the Search API Synonym module to deal specifically with licence and license...
[yaffs-website] / vendor / symfony / filesystem / Tests / FilesystemTestCase.php
index 5586a00547a6834ecc5ab0066757bf289a140e8e..642925ddee578d5f1c743861c167268b151b5eed 100644 (file)
@@ -30,16 +30,42 @@ class FilesystemTestCase extends TestCase
      */
     protected $workspace = null;
 
+    /**
+     * @var bool|null Flag for hard links on Windows
+     */
+    private static $linkOnWindows = null;
+
+    /**
+     * @var bool|null Flag for symbolic links on Windows
+     */
     private static $symlinkOnWindows = null;
 
     public static function setUpBeforeClass()
     {
-        if ('\\' === DIRECTORY_SEPARATOR && null === self::$symlinkOnWindows) {
-            $target = tempnam(sys_get_temp_dir(), 'sl');
-            $link = sys_get_temp_dir().'/sl'.microtime(true).mt_rand();
-            self::$symlinkOnWindows = @symlink($target, $link) && is_link($link);
-            @unlink($link);
-            unlink($target);
+        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);
+            }
         }
     }
 
@@ -66,7 +92,7 @@ class FilesystemTestCase extends TestCase
     }
 
     /**
-     * @param int    $expectedFilePerms expected file permissions as three digits (i.e. 755)
+     * @param int    $expectedFilePerms Expected file permissions as three digits (i.e. 755)
      * @param string $filePath
      */
     protected function assertFilePermissions($expectedFilePerms, $filePath)
@@ -101,28 +127,39 @@ class FilesystemTestCase extends TestCase
         $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) {
+        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) {
+        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) {
+        if ('\\' === \DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('chmod is not supported on Windows');
         }
     }
 
     protected function markAsSkippedIfPosixIsMissing()
     {
-        if (!function_exists('posix_isatty')) {
+        if (!\function_exists('posix_isatty')) {
             $this->markTestSkipped('Function posix_isatty is required.');
         }
     }