Revert "Revert "Revert "Removes isWindowsVistaOrHigher check from CoreTests"""
This reverts commit 632eae78b70fbb4da97bf0ea62a9fcaab5785731.
diff --git a/tests/org.eclipse.core.tests.harness/src/org/eclipse/core/tests/harness/CoreTest.java b/tests/org.eclipse.core.tests.harness/src/org/eclipse/core/tests/harness/CoreTest.java
index 33016fe..4c431d8 100644
--- a/tests/org.eclipse.core.tests.harness/src/org/eclipse/core/tests/harness/CoreTest.java
+++ b/tests/org.eclipse.core.tests.harness/src/org/eclipse/core/tests/harness/CoreTest.java
@@ -34,6 +34,7 @@
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
+import org.osgi.framework.Version;
/**
* @since 3.1
@@ -237,11 +238,16 @@
String[] envp = {};
try {
Process p;
- if (isDir) {
- String[] cmd = { "cmd", "/c", "mklink", "/d", linkName, linkTarget };
- p = Runtime.getRuntime().exec(cmd, envp, basedir);
+ if (isWindowsVistaOrHigher()) {
+ if (isDir) {
+ String[] cmd = {"cmd", "/c", "mklink", "/d", linkName, linkTarget};
+ p = Runtime.getRuntime().exec(cmd, envp, basedir);
+ } else {
+ String[] cmd = {"cmd", "/c", "mklink", linkName, linkTarget};
+ p = Runtime.getRuntime().exec(cmd, envp, basedir);
+ }
} else {
- String[] cmd = { "cmd", "/c", "mklink", linkName, linkTarget };
+ String[] cmd = {"ln", "-s", linkTarget, linkName};
p = Runtime.getRuntime().exec(cmd, envp, basedir);
}
int exitcode = p.waitFor();
@@ -261,19 +267,23 @@
*/
protected boolean canCreateSymLinks() {
if (canCreateSymLinks == null) {
- // Creation of a symbolic link on Windows requires administrator privileges,
- // so it may or may not be possible.
- IPath tempDir = getTempDir();
- String linkName = FileSystemHelper.getRandomLocation(tempDir).lastSegment();
- try {
- // Try to create a symlink.
- createSymLink(tempDir.toFile(), linkName, "testTarget", false);
- // Clean up if the link was created.
- new File(tempDir.toFile(), linkName).delete();
+ if (isWindowsVistaOrHigher()) {
+ // Creation of a symbolic link on Windows requires administrator privileges,
+ // so it may or may not be possible.
+ IPath tempDir = getTempDir();
+ String linkName = FileSystemHelper.getRandomLocation(tempDir).lastSegment();
+ try {
+ // Try to create a symlink.
+ createSymLink(tempDir.toFile(), linkName, "testTarget", false);
+ // Clean up if the link was created.
+ new File(tempDir.toFile(), linkName).delete();
+ canCreateSymLinks = Boolean.TRUE;
+ } catch (AssertionFailedError e) {
+ // This exception indicates that creation of the symlink failed.
+ canCreateSymLinks = Boolean.FALSE;
+ }
+ } else {
canCreateSymLinks = Boolean.TRUE;
- } catch (AssertionFailedError e) {
- // This exception indicates that creation of the symlink failed.
- canCreateSymLinks = Boolean.FALSE;
}
}
return canCreateSymLinks.booleanValue();
@@ -362,6 +372,27 @@
return System.currentTimeMillis() + "-" + Math.random();
}
+ protected static boolean isWindowsMinVersion(int major, int minor, int micro) {
+ if (Platform.getOS().equals(Platform.OS_WIN32)) {
+ try {
+ Version v = Version.parseVersion(System.getProperty("org.osgi.framework.os.version")); //$NON-NLS-1$
+ System.out.println("Windows version: " + Version.parseVersion(System.getProperty("org.osgi.framework.os.version")));
+ return v.compareTo(new Version(major, minor, micro)) >= 0;
+ } catch (IllegalArgumentException e) {
+ /* drop down to returning false */
+ }
+
+ }
+ return false;
+ }
+
+ /**
+ * Test if running on Windows Vista or higher.
+ * @return <code>true</code> if running on Windows Vista or higher.
+ */
+ protected static boolean isWindowsVistaOrHigher() {
+ return isWindowsMinVersion(6, 0, 0);
+ }
/**
* Copy the data from the input stream to the output stream.