Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / symfony / filesystem / Tests / FilesystemTestCase.php
index 0a1254818da2a3be70481e5bc85e3748424339eb..cde01e50eb8a543669f858ad12578bf3c85c5fb5 100644 (file)
@@ -30,16 +30,42 @@ class FilesystemTestCase extends TestCase
      */
     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 && 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);
+            }
         }
     }
 
@@ -101,6 +127,17 @@ 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) {