aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorAlexander Kriegisch <Alexander@Kriegisch.name>2022-02-23 21:48:04 +0700
committerAlexander Kriegisch <Alexander@Kriegisch.name>2022-02-23 21:48:04 +0700
commit0fb70c99cfc6432ceb8357f211722ca0be2dc9c4 (patch)
treef31833d8edd43ce50743ed047a3e8cc1b2763825 /tests
parent133685a5429967aca56f24ddf667e718d2f90097 (diff)
downloadaspectj-0fb70c99cfc6432ceb8357f211722ca0be2dc9c4.tar.gz
aspectj-0fb70c99cfc6432ceb8357f211722ca0be2dc9c4.zip
Regression test for #125: Bugs198Tests.testGitHub_125
This test fails when run against AspectJ 1.9.8 with JDT Core 1.9.8.RC3. It passes when using the latest JDT Core 1.9.9-SNAPSHOT. It sets system property 'org.aspectj.weaver.openarchives=20', provoking open classpath JAR file exhaustion when compiling a simple class with AJC, i.e. JARs are being forcibly closed and automatically re-opened, as soon as they are needed. Before the JDT Core bugfix, this test causes: java.lang.NullPointerException at ....compiler.batch.ClasspathJmod.getModulesDeclaringPackage With the bugfix incorporated into AspectJ Tools, the problem is gone. Note: New test dependency 'io.github.bmuskalla:scoped-system-properties' helps to test compilation with the temporarily changed global system property in isolation, saving the environment in a thread-local variable and later cleanly restoring the original values again. If we ever switch to parallel test execution, this would otherwise influence other tests and potentially cause weird side effects. Better safe than sorry. Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Diffstat (limited to 'tests')
-rw-r--r--tests/bugs198/github_125/Application.java11
-rw-r--r--tests/pom.xml11
-rw-r--r--tests/src/test/java/org/aspectj/systemtest/ajc198/Bugs198Tests.java15
-rw-r--r--tests/src/test/resources/org/aspectj/systemtest/ajc198/ajc198.xml14
4 files changed, 48 insertions, 3 deletions
diff --git a/tests/bugs198/github_125/Application.java b/tests/bugs198/github_125/Application.java
new file mode 100644
index 000000000..7e893fc1a
--- /dev/null
+++ b/tests/bugs198/github_125/Application.java
@@ -0,0 +1,11 @@
+public class Application {
+ public static void main(String[] argv) {
+ System.out.println("Hello world!");
+ }
+
+ static aspect MyAspect {
+ before(): execution(* Application.main(..)) {
+ System.out.println("Before advice");
+ }
+ }
+}
diff --git a/tests/pom.xml b/tests/pom.xml
index 8ab3878bc..33801c2f5 100644
--- a/tests/pom.xml
+++ b/tests/pom.xml
@@ -90,6 +90,17 @@
<version>${project.version}</version>
<scope>test</scope>
</dependency>
+ <!--
+ Used for tests setting system properties, e.g. for AJC, when we need to avoid polluting the global
+ system properties namespace with settings potentially influencing other tests.
+ See https://github.com/bmuskalla/scoped-system-properties.
+ -->
+ <dependency>
+ <groupId>io.github.bmuskalla</groupId>
+ <artifactId>scoped-system-properties</artifactId>
+ <version>1.1.0</version>
+ <scope>test</scope>
+ </dependency>
<!--
The tests need these during runtime, even though no direct usage is in our classes.
diff --git a/tests/src/test/java/org/aspectj/systemtest/ajc198/Bugs198Tests.java b/tests/src/test/java/org/aspectj/systemtest/ajc198/Bugs198Tests.java
index 5ca8619fb..7982ec630 100644
--- a/tests/src/test/java/org/aspectj/systemtest/ajc198/Bugs198Tests.java
+++ b/tests/src/test/java/org/aspectj/systemtest/ajc198/Bugs198Tests.java
@@ -7,6 +7,8 @@
*******************************************************************************/
package org.aspectj.systemtest.ajc198;
+import io.bmuskalla.system.properties.PropertyEnvironment;
+import io.bmuskalla.system.properties.ScopedSystemProperties;
import junit.framework.Test;
import org.aspectj.testing.XMLBasedAjcTestCase;
@@ -15,9 +17,9 @@ import org.aspectj.testing.XMLBasedAjcTestCase;
*/
public class Bugs198Tests extends XMLBasedAjcTestCase {
- public void testGitHub_105() {
- runTest("ITD annotation with mandatory parameter via aspectpath");
- }
+ public void testGitHub_105() {
+ runTest("ITD annotation with mandatory parameter via aspectpath");
+ }
public void testAnnotationStyleSpecialIfClauses() {
runTest("annotation style A");
@@ -39,6 +41,13 @@ public class Bugs198Tests extends XMLBasedAjcTestCase {
runTest("annotation style negated if");
}
+ public void testGitHub_125() {
+ try (PropertyEnvironment env = ScopedSystemProperties.newPropertyEnvironment()) {
+ env.setProperty("org.aspectj.weaver.openarchives", "20");
+ runTest("compiler can re-open closed JARs");
+ }
+ }
+
public static Test suite() {
return XMLBasedAjcTestCase.loadSuite(Bugs198Tests.class);
}
diff --git a/tests/src/test/resources/org/aspectj/systemtest/ajc198/ajc198.xml b/tests/src/test/resources/org/aspectj/systemtest/ajc198/ajc198.xml
index 9874736dd..0eb413baa 100644
--- a/tests/src/test/resources/org/aspectj/systemtest/ajc198/ajc198.xml
+++ b/tests/src/test/resources/org/aspectj/systemtest/ajc198/ajc198.xml
@@ -153,4 +153,18 @@
</run>
</ajc-test>
+ <ajc-test dir="bugs198/github_125" title="compiler can re-open closed JARs">
+ <!--
+ Here the Java test sets system property org.aspectj.weaver.openarchives to 20 in order to provoke
+ open JAR limit exhaustion
+ -->
+ <compile files="Application.java" options="-1.5" />
+ <run class="Application">
+ <stdout>
+ <line text="Before advice"/>
+ <line text="Hello world!"/>
+ </stdout>
+ </run>
+ </ajc-test>
+
</suite>