Author: ggregory
Date: Tue Jun 21 22:34:33 2016
New Revision: 1749617
URL: http://svn.apache.org/viewvc?rev=1749617&view=rev
Log:
On Windows, test whatever JRE and JDK are registered in the Windows Registry.
Modified:
commons/proper/bcel/trunk/pom.xml
commons/proper/bcel/trunk/src/test/java/org/apache/bcel/generic/JDKGenericDumpTestCase.java
Modified: commons/proper/bcel/trunk/pom.xml
URL:
http://svn.apache.org/viewvc/commons/proper/bcel/trunk/pom.xml?rev=1749617&r1=1749616&r2=1749617&view=diff
==============================================================================
--- commons/proper/bcel/trunk/pom.xml [UTF-8] (original)
+++ commons/proper/bcel/trunk/pom.xml [UTF-8] Tue Jun 21 22:34:33 2016
@@ -414,6 +414,24 @@
<version>4.12</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>net.java.dev.jna</groupId>
+ <artifactId>jna</artifactId>
+ <version>4.2.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>net.java.dev.jna</groupId>
+ <artifactId>jna-platform</artifactId>
+ <version>4.2.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ <version>3.4</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<profiles>
Modified:
commons/proper/bcel/trunk/src/test/java/org/apache/bcel/generic/JDKGenericDumpTestCase.java
URL:
http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/test/java/org/apache/bcel/generic/JDKGenericDumpTestCase.java?rev=1749617&r1=1749616&r2=1749617&view=diff
==============================================================================
---
commons/proper/bcel/trunk/src/test/java/org/apache/bcel/generic/JDKGenericDumpTestCase.java
(original)
+++
commons/proper/bcel/trunk/src/test/java/org/apache/bcel/generic/JDKGenericDumpTestCase.java
Tue Jun 21 22:34:33 2016
@@ -17,15 +17,19 @@
package org.apache.bcel.generic;
+import static com.sun.jna.platform.win32.WinReg.HKEY_LOCAL_MACHINE;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.fail;
import java.io.File;
import java.io.FileFilter;
import java.io.InputStream;
-import java.util.Arrays;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
@@ -33,39 +37,76 @@ import org.apache.bcel.classfile.ClassPa
import org.apache.bcel.classfile.Code;
import org.apache.bcel.classfile.JavaClass;
import org.apache.bcel.classfile.Method;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.SystemUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
+import com.sun.jna.platform.win32.Advapi32Util;
+
/**
- * Test that the generic dump() methods work on the JDK classes
- * Reads each class into an instruction list and then dumps
+ * Test that the generic dump() methods work on the JDK classes Reads each
class into an instruction list and then dumps
* the instructions. The output bytes should be the same as the input.
*/
@RunWith(Parameterized.class)
public class JDKGenericDumpTestCase {
+ private static final String KEY_JDK = "SOFTWARE\\JavaSoft\\Java
Development Kit";
+
+ private static final String KEY_JRE = "SOFTWARE\\JavaSoft\\Java Runtime
Environment";
+
@Parameters(name = "{0}")
- public static Collection<Object[]> data() {
- return Arrays.asList(findJavaHomes());
+ public static Collection<String> data() {
+ return findJavaHomes();
}
- private static Object[][] findJavaHomes() {
- return new Object[][] { { System.getProperty("java.home") } };
+ private static Set<String> findJavaHomes() {
+ if (SystemUtils.IS_OS_WINDOWS) {
+ return findJavaHomesOnWindows();
+ }
+ final Set<String> javaHomes = new HashSet<>(1);
+ javaHomes.add(System.getProperty("java.home"));
+ return javaHomes;
+ }
+
+ private static Set<String> findJavaHomesOnWindows() {
+ Set<String> javaHomes = new HashSet<>();
+ final String[] jreKeys =
Advapi32Util.registryGetKeys(HKEY_LOCAL_MACHINE, KEY_JRE);
+ javaHomes = findJavaHomesOnWindows(jreKeys);
+ final String[] jdkKeys =
Advapi32Util.registryGetKeys(HKEY_LOCAL_MACHINE, KEY_JDK);
+ javaHomes.addAll(findJavaHomesOnWindows(jdkKeys));
+ return javaHomes;
+ }
+
+ private static Set<String> findJavaHomesOnWindows(final String[] keys) {
+ final Set<String> javaHomes = new HashSet<>(keys.length);
+ for (final String key : keys) {
+ final String javaHome =
Advapi32Util.registryGetStringValue(HKEY_LOCAL_MACHINE, KEY_JRE + "\\" + key,
+ "JavaHome");
+ if (StringUtils.isNoneBlank(javaHome)) {
+ if (new File(javaHome).exists()) {
+ javaHomes.add(javaHome);
+ }
+ }
+ }
+ return javaHomes;
}
public JDKGenericDumpTestCase(final String javaHome) {
this.javaHome = javaHome;
}
- private String javaHome;
+ private final String javaHome;
@Test
public void testJDKjars() throws Exception {
final File[] jars = listJDKjars();
- for (final File file : jars) {
- testJar(file);
+ if (jars != null) {
+ for (final File file : jars) {
+ testJar(file);
+ }
}
}