Author: britter
Date: Sat Mar 28 12:08:17 2015
New Revision: 1669750
URL: http://svn.apache.org/r1669750
Log:
LANG-1102: Make logic for comparing OS versions in SystemUtils smarter
Modified:
commons/proper/lang/trunk/src/changes/changes.xml
commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/SystemUtils.java
commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/SystemUtilsTest.java
Modified: commons/proper/lang/trunk/src/changes/changes.xml
URL:
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/changes/changes.xml?rev=1669750&r1=1669749&r2=1669750&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/changes/changes.xml [utf-8] (original)
+++ commons/proper/lang/trunk/src/changes/changes.xml [utf-8] Sat Mar 28
12:08:17 2015
@@ -22,6 +22,7 @@
<body>
<release version="3.4" date="tba" description="tba">
+ <action issue="LANG-1102" type="update" dev="britter">Make logic for
comparing OS versions in SystemUtils smarter</action>
<action issue="LANG-1091" type="update" dev="britter" due-to="Fabian
Lange">Shutdown thread pools in test cases</action>
<action issue="LANG-1101" type="update" dev="chas">FastDateParser and
FastDatePrinter support 'X' format</action>
<action issue="LANG-1100" type="update" dev="chas" due-to="mbracher">Avoid
memory allocation when using date formating to StringBuffer</action>
Modified:
commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/SystemUtils.java
URL:
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/SystemUtils.java?rev=1669750&r1=1669749&r2=1669750&view=diff
==============================================================================
---
commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/SystemUtils.java
(original)
+++
commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/SystemUtils.java
Sat Mar 28 12:08:17 2015
@@ -1448,7 +1448,7 @@ public class SystemUtils {
if (osName == null || osVersion == null) {
return false;
}
- return isOSNameMatch(osName, osNamePrefix) &&
osVersion.startsWith(osVersionPrefix);
+ return isOSNameMatch(osName, osNamePrefix) &&
isOSVersionMatch(osVersion, osVersionPrefix);
}
/**
@@ -1467,6 +1467,32 @@ public class SystemUtils {
}
return osName.startsWith(osNamePrefix);
}
+
+ /**
+ * Decides if the operating system version matches.
+ * <p>
+ * This method is package private instead of private to support unit test
invocation.
+ * </p>
+ *
+ * @param osVersion the actual OS version
+ * @param osVersionPrefix the prefix for the expected OS version
+ * @return true if matches, or false if not or can't determine
+ */
+ static boolean isOSVersionMatch(final String osVersion, final String
osVersionPrefix) {
+ if (StringUtils.isEmpty(osVersion)) {
+ return false;
+ }
+ // Compare parts of the version string instead of using
String.startsWith(String) because otherwise
+ // osVersionPrefix 10.1 would also match osVersion 10.10
+ String[] versionPrefixParts = osVersionPrefix.split("\\.");
+ String[] versionParts = osVersion.split("\\.");
+ for (int i = 0; i < Math.min(versionPrefixParts.length,
versionParts.length); i++) {
+ if (!versionPrefixParts[i].equals(versionParts[i])) {
+ return false;
+ }
+ }
+ return true;
+ }
// -----------------------------------------------------------------------
/**
Modified:
commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/SystemUtilsTest.java
URL:
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/SystemUtilsTest.java?rev=1669750&r1=1669749&r2=1669750&view=diff
==============================================================================
---
commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/SystemUtilsTest.java
(original)
+++
commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/SystemUtilsTest.java
Sat Mar 28 12:08:17 2015
@@ -378,6 +378,45 @@ public class SystemUtilsTest {
}
@Test
+ public void testOsVersionMatches() throws Exception {
+ String osVersion = null;
+ assertFalse(SystemUtils.isOSVersionMatch(osVersion, "10.1"));
+
+ osVersion = "";
+ assertFalse(SystemUtils.isOSVersionMatch(osVersion, "10.1"));
+
+ osVersion = "10";
+ assertTrue(SystemUtils.isOSVersionMatch(osVersion, "10.1"));
+ assertTrue(SystemUtils.isOSVersionMatch(osVersion, "10.1.1"));
+ assertTrue(SystemUtils.isOSVersionMatch(osVersion, "10.10"));
+ assertTrue(SystemUtils.isOSVersionMatch(osVersion, "10.10.1"));
+
+ osVersion = "10.1";
+ assertTrue(SystemUtils.isOSVersionMatch(osVersion, "10.1"));
+ assertTrue(SystemUtils.isOSVersionMatch(osVersion, "10.1.1"));
+ assertFalse(SystemUtils.isOSVersionMatch(osVersion, "10.10"));
+ assertFalse(SystemUtils.isOSVersionMatch(osVersion, "10.10.1"));
+
+ osVersion = "10.1.1";
+ assertTrue(SystemUtils.isOSVersionMatch(osVersion, "10.1"));
+ assertTrue(SystemUtils.isOSVersionMatch(osVersion, "10.1.1"));
+ assertFalse(SystemUtils.isOSVersionMatch(osVersion, "10.10"));
+ assertFalse(SystemUtils.isOSVersionMatch(osVersion, "10.10.1"));
+
+ osVersion = "10.10";
+ assertFalse(SystemUtils.isOSVersionMatch(osVersion, "10.1"));
+ assertFalse(SystemUtils.isOSVersionMatch(osVersion, "10.1.1"));
+ assertTrue(SystemUtils.isOSVersionMatch(osVersion, "10.10"));
+ assertTrue(SystemUtils.isOSVersionMatch(osVersion, "10.10.1"));
+
+ osVersion = "10.10.1";
+ assertFalse(SystemUtils.isOSVersionMatch(osVersion, "10.1"));
+ assertFalse(SystemUtils.isOSVersionMatch(osVersion, "10.1.1"));
+ assertTrue(SystemUtils.isOSVersionMatch(osVersion, "10.10"));
+ assertTrue(SystemUtils.isOSVersionMatch(osVersion, "10.10.1"));
+ }
+
+ @Test
public void testJavaAwtHeadless() {
final boolean atLeastJava14 =
SystemUtils.isJavaVersionAtLeast(JAVA_1_4);
final String expectedStringValue =
System.getProperty("java.awt.headless");