From 796ee6c253d3465d183fc1a6db2d20500214dbbc Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Wed, 25 Jul 2012 17:17:35 +0200 Subject: [PATCH] Cleanup --- .../vfs/local/LocalFileSystemTest.java | 20 +++----- .../intellij/openapi/util/io/IoTestUtil.java | 47 ++++++++++++++----- 2 files changed, 42 insertions(+), 25 deletions(-) diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/vfs/local/LocalFileSystemTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/vfs/local/LocalFileSystemTest.java index a7d90cb5321b..fea700f6fb54 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/vfs/local/LocalFileSystemTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/vfs/local/LocalFileSystemTest.java @@ -15,12 +15,12 @@ */ package com.intellij.openapi.vfs.local; -import com.intellij.execution.util.ExecUtil; import com.intellij.ide.GeneralSettings; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileAttributes; import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.util.io.IoTestUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.SafeWriteRequestor; import com.intellij.openapi.vfs.VfsUtilCore; @@ -293,25 +293,19 @@ public class LocalFileSystemTest extends PlatformLangTestCase { } public void testHardLinks() throws Exception { - if (!SystemInfo.isWindows && !SystemInfo.isUnix) return; + if (!SystemInfo.isWindows && !SystemInfo.isUnix) { + System.err.println(getName() + " skipped: " + SystemInfo.OS_NAME); + return; + } final boolean safeWrite = GeneralSettings.getInstance().isUseSafeWrite(); - final File dir = FileUtil.createTempDirectory("hardlinks", "",false); + final File dir = FileUtil.createTempDirectory("hardlinks.", ".dir", false); try { GeneralSettings.getInstance().setUseSafeWrite(false); final File targetFile = new File(dir, "targetFile"); assertTrue(targetFile.createNewFile()); - final File hardLinkFile = new File(dir, "hardLinkFile"); - - if (SystemInfo.isWindows) { - assertEquals("target=" + targetFile + " link=" + hardLinkFile, - 0, ExecUtil.execAndGetResult("fsutil", "hardlink", "create", hardLinkFile.getPath(), targetFile.getPath())); - } - else if (SystemInfo.isUnix) { - assertEquals("target=" + targetFile + " link=" + hardLinkFile, - 0, ExecUtil.execAndGetResult("ln", targetFile.getPath(), hardLinkFile.getPath())); - } + final File hardLinkFile = IoTestUtil.createHardLink(targetFile.getAbsolutePath(), "hardLinkFile"); final VirtualFile file = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(targetFile); assertNotNull(file); diff --git a/platform/util/testSrc/com/intellij/openapi/util/io/IoTestUtil.java b/platform/util/testSrc/com/intellij/openapi/util/io/IoTestUtil.java index d738085c0768..2a69a5489ff8 100644 --- a/platform/util/testSrc/com/intellij/openapi/util/io/IoTestUtil.java +++ b/platform/util/testSrc/com/intellij/openapi/util/io/IoTestUtil.java @@ -26,18 +26,16 @@ import java.io.InputStreamReader; import java.net.URL; import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; public class IoTestUtil { private IoTestUtil() { } // todo[r.sh] use NIO2 API after migration to JDK 7 public static File createTempLink(@NotNull final String target, @NotNull final String link) throws InterruptedException, IOException { - final boolean isAbsolute = SystemInfo.isUnix && StringUtil.startsWithChar(link, '/') || - SystemInfo.isWindows && link.matches("^[c-zC-Z]:[/\\\\].*$"); - final File linkFile = isAbsolute ? new File(link) : new File(FileUtil.getTempDirectory(), link); - assertTrue(link, !linkFile.exists() || linkFile.delete()); - final File parentDir = linkFile.getParentFile(); - assertTrue("link=" + link + ", parent=" + parentDir, parentDir != null && (parentDir.isDirectory() || parentDir.mkdirs())); + assertTrue(SystemInfo.isWindows || SystemInfo.isUnix); + + final File linkFile = getFullLinkPath(link); final ProcessBuilder command; if (SystemInfo.isWindows) { @@ -57,6 +55,25 @@ public class IoTestUtil { return linkFile; } + public static File createHardLink(@NotNull final String target, @NotNull final String link) throws InterruptedException, IOException { + assertTrue(SystemInfo.isWindows || SystemInfo.isUnix); + + final File linkFile = getFullLinkPath(link); + + final ProcessBuilder command; + if (SystemInfo.isWindows) { + command = new ProcessBuilder("fsutil", "hardlink", "create", linkFile.getPath(), target); + } + else { + command = new ProcessBuilder("ln", target, linkFile.getPath()); + } + final int res = runCommand(command); + assertEquals(command.command().toString(), 0, res); + + assertTrue("target=" + target + ", link=" + linkFile, linkFile.exists()); + return linkFile; + } + public static File createJunction(@NotNull final String target, @NotNull final String junction) throws InterruptedException, IOException { assertTrue(SystemInfo.isWindows); @@ -65,20 +82,26 @@ public class IoTestUtil { final String exePath = getJunctionExePath(); - final boolean isAbsolute = junction.matches("^[c-zC-Z]:[/\\\\].*$"); - final File junctionFile = isAbsolute ? new File(junction) : new File(FileUtil.getTempDirectory(), junction); - assertTrue(junction, !junctionFile.exists() || junctionFile.delete()); - final File parentDir = junctionFile.getParentFile(); - assertTrue("junction=" + junction + ", parent=" + parentDir, parentDir != null && (parentDir.isDirectory() || parentDir.mkdirs())); + final File junctionFile = getFullLinkPath(junction); final ProcessBuilder command = new ProcessBuilder(exePath, junctionFile.getAbsolutePath(), target); final int res = runCommand(command); assertEquals(command.command().toString(), 0, res); - assertTrue(junctionFile.getPath(), junctionFile.isDirectory()); + assertTrue("target=" + target + ", link=" + junctionFile, junctionFile.isDirectory()); return junctionFile; } + private static File getFullLinkPath(final String link) { + final boolean isAbsolute = SystemInfo.isUnix && StringUtil.startsWithChar(link, '/') || + SystemInfo.isWindows && link.matches("^[c-zC-Z]:[/\\\\].*$"); + final File linkFile = isAbsolute ? new File(link) : new File(FileUtil.getTempDirectory(), link); + assertTrue(link, !linkFile.exists() || linkFile.delete()); + final File parentDir = linkFile.getParentFile(); + assertTrue("link=" + link + ", parent=" + parentDir, parentDir != null && (parentDir.isDirectory() || parentDir.mkdirs())); + return linkFile; + } + private static String getJunctionExePath() throws IOException, InterruptedException { final URL url = IoTestUtil.class.getClassLoader().getResource("junction.exe"); assertNotNull(url);