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 af73a2ff Tests and coverage for Utility class (#16) (#175)
af73a2ff is described below

commit af73a2ff8fdc0a9b98ccc5adf349a3802d09f20c
Author: nbauma109 <nbauma...@users.noreply.github.com>
AuthorDate: Sat Nov 26 22:06:48 2022 +0100

    Tests and coverage for Utility class (#16) (#175)
    
    * UtilityTestCase - testCodeToString - use verbose = false
    * Utility - removed unused equals
    * PLSETestCase - encode/decode with compress true/false
---
 .../java/org/apache/bcel/classfile/Utility.java    | 13 -------
 src/test/java/org/apache/bcel/PLSETestCase.java    | 16 +++++---
 .../org/apache/bcel/classfile/UtilityTestCase.java | 43 ++++++++++++++++++++++
 3 files changed, 54 insertions(+), 18 deletions(-)

diff --git a/src/main/java/org/apache/bcel/classfile/Utility.java 
b/src/main/java/org/apache/bcel/classfile/Utility.java
index 4d2bc084..4dcf0690 100644
--- a/src/main/java/org/apache/bcel/classfile/Utility.java
+++ b/src/main/java/org/apache/bcel/classfile/Utility.java
@@ -702,19 +702,6 @@ public abstract class Utility {
         return caw.toString();
     }
 
-    static boolean equals(final byte[] a, final byte[] b) {
-        int size;
-        if ((size = a.length) != b.length) {
-            return false;
-        }
-        for (int i = 0; i < size; i++) {
-            if (a[i] != b[i]) {
-                return false;
-            }
-        }
-        return true;
-    }
-
     /**
      * Fillup char with up to length characters with char 'fill' and justify 
it left or right.
      *
diff --git a/src/test/java/org/apache/bcel/PLSETestCase.java 
b/src/test/java/org/apache/bcel/PLSETestCase.java
index 9e5fe484..edb2b0e3 100644
--- a/src/test/java/org/apache/bcel/PLSETestCase.java
+++ b/src/test/java/org/apache/bcel/PLSETestCase.java
@@ -19,6 +19,7 @@ package org.apache.bcel;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.util.stream.Stream;
 
@@ -38,6 +39,8 @@ import org.apache.bcel.generic.InvokeInstruction;
 import org.apache.bcel.generic.MethodGen;
 import org.apache.bcel.generic.Type;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 
 public class PLSETestCase extends AbstractTestCase {
     /**
@@ -137,8 +140,9 @@ public class PLSETestCase extends AbstractTestCase {
     /**
      * Test to improve BCEL tests code coverage for classfile/Utility.java.
      */
-    @Test
-    public void testCoverage() throws ClassNotFoundException, 
java.io.IOException {
+    @ParameterizedTest
+    @ValueSource(booleans = { true, false })
+    public void testCoverage(final boolean compress) throws 
ClassNotFoundException, java.io.IOException {
         // load a class with a wide variety of byte codes - including 
tableswitch and lookupswitch
         final JavaClass clazz = getTestJavaClass(PACKAGE_BASE_NAME + 
".data.ConstantPoolX");
         for (final Method m : clazz.getMethods()) {
@@ -146,10 +150,12 @@ public class PLSETestCase extends AbstractTestCase {
             
Utility.methodTypeToSignature(Utility.methodSignatureReturnType(signature), 
Utility.methodSignatureArgumentTypes(signature)); // discard result
             final Code code = m.getCode();
             if (code != null) {
-                final String encoded = Utility.encode(code.getCode(), true);
+                // TODO: need for real assertions here
+                final String encoded = Utility.encode(code.getCode(), 
compress);
+                assertNotNull(encoded);
                 // following statement will throw exeception without 
classfile/Utility.encode fix
-                Utility.decode(encoded, true); // discard result
-                code.toString(); // discard result
+                assertNotNull(Utility.decode(encoded, compress));
+                assertNotNull(code.toString());
             }
         }
     }
diff --git a/src/test/java/org/apache/bcel/classfile/UtilityTestCase.java 
b/src/test/java/org/apache/bcel/classfile/UtilityTestCase.java
index ec635256..0829e749 100644
--- a/src/test/java/org/apache/bcel/classfile/UtilityTestCase.java
+++ b/src/test/java/org/apache/bcel/classfile/UtilityTestCase.java
@@ -19,10 +19,13 @@ package org.apache.bcel.classfile;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.bcel.Const;
+import org.apache.bcel.Repository;
 import org.junit.jupiter.api.Test;
+import java.util.Arrays;
 
 public class UtilityTestCase {
 
@@ -128,4 +131,44 @@ public class UtilityTestCase {
         assertEquals("<K extends Object, V extends Object> extends Object",
             
Utility.signatureToString("<K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/lang/Object;"),
 "class signature");
     }
+
+    @Test
+    public void testCodeToString() throws Exception {
+        class CodeToString {
+            int[][] a = new int[0][0];
+
+            CodeToString() {
+                if (a instanceof int[][]) {
+                    System.out.print(Arrays.asList(a).size());
+                }
+            }
+        }
+        final JavaClass javaClass = Repository.lookupClass(CodeToString.class);
+        assertNotNull(javaClass);
+        for (final Method method : javaClass.getMethods()) {
+            assertEquals("<init>", method.getName());
+            final String code = method.getCode().toString(false);
+            assertTrue(code.contains("0:    aload_0"), code);
+            assertTrue(code.contains("1:    aload_1"), code);
+            assertTrue(code.contains("2:    
putfield\t\torg.apache.bcel.classfile.UtilityTestCase$1CodeToString.this$0 
Lorg/apache/bcel/classfile/UtilityTestCase;"), code);
+            assertTrue(code.contains("5:    aload_0"), code);
+            assertTrue(code.contains("6:    
invokespecial\tjava.lang.Object.<init> ()V"), code);
+            assertTrue(code.contains("9:    aload_0"), code);
+            assertTrue(code.contains("10:   iconst_0"), code);
+            assertTrue(code.contains("11:   iconst_0"), code);
+            assertTrue(code.contains("12:   multianewarray\t<[[I>\t2"), code);
+            assertTrue(code.contains("16:   
putfield\t\torg.apache.bcel.classfile.UtilityTestCase$1CodeToString.a [[I"), 
code);
+            assertTrue(code.contains("19:   aload_0"), code);
+            assertTrue(code.contains("20:   
getfield\t\torg.apache.bcel.classfile.UtilityTestCase$1CodeToString.a [[I"), 
code);
+            assertTrue(code.contains("23:   instanceof\t<[[I>"), code);
+            assertTrue(code.contains("26:   ifeq\t\t#47"), code);
+            assertTrue(code.contains("29:   getstatic\t\tjava.lang.System.out 
Ljava/io/PrintStream;"), code);
+            assertTrue(code.contains("32:   aload_0"), code);
+            assertTrue(code.contains("33:   
getfield\t\torg.apache.bcel.classfile.UtilityTestCase$1CodeToString.a [[I"), 
code);
+            assertTrue(code.contains("36:   
invokestatic\tjava.util.Arrays.asList ([Ljava/lang/Object;)Ljava/util/List;"), 
code);
+            assertTrue(code.contains("39:   
invokeinterface\tjava.util.List.size ()I1\t0"), code);
+            assertTrue(code.contains("44:   
invokevirtual\tjava.io.PrintStream.print (I)V"), code);
+            assertTrue(code.contains("47:   return"), code);
+        }
+    }
 }

Reply via email to