Browse Source

tests for Fix 106736 - permitting classes dir as aspect URL (also permitting .zip files)

tags/V1_5_0M3
wisberg 19 years ago
parent
commit
84542fbb09

+ 65
- 0
weaver/testdata/WeavingURLClassLoaderTest/build.xml View File

@@ -0,0 +1,65 @@

<!--
bug 106736 (classes dir); also permitting .zip variants
To upgrade binary input form, reset ${aspectj.lib.dir} below.
-->
<project name="WeavingURLClassLoaderTest" default="all" basedir=".">

<target name="all" depends="init"
description="build libs, test that failure works">
<property name="out.lib.dir"
location="${basedir}/builtLibs"/>
<iajc outjar="${out.lib.dir}/main.zip"
srcdir="${basedir}"
classpath="${aspectjrt.jar}"
includes="packag/Main.java"/>
<iajc outjar="${out.lib.dir}/aspect.zip"
classpath="${aspectjrt.jar}"
srcdir="${basedir}"
includes="packag/Aspect.aj"/>
<iajc outjar="${out.lib.dir}/aspect.jar"
classpath="${aspectjrt.jar}"
srcdir="${basedir}"
includes="packag/Aspect.aj"/>
<iajc destDir="${out.lib.dir}/classes"
classpath="${aspectjrt.jar}"
srcdir="${basedir}"
includes="packag/Aspect.aj"/>
<iajc outjar="${out.lib.dir}/test.jar"
classpath="${aspectjrt.jar}"
aspectpath="${out.lib.dir}/aspect.jar"
inpath="${out.lib.dir}/main.zip"/>
<java classname="packag.Main">
<classpath>
<pathelement location="${out.lib.dir}/test.jar"/>
<pathelement location="${out.lib.dir}/aspect.jar"/>
<pathelement location="${aspectjrt.jar}"/>
</classpath>
</java>
<delete file="${out.lib.dir}/test.jar"/>
</target>

<target name="init" depends="">
<!--
warning: checked-in aspectjtools.jar is from last release,
but current (HEAD) ltw requires aspect binaries to be built
with the current weaver, not last release. I use
location="${basedir}/../../../lib/aspectj/lib"/>
-->
<property name="aspectj.lib.dir"
location="${basedir}/../../../aj-build/install/lib"/>
<property name="aspectjtools.jar"
location="${aspectj.lib.dir}/aspectjtools.jar"/>
<property name="aspectjrt.jar"
location="${aspectj.lib.dir}/aspectjrt.jar"/>
<taskdef
resource="org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties">
<classpath>
<pathelement path="${aspectjtools.jar}"/>
</classpath>
</taskdef>
</target>

</project>

BIN
weaver/testdata/WeavingURLClassLoaderTest/builtLibs/aspect.jar View File


BIN
weaver/testdata/WeavingURLClassLoaderTest/builtLibs/aspect.zip View File


BIN
weaver/testdata/WeavingURLClassLoaderTest/builtLibs/classes/packag/Aspect.class View File


BIN
weaver/testdata/WeavingURLClassLoaderTest/builtLibs/main.zip View File


+ 7
- 0
weaver/testdata/WeavingURLClassLoaderTest/packag/Aspect.aj View File

@@ -0,0 +1,7 @@
package packag;

public aspect Aspect {
void around() : execution(public static void *.main(String[])) {
// don't proceed, avoid exception
}
}

+ 7
- 0
weaver/testdata/WeavingURLClassLoaderTest/packag/Main.java View File

@@ -0,0 +1,7 @@
package packag;

public class Main {
public static void main(String[] args) {
throw new Error("around advice should have applied here");
}
}

+ 90
- 4
weaver/testsrc/org/aspectj/weaver/WeavingURLClassLoaderTest.java View File

@@ -22,6 +22,7 @@ import java.util.Properties;
import junit.framework.TestCase;

import org.aspectj.bridge.AbortException;
import org.aspectj.testing.util.TestUtil.TestError;
import org.aspectj.util.FileUtil;
import org.aspectj.weaver.tools.WeavingAdaptor;

@@ -43,6 +44,7 @@ public class WeavingURLClassLoaderTest extends TestCase {
private final static String AROUNDCLOSURE_ASPECTS = BcweaverTests.TESTDATA_PATH + "/ltw-acaspects.jar";
private final static String ITD_ASPECTS = BcweaverTests.TESTDATA_PATH + "/ltw-itdaspects.jar";
private final static String PER_ASPECTS = BcweaverTests.TESTDATA_PATH + "/ltw-peraspects.jar";
private final static String TEST_BASE = BcweaverTests.TESTDATA_PATH + "/WeavingURLClassLoaderTest/builtLibs";

private final static String NULL = "null";

@@ -86,7 +88,7 @@ public class WeavingURLClassLoaderTest extends TestCase {
WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());

try {
Class clazz = loader.loadClass("LTWHelloWorld");
loader.loadClass("LTWHelloWorld");
fail("Expecting org.aspectj.bridge.AbortException");
}
catch (Exception ex) {
@@ -262,7 +264,7 @@ public class WeavingURLClassLoaderTest extends TestCase {
WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader());

try {
Class clazz = loader.loadClass("LTWHelloWorld");
loader.loadClass("LTWHelloWorld");
fail("Expecting java.lang.ClassNotFoundException");
}
catch (Exception ex) {
@@ -279,7 +281,7 @@ public class WeavingURLClassLoaderTest extends TestCase {
URL[] aspectURLs = new URL[] { aspects };
try {
WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader());
new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader());
fail("Expecting org.aspectj.bridge.AbortException");
}
catch (Exception ex) {
@@ -363,7 +365,91 @@ public class WeavingURLClassLoaderTest extends TestCase {
fail(ex.toString());
}
}

public void testZipAspects() {
try {
doTestZipAspects(TEST_BASE + "/aspect.zip");
} catch (Error ex) {
failWithException(ex);
} catch (Exception ex) {
failWithException(ex);
}
}
public void testJarAspects() {
try {
doTestZipAspects(TEST_BASE + "/aspect.jar");
} catch (Error ex) {
failWithException(ex);
} catch (Exception ex) {
failWithException(ex);
}
}
/** PR#106736 */
public void testClassAspects() {
try {
doTestZipAspects(TEST_BASE + "/classes");
} catch (Error ex) {
failWithException(ex);
} catch (Exception ex) {
failWithException(ex);
}
}
public void testZipJarAspectsTest() {
try {
doTestZipAspectsTest();
// bug: doTestZipAspects("") attempts to load packag.Aspect?
fail("expected error to be thrown");
} catch (InvocationTargetException ex) {
// expecting error
assertTrue(ex.getTargetException() instanceof Error);
} catch (RuntimeException ex) {
// expecting error
String message = ex.getMessage();
// expecting error - seems to be wrapped wrong
if (-1 == message.indexOf("around advice")) {
failWithException(ex);
}
} catch (Error ex) {
failWithException(ex);
} catch (Exception ex) {
failWithException(ex);
}
}
private void doTestZipAspects(String aspectLib) throws Exception {
File classZip = new File(TEST_BASE + "/main.zip");
File zipLib = new File(aspectLib);
URL classes = FileUtil.getFileURL(classZip);
URL aspectjrt = FileUtil.getFileURL(new File(ASPECTJRT));
URL aspects = FileUtil.getFileURL(zipLib);
URL[] classURLs = new URL[] { aspects, classes, aspectjrt };
URL[] aspectURLs = new URL[] { aspects };
ClassLoader parent = getClass().getClassLoader();
WeavingURLClassLoader loader
= new WeavingURLClassLoader(classURLs, aspectURLs, parent);
Class clazz = loader.loadClass("packag.Main");
invokeMain(clazz,new String[] { });
// throws Error unless advice applies
}

private void doTestZipAspectsTest() throws Exception {
URL classes = FileUtil.getFileURL(new File(TEST_BASE + "/main.zip"));
URL aspectjrt = FileUtil.getFileURL(new File(ASPECTJRT));
URL[] classURLs = new URL[] { classes, aspectjrt };
ClassLoader parent = getClass().getClassLoader();
WeavingURLClassLoader loader
= new WeavingURLClassLoader(classURLs, new URL[] { }, parent);
Class clazz = loader.loadClass("packag.Main");
invokeMain(clazz,new String[] { });
// throws Error because advice does not apply
}

private void failWithException(Throwable t) {
throw new TestError(t.getMessage(), t);
}
public static void invokeMain (Class clazz, String[] args)
{
Class[] paramTypes = new Class[1];

Loading…
Cancel
Save