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); + } + } }