You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2022/11/10 20:27:35 UTC

[commons-bcel] branch master updated: Reuse JavaHome for tests

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-bcel.git


The following commit(s) were added to refs/heads/master by this push:
     new e3e1adcf Reuse JavaHome for tests
e3e1adcf is described below

commit e3e1adcf224504271fa2d3acf7c0bdf7a863ab1b
Author: Gary David Gregory (Code signing key) <gg...@apache.org>
AuthorDate: Thu Nov 10 15:27:31 2022 -0500

    Reuse JavaHome for tests
---
 .../bcel/classfile/JDKClassDumpTestCase.java       | 45 ++++++++--------------
 .../java/org/apache/bcel/generic/JavaHome.java     | 30 +++++++++++++--
 2 files changed, 43 insertions(+), 32 deletions(-)

diff --git a/src/test/java/org/apache/bcel/classfile/JDKClassDumpTestCase.java b/src/test/java/org/apache/bcel/classfile/JDKClassDumpTestCase.java
index a53af89c..311a0fde 100644
--- a/src/test/java/org/apache/bcel/classfile/JDKClassDumpTestCase.java
+++ b/src/test/java/org/apache/bcel/classfile/JDKClassDumpTestCase.java
@@ -17,19 +17,19 @@
 
 package org.apache.bcel.classfile;
 
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.ByteArrayOutputStream;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
-import java.io.File;
 import java.io.InputStream;
 import java.util.Enumeration;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 
 /**
  * Test that dump() methods work on the JDK classes
@@ -52,36 +52,25 @@ public class JDKClassDumpTestCase {
         }
     }
 
-    private void testJar(final File file) throws Exception {
-        System.out.println("parsing " + file);
-        try (JarFile jar = new JarFile(file)) {
-            final Enumeration<JarEntry> en = jar.entries();
-            while (en.hasMoreElements()) {
-                final JarEntry e = en.nextElement();
-                final String name = e.getName();
-                if (name.endsWith(".class")) {
-                    // System.out.println("parsing " + name);
-                    try (InputStream inputStream1 = jar.getInputStream(e); InputStream inputStream2 = jar.getInputStream(e);) {
-                        compare(new ClassParser(inputStream1, name).parse(), inputStream2, name);
-                    }
+    private void testJar(final JarFile jar) throws Exception {
+        System.out.println("parsing " + jar.getName());
+        final Enumeration<JarEntry> en = jar.entries();
+        while (en.hasMoreElements()) {
+            final JarEntry e = en.nextElement();
+            final String name = e.getName();
+            if (name.endsWith(".class")) {
+                // System.out.println("parsing " + name);
+                try (InputStream inputStream1 = jar.getInputStream(e); InputStream inputStream2 = jar.getInputStream(e);) {
+                    compare(new ClassParser(inputStream1, name).parse(), inputStream2, name);
                 }
             }
         }
     }
 
-    @Test
-    public void testPerformance() throws Exception {
-        final File javaLib = new File(System.getProperty("java.home") + "/lib");
-        javaLib.listFiles(file -> {
-            if (file.getName().endsWith(".jar")) {
-                try {
-                    testJar(file);
-                } catch (final Exception e) {
-                    fail(e.getMessage());
-                }
-            }
-            return false;
-        });
+    @ParameterizedTest
+    @MethodSource("org.apache.bcel.generic.JavaHome#streamJarFiles")
+    public void testPerformance(final JarFile path) throws Exception {
+        assertDoesNotThrow(() -> testJar(path));
     }
 
 }
diff --git a/src/test/java/org/apache/bcel/generic/JavaHome.java b/src/test/java/org/apache/bcel/generic/JavaHome.java
index 07d6a535..98a35e49 100644
--- a/src/test/java/org/apache/bcel/generic/JavaHome.java
+++ b/src/test/java/org/apache/bcel/generic/JavaHome.java
@@ -31,6 +31,7 @@ import java.util.HashSet;
 import java.util.Objects;
 import java.util.Set;
 import java.util.function.BiPredicate;
+import java.util.jar.JarFile;
 import java.util.stream.Stream;
 
 import org.apache.bcel.util.ModularRuntimeImage;
@@ -81,13 +82,22 @@ public class JavaHome {
         return Stream.concat(streamPropertyAndEnvVarValues(EXTRA_JAVA_HOMES), streamFromCustomKey(EXTRA_JAVA_ROOT));
     }
 
+    /**
+     * Used from {@code @MethodSource} for tests.
+     *
+     * @return a stream of JarFile.
+     */
+    public static Stream<JarFile> streamJarFiles() {
+        return streamJavaHomes().flatMap(JavaHome::streamJarFilesByExt);
+    }
+
     /**
      * Used from {@code @MethodSource} for tests.
      *
      * @return a stream of Java jar paths.
      */
     public static Stream<Path> streamJarPaths() {
-        return streamJavaHomes().flatMap(JavaHome::streamJars);
+        return streamJavaHomes().flatMap(JavaHome::streamJarPathsByExt);
     }
 
     /**
@@ -126,7 +136,7 @@ public class JavaHome {
      * @return a stream of Java jar paths.
      */
     public static Stream<Path> streamModulePaths() {
-        return streamJavaHomes().flatMap(JavaHome::streamModules);
+        return streamJavaHomes().flatMap(JavaHome::streamModulesByExt);
     }
 
     private static Stream<String> streamPropertyAndEnvVarValues(final String key) {
@@ -181,14 +191,26 @@ public class JavaHome {
         return find(10, (p, a) -> p.toString().endsWith(suffix));
     }
 
-    private Stream<Path> streamJars() {
+    private Stream<JarFile> streamJarFilesByExt() {
+        return streamJarPathsByExt().map(this::toJarFile);
+    }
+
+    private Stream<Path> streamJarPathsByExt() {
         return streamEndsWith(".jar");
     }
 
-    private Stream<Path> streamModules() {
+    private Stream<Path> streamModulesByExt() {
         return streamEndsWith(".jmod");
     }
 
+    private JarFile toJarFile(final Path path) {
+        try {
+            return new JarFile(path.toFile());
+        } catch (final IOException e) {
+            throw new UncheckedIOException(e);
+        }
+    }
+
     @Override
     public String toString() {
         return path.toString();