diff options
author | aclement <aclement> | 2005-10-14 07:23:40 +0000 |
---|---|---|
committer | aclement <aclement> | 2005-10-14 07:23:40 +0000 |
commit | 8982544f13eb5cb082ca19db2bd2c5f77b1e5965 (patch) | |
tree | d7e4c96b17ce76331686fc3cab53326d0087f039 /weaver | |
parent | 51a0fe4edd56a626ef5570e43bd2225be0dcb4dd (diff) | |
download | aspectj-8982544f13eb5cb082ca19db2bd2c5f77b1e5965.tar.gz aspectj-8982544f13eb5cb082ca19db2bd2c5f77b1e5965.zip |
Code for enhancement 107741: Updated WeavingURLClassLoader (thanks to Matthew Webster for the patch)
Diffstat (limited to 'weaver')
3 files changed, 0 insertions, 621 deletions
diff --git a/weaver/src/org/aspectj/weaver/WeavingURLClassLoader.java b/weaver/src/org/aspectj/weaver/WeavingURLClassLoader.java deleted file mode 100644 index 347cb104c..000000000 --- a/weaver/src/org/aspectj/weaver/WeavingURLClassLoader.java +++ /dev/null @@ -1,119 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 2004 IBM Corporation - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Common Public License v1.0 - * which accompanies this distribution and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * Matthew Webster, Adrian Colyer, - * Martin Lippert initial implementation - * ******************************************************************/ - -package org.aspectj.weaver; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.security.CodeSource; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.StringTokenizer; - -import org.aspectj.weaver.tools.WeavingAdaptor; -import org.aspectj.weaver.tools.WeavingClassLoader; - -public class WeavingURLClassLoader extends ExtensibleURLClassLoader implements WeavingClassLoader { - - public static final String WEAVING_CLASS_PATH = "aj.class.path"; - public static final String WEAVING_ASPECT_PATH = "aj.aspect.path"; - - private URL[] aspectURLs; - private WeavingAdaptor adaptor; - private Map generatedClasses = new HashMap(); /* String -> byte[] */ - - /* - * This constructor is needed when using "-Djava.system.class.loader". - */ - public WeavingURLClassLoader (ClassLoader parent) { - this(getURLs(getClassPath()),getURLs(getAspectPath()),parent); -// System.err.println("? WeavingURLClassLoader.<init>(" + parent + ")"); - } - - public WeavingURLClassLoader (URL[] classURLs, URL[] aspectURLs, ClassLoader parent) { - super(classURLs,parent); -// System.err.println("? WeavingURLClassLoader.<init>()"); - this.aspectURLs = aspectURLs; - adaptor = new WeavingAdaptor(this); - } - - private static String getAspectPath () { - return System.getProperty(WEAVING_ASPECT_PATH,""); - } - - private static String getClassPath () { - return System.getProperty(WEAVING_CLASS_PATH,""); - } - - private static URL[] getURLs (String path) { - List urlList = new ArrayList(); - for (StringTokenizer t = new StringTokenizer(path,File.pathSeparator); - t.hasMoreTokens();) { - File f = new File(t.nextToken().trim()); - try { - if (f.exists()) { - URL url = f.toURL(); - if (url != null) urlList.add(url); - } - } catch (MalformedURLException e) {} - } - - URL[] urls = new URL[urlList.size()]; - urlList.toArray(urls); - return urls; - } - - protected void addURL(URL url) { - adaptor.addURL(url); - super.addURL(url); - } - - /** - * Override to weave class using WeavingAdaptor - */ - protected Class defineClass(String name, byte[] b, CodeSource cs) throws IOException { -// System.err.println("? WeavingURLClassLoader.defineClass(" + name + ", [" + b.length + "])"); - b = adaptor.weaveClass(name,b); - return super.defineClass(name, b, cs); - } - - /** - * Override to find classes generated by WeavingAdaptor - */ - protected byte[] getBytes (String name) throws IOException { - byte[] bytes = super.getBytes(name); - - if (bytes == null) { -// return adaptor.findClass(name); - return (byte[])generatedClasses.remove(name); - } - - return bytes; - } - - /** - * Implement method from WeavingClassLoader - */ - public URL[] getAspectURLs() { - return aspectURLs; - } - - public void acceptClass (String name, byte[] bytes) { - generatedClasses.put(name,bytes); - } - -} diff --git a/weaver/testsrc/org/aspectj/weaver/BcweaverTests.java b/weaver/testsrc/org/aspectj/weaver/BcweaverTests.java index 94cb7ddac..1c59bd841 100644 --- a/weaver/testsrc/org/aspectj/weaver/BcweaverTests.java +++ b/weaver/testsrc/org/aspectj/weaver/BcweaverTests.java @@ -52,7 +52,6 @@ public class BcweaverTests extends TestCase { //$JUnit-BEGIN$ suite.addTestSuite(MemberTestCase.class); suite.addTestSuite(TypeXTestCase.class); - suite.addTestSuite(WeavingURLClassLoaderTest.class); suite.addTestSuite(WeaverMessagesTestCase.class); suite.addTestSuite(DumpTestCase.class); //$JUnit-END$ diff --git a/weaver/testsrc/org/aspectj/weaver/WeavingURLClassLoaderTest.java b/weaver/testsrc/org/aspectj/weaver/WeavingURLClassLoaderTest.java deleted file mode 100644 index c21115619..000000000 --- a/weaver/testsrc/org/aspectj/weaver/WeavingURLClassLoaderTest.java +++ /dev/null @@ -1,501 +0,0 @@ -/* ******************************************************************* - * Copyright (c) 2004 IBM Corporation - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Common Public License v1.0 - * which accompanies this distribution and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * Matthew Webster initial implementation - * ******************************************************************/ - -package org.aspectj.weaver; - -import java.io.File; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.net.URL; -import java.util.Enumeration; -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; - -/** - * @author websterm - * - * To change the template for this generated type comment go to - * Window>Preferences>Java>Code Generation>Code and Comments - */ -public class WeavingURLClassLoaderTest extends TestCase { - - private final static String ASPECTJRT = "../runtime/bin"; - private final static String CLASSES_JAR = BcweaverTests.TESTDATA_PATH + "/ltw-classes.jar"; - private final static String WOVEN_JAR = BcweaverTests.TESTDATA_PATH + "/ltw-woven.jar"; - private final static String JUNK_JAR = BcweaverTests.TESTDATA_PATH + "/ltw-junk.jar"; - private final static String ADVICE_ASPECTS = BcweaverTests.TESTDATA_PATH + "/ltw-aspects.jar"; - private final static String DW_ADVICE_ASPECTS = BcweaverTests.TESTDATA_PATH + "/ltw-dwaspects.jar"; - private final static String DE_ADVICE_ASPECTS = BcweaverTests.TESTDATA_PATH + "/ltw-deaspects.jar"; - 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"; - - private Properties savedProperties; - - public WeavingURLClassLoaderTest(String name) { - super(name); - } - - public void testLoadClass () { - setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,""); - setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,CLASSES_JAR); - WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader()); - - try { - Class clazz = loader.loadClass("LTWHelloWorld"); - invokeMain(clazz,new String[] {}); - } - catch (Exception ex) { - fail(ex.toString()); - } - } - - public void testLoadWovenClass () { - setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,""); - setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,WOVEN_JAR); - WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader()); - - try { - Class clazz = loader.loadClass("LTWHelloWorld"); - invokeMain(clazz,new String[] { "LTWAspect" }); - } - catch (Exception ex) { - fail(ex.toString()); - } - } - - public void testWeaveWovenClass () { - setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,ADVICE_ASPECTS); - setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,ADVICE_ASPECTS + File.pathSeparator + WOVEN_JAR); - WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader()); - - try { - loader.loadClass("LTWHelloWorld"); - fail("Expecting org.aspectj.bridge.AbortException"); - } - catch (Exception ex) { - assertTrue("Expecting org.aspectj.bridge.AbortException caught " + ex,(ex instanceof AbortException)); - } - } - - public void testWeavingURLClassLoader () { - URL classes = FileUtil.getFileURL(new File(CLASSES_JAR)); - URL aspectjrt = FileUtil.getFileURL(new File(ASPECTJRT)); - URL aspects = FileUtil.getFileURL(new File(ADVICE_ASPECTS)); - URL[] classURLs = new URL[] { aspects, classes, aspectjrt }; - URL[] aspectURLs = new URL[] { aspects }; - WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader()); - - try { - Class clazz = loader.loadClass("LTWHelloWorld"); - invokeMain(clazz,new String[] { "LTWAspect" }); - } - catch (Exception ex) { - fail(ex.toString()); - } - } - - public void testWeaveAdvice () { - setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,ADVICE_ASPECTS); - setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,ADVICE_ASPECTS + File.pathSeparator + CLASSES_JAR + File.pathSeparator + ASPECTJRT); - WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader()); - - try { - Class clazz = loader.loadClass("LTWHelloWorld"); - invokeMain(clazz,new String[] { "LTWAspect" }); - } - catch (Exception ex) { - fail(ex.toString()); - } - } - - public void testWeaveAdviceWithVerbose () { - setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,ADVICE_ASPECTS); - setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,ADVICE_ASPECTS + File.pathSeparator + CLASSES_JAR + File.pathSeparator + ASPECTJRT); - setSystemProperty(WeavingAdaptor.WEAVING_ADAPTOR_VERBOSE,"true"); - WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader()); - - try { - Class clazz = loader.loadClass("LTWHelloWorld"); - invokeMain(clazz,new String[] { "LTWAspect" }); - } - catch (Exception ex) { - fail(ex.toString()); - } - } - - public void testWeaveAdviceWithWeaveInfo () { - setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,ADVICE_ASPECTS); - setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,ADVICE_ASPECTS + File.pathSeparator + CLASSES_JAR + File.pathSeparator + ASPECTJRT); - setSystemProperty(WeavingAdaptor.SHOW_WEAVE_INFO_PROPERTY,"true"); - WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader()); - - try { - Class clazz = loader.loadClass("LTWHelloWorld"); - invokeMain(clazz,new String[] { "LTWAspect" }); - } - catch (Exception ex) { - fail(ex.toString()); - } - } - - public void testWeaveDeclareWarningAdvice () { - setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,DW_ADVICE_ASPECTS); - setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,DW_ADVICE_ASPECTS + File.pathSeparator + CLASSES_JAR); - WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader()); - - try { - Class clazz = loader.loadClass("LTWHelloWorld"); - invokeMain(clazz,new String[] {} ); - } - catch (Exception ex) { - fail(ex.toString()); - } - } - - public void testWeaveDeclareErrorAdvice () { - setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,DE_ADVICE_ASPECTS); - setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,DE_ADVICE_ASPECTS + File.pathSeparator + CLASSES_JAR); - WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader()); - - try { - Class clazz = loader.loadClass("LTWHelloWorld"); - invokeMain(clazz,new String[] {} ); - fail("Expecting org.aspectj.bridge.AbortException"); - } - catch (Exception ex) { - assertTrue("Expecting org.aspectj.bridge.AbortException caught " + ex,(ex instanceof AbortException)); - } - } - - public void testWeaveAroundClosure () { - setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,AROUNDCLOSURE_ASPECTS); - setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,AROUNDCLOSURE_ASPECTS + File.pathSeparator + CLASSES_JAR + File.pathSeparator + ASPECTJRT); - WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader()); - - try { - Class clazz = loader.loadClass("LTWHelloWorld"); - invokeMain(clazz,new String[] { "LTWAroundClosure" }); - } - catch (Exception ex) { - fail(ex.toString()); - } - } - - public void testWeavingITD () { - URL classes = FileUtil.getFileURL(new File(CLASSES_JAR)); - URL aspectjrt = FileUtil.getFileURL(new File(ASPECTJRT)); - URL aspects = FileUtil.getFileURL(new File(ITD_ASPECTS)); - URL[] classURLs = new URL[] { aspects, classes, aspectjrt }; - URL[] aspectURLs = new URL[] { aspects }; - WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader()); - - try { - Class clazz = loader.loadClass("LTWHelloWorld"); - invokeMain(clazz,new String[] { "LTWInterfaceITD", "LTWFieldITD", "LTWMethodITD" }); - } - catch (Exception ex) { - fail(ex.toString()); - } - } - - public void testWeavingPer () { - URL classes = FileUtil.getFileURL(new File(CLASSES_JAR)); - URL aspectjrt = FileUtil.getFileURL(new File(ASPECTJRT)); - URL aspects = FileUtil.getFileURL(new File(PER_ASPECTS)); - URL[] classURLs = new URL[] { aspects, classes, aspectjrt }; - URL[] aspectURLs = new URL[] { aspects }; - WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader()); - - try { - Class clazz = loader.loadClass("LTWHelloWorld"); - invokeMain(clazz,new String[] { "LTWPerthis" }); - } - catch (Exception ex) { - fail(ex.toString()); - } - } - - public void testWeavingAspects () { - URL classes = FileUtil.getFileURL(new File(CLASSES_JAR)); - URL aspectjrt = FileUtil.getFileURL(new File(ASPECTJRT)); - URL aspects1 = FileUtil.getFileURL(new File(ADVICE_ASPECTS)); - URL aspects2 = FileUtil.getFileURL(new File(AROUNDCLOSURE_ASPECTS)); - URL aspects3 = FileUtil.getFileURL(new File(ITD_ASPECTS)); - URL aspects4 = FileUtil.getFileURL(new File(PER_ASPECTS)); - URL[] classURLs = new URL[] { aspects1, aspects2, aspects3, aspects4, classes, aspectjrt }; - URL[] aspectURLs = new URL[] { aspects1, aspects2, aspects3, aspects4 }; - WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader()); - - try { - Class clazz = loader.loadClass("LTWHelloWorld"); - invokeMain(clazz,new String[] { "LTWAspect", "LTWAroundClosure", "LTWPerthis", "LTWInterfaceITD", "LTWFieldITD", "LTWMethodITD", "LTWPerthis"}); - } - catch (Exception ex) { - fail(ex.toString()); - } - } - - public void testJunkJar () { - File junkJar = new File(JUNK_JAR); - assertFalse(junkJar + " should not exist",junkJar.exists()); - - URL classes = FileUtil.getFileURL(junkJar); - URL[] classURLs = new URL[] { classes }; - URL[] aspectURLs = new URL[] { }; - WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader()); - - try { - loader.loadClass("LTWHelloWorld"); - fail("Expecting java.lang.ClassNotFoundException"); - } - catch (Exception ex) { - assertTrue("Expecting java.lang.ClassNotFoundException caught " + ex,(ex instanceof ClassNotFoundException)); - } - } - - public void testJunkAspectJar () { - File junkJar = new File(JUNK_JAR); - assertFalse(junkJar + " should not exist",junkJar.exists()); - - URL aspects = FileUtil.getFileURL(junkJar); - URL[] classURLs = new URL[] { aspects }; - URL[] aspectURLs = new URL[] { aspects }; - - try { - new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader()); - fail("Expecting org.aspectj.bridge.AbortException"); - } - catch (Exception ex) { - assertTrue("Expecting org.aspectj.bridge.AbortException caught " + ex,(ex instanceof org.aspectj.bridge.AbortException)); - } - } - - public void testAddURL () { - URL classes = FileUtil.getFileURL(new File(CLASSES_JAR)); - URL aspectjrt = FileUtil.getFileURL(new File(ASPECTJRT)); - URL aspects = FileUtil.getFileURL(new File(ADVICE_ASPECTS)); - URL[] classURLs = new URL[] { aspects, aspectjrt }; - URL[] aspectURLs = new URL[] { aspects }; - - WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader()); - loader.addURL(classes); - - try { - Class clazz = loader.loadClass("LTWHelloWorld"); - invokeMain(clazz,new String[] { "LTWAspect" }); - } - catch (Exception ex) { - fail(ex.toString()); - } - } - - public void testParentChild() { - URL classes = FileUtil.getFileURL(new File(CLASSES_JAR)); - URL aspectjrt = FileUtil.getFileURL(new File(ASPECTJRT)); - URL aspects = FileUtil.getFileURL(new File(ADVICE_ASPECTS)); - - URL[] classURLs = new URL[] { aspects, aspectjrt }; - URL[] aspectURLs = new URL[] { aspects }; - WeavingURLClassLoader parent = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader()); - - classURLs = new URL[] { classes }; - aspectURLs = new URL[] { }; - WeavingURLClassLoader child = new WeavingURLClassLoader(classURLs,aspectURLs,parent); - - try { - Class clazz = child.loadClass("LTWHelloWorld"); - invokeMain(clazz,new String[] { "LTWAspect" }); - } - catch (Exception ex) { - fail(ex.toString()); - } - } - - /* - * Aspects on ASPECTPATH but missing from CLASSPATH - */ - public void testIncompletePath () { - setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,ADVICE_ASPECTS); - setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,CLASSES_JAR); - WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader()); - - try { - Class clazz = loader.loadClass("LTWHelloWorld"); - invokeMain(clazz,new String[] { "LTWAspect" }); - fail("Expecting java.lang.NoClassDefFoundError"); - } - catch (Exception ex) { - } - } - - /* - * Ensure package object is correct - */ - public void testPackage () { - setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,""); - setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,CLASSES_JAR); - WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader()); - - try { - Class clazz = loader.loadClass("ltw.LTWPackageTest"); - invokeMain(clazz,new String[] { }); - Package pakkage = clazz.getPackage(); - assertTrue("Expected 'ltw' got " + pakkage,(pakkage != null)); - } - catch (Exception ex) { - 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]; - paramTypes[0] = args.getClass(); - - try { - Method method = clazz.getDeclaredMethod("main",paramTypes); - Object[] params = new Object[1]; - params[0] = args; - method.invoke(null,params); - } - catch (InvocationTargetException ex) { - throw new RuntimeException(ex.getTargetException().toString()); - } - catch (Exception ex) { - throw new RuntimeException(ex.toString()); - } - } - - private void setSystemProperty (String key, String value) { - Properties systemProperties = System.getProperties(); - copyProperty(key,systemProperties,savedProperties); - systemProperties.setProperty(key,value); - } - - private static void copyProperty (String key, Properties from, Properties to) { - String value = from.getProperty(key,NULL); - to.setProperty(key,value); - } - - protected void setUp() throws Exception { - super.setUp(); - savedProperties = new Properties(); - } - - protected void tearDown() throws Exception { - super.tearDown(); - - /* Restore system properties */ - Properties systemProperties = System.getProperties(); - for (Enumeration enu = savedProperties.keys(); enu.hasMoreElements(); ) { - String key = (String)enu.nextElement(); - String value = savedProperties.getProperty(key); - if (value == NULL) systemProperties.remove(key); - else systemProperties.setProperty(key,value); - } - } - -} |