Releases: sbabcoc/JUnit-Foundation
Upgrade to latest Java-Utils; eliminate Guava usage
In this release, I upgraded to the latest release of Java-Utils, which allowed me to eliminate usage of Guava APIs. These really weren't doing very much for me, and including this library could cause mixed-version issues for client projects.
NOTE: This is a breaking change because I switched from using the Guava Optional class to the standard Java Optional class, and from using the Guava Function class to the standard Java Function class.
Add AgentBuilder listener to report transformation errors
In this release, I added an AgentBuilder listener to report errors that occur during transformations. This change was prompted by issues I'm having with Gradle in the Selenium Fountation project. After I added this listener, I discovered that I had existing transformation issues that had previously gone undetected. These have been resolved.
- I upgraded Byte Buddy to version 1.14.12.
- I also fixed a few minor issues in README.
Upgrade Java-Utils and Settings to latest releases
This release upgrade Java-Utils and Settings to the latest release - 3.1.1 and 3.0.2 respectively.
Update settings library
In this release, I updated to the latest settings library (3.0.1), which resolves an identified vulnerability.
Build for Java 8; upgrade dependencies and plugins
In this release, I finally dropped support for Java 7. By building this library for Java 8, I'm able to upgrade dependencies to newer versions that resolve identified vulnerabilities.
Upgrade dependencies
Upgrade to the latest releases of Java-Utils (2.2.0), Settings (2.3.11), and Logback (1.2.9).
For map keys, use Method.toString() instead of Method.hashCode()
It turns out that the hashCode()
implementation of the java.lang.reflect.Method
class is really weak. It only incorporates the declaring class and the method name, omitting other features of Method objects that make them unique. The implementation uses a non-standard process and isn't a match for the equals()
method of this class. Because the hashcode is so weak, it shouldn't be used as a Map key, but there were several places in JUnit Foundation where it was used for just this purpose.
In this release, I replaced uses of java.lang.reflect.Method#hashCode()
(both explicit and implicit) with the toString()
method.
Replace more reflection with byte code transformations
In this release, I've replaced more instances of reflection-based field access with equivalent methods added via byte code transformations. I'm approaching a point where the remaining instances are either targeting transient unnamed objects or couldn't be replaced because of type load order.
This work included relocating and optimizing the implementation of the ParameterizedDescription
fix for the JUnitParams runner. With a lot less code and simpler implementation, this new strategy produces the same result much more efficiently.
Replace reflective operations with Byte Buddy transformations
In this release, I eliminated reflective access to private fields that were throwing access violation warnings. These were definite compatibility problems for newer JVM releases.
In addition to making JUnit Foundation compatible with Java 17+, this release also fixes some fundamental errors with the annotation proxies produced for timeout management and automatic retry related to final
fields and annotation type reporting.
Finally, I extracted the class transformation code from LifecycleHooks
into a new JUnitAgent
class, eliminating the type restrictions the presence of this code imposed on this core interface. In a future release, I may use this new factoring to improve the type safety of this core utility class.
Add exception to retry notifications; fix assertions
In this release, I updated the retry notification message to add the stack trace of the exception that caused the test to fail. The addition of this exception information is requested via the RETRY_MORE_INFO setting or by setting the logging level to DEBUG.