/**************************************************************************************
* Copyright (c) Jonas Bon�r, Alexandre Vasseur. All rights reserved. *
* http://aspectwerkz.codehaus.org *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the LGPL license *
* a copy of which has been included with this distribution in the license.txt file. *
**************************************************************************************/
package test;
import junit.framework.TestCase;
import org.codehaus.aspectwerkz.reflect.ClassInfo;
import org.codehaus.aspectwerkz.reflect.impl.java.JavaClassInfo;
/**
* @author <a href="mailto:jboner@codehaus.org">Jonas Bon�r </a>
* @TODO: this test is deprecated - need a better way of handling dynamic stuff
*/
public class DynamicDeploymentTest extends TestCase implements Loggable {
private static final String ASPECT_NAME = "test.aspect.DynamicDeploymentTestAspect";
private static final String NEW_ASPECT_NAME = "test.aspect.DynamicallyCreatedAspect";
private String m_logString = "";
private ClassInfo m_classMetaData = JavaClassInfo.getClassInfo(DynamicDeploymentTest.class);
public DynamicDeploymentTest(String name) {
super(name);
}
// FIXME XXX implement dynamic deployment and comment out tests
// public void testReorderAdvicesAtRuntime1() {
// m_logString = "";
// reorderAdvicesTestMethod();
// assertEquals("before1 before2 invocation after2 after1 ", m_logString);
//
// // get the pointcut by name (can also be retrieved by method meta-data)
// Pointcut pointcut = SystemLoader.getCflowStack(this.getClass()).getAspectManager("tests")
// .getPointcutManager(ASPECT_NAME).getPointcut("pc1 || pc2 || pc3");
//
// // get the advices
// List advices = pointcut.getAroundAdviceIndexTuples();
// NameIndexTuple tuple1 = (NameIndexTuple) advices.get(0);
// NameIndexTuple tuple2 = (NameIndexTuple) advices.get(1);
//
// // reorder the advices
// advices.set(0, tuple2);
// advices.set(1, tuple1);
//
// // set the reordered advices
// pointcut.setAroundAdviceIndexTuples(advices);
// }
//
// public void testAddAdviceAtRuntime() {
// m_logString = "";
// addAdviceTestMethod();
// assertEquals("before1 invocation after1 ", m_logString);
// MethodInfo methodMetaData = null;
// try {
// methodMetaData = JavaMethodInfo.getMethodInfo(getClass().getMethodInfo(
// "addAdviceTestMethod",
// new Class[] {}));
// } catch (NoSuchMethodException e) {
// e.printStackTrace(); //To change body of catch statement use File | Settings | File
// // Templates.
// }
// Pointcut methodPointcut = (Pointcut) SystemLoader.getCflowStack(this.getClass())
// .getAspectManager("tests").getPointcutManager(ASPECT_NAME).getPointcuts(
// new ExpressionContext(PointcutType.EXECUTION, methodMetaData, null)).get(0);
// methodPointcut.addAroundAdvice("test.aspect.DynamicDeploymentTestAspect.advice2");
// m_logString = "";
// addAdviceTestMethod();
// assertEquals("before1 before2 invocation after2 after1 ", m_logString);
//
// // remove it for other tests
// methodPointcut.removeAroundAdvice("test.aspect.DynamicDeploymentTestAspect.advice2");
// }
//
// public void testRemoveAdviceAtRuntime() {
// m_logString = "";
// removeAdviceTestMethod();
// assertEquals("before1 before2 invocation after2 after1 ", m_logString);
// MethodInfo methodMetaData = null;
// try {
// methodMetaData = JavaMethodInfo.getMethodInfo(getClass().getMethodInfo(
// "removeAdviceTestMethod",
// new Class[] {}));
// } catch (NoSuchMethodException e) {
// e.printStackTrace(); //To change body of catch statement use File | Settings | File
// // Templates.
// }
// Pointcut methodPointcut = (Pointcut) SystemLoader.getCflowStack(this).getAspectManager("tests")
// .getPointcutManager(ASPECT_NAME).getPointcuts(
// new ExpressionContext(PointcutType.EXECUTION, methodMetaData, null)).get(0);
// List advices = methodPointcut.getAroundAdviceIndexTuples();
// NameIndexTuple adviceTuple = (NameIndexTuple) advices.remove(0);
// methodPointcut.setAroundAdviceIndexTuples(advices);
// m_logString = "";
// removeAdviceTestMethod();
// assertEquals("before2 invocation after2 ", m_logString);
//
// // restore it for other tests
// advices.add(0, adviceTuple);
// methodPointcut.setAroundAdviceIndexTuples(advices);
// }
//
// public void testCreateAspectAtRuntime() {
// try {
// // check that we have a pointcut at the createAspectTestMethod method
// m_logString = "";
// createAspectTestMethod();
// assertEquals("before2 invocation after2 ", m_logString);
//
// // create a new advice
// SystemLoader.getCflowStack(this).getAspectManager("tests").createAspect(
// NEW_ASPECT_NAME,
// NEW_ASPECT_NAME,
// DeploymentModel.PER_INSTANCE,
// null);
//
// // test the some stuff for the aspect
// assertNotNull(SystemLoader.getCflowStack(this).getAspectManager("tests")
// .getPointcutManager(NEW_ASPECT_NAME));
// assertEquals(DeploymentModel.PER_INSTANCE, SystemLoader.getCflowStack(this)
// .getAspectManager("tests").getPointcutManager(NEW_ASPECT_NAME)
// .getDeploymentModel());
// assertEquals(NEW_ASPECT_NAME, SystemLoader.getCflowStack(this).getAspectManager("tests")
// .getPointcutManager(NEW_ASPECT_NAME).getName());
// MethodInfo methodMetaData = null;
// try {
// methodMetaData = JavaMethodInfo.getMethodInfo(getClass().getMethodInfo(
// "createAspectTestMethod",
// new Class[] {}));
// } catch (NoSuchMethodException e) {
// e.printStackTrace(); //To change body of catch statement use File | Settings | File
// // Templates.
// }
//
// // get an existing pointcut
// Pointcut methodPointcut = (Pointcut) SystemLoader.getCflowStack(this).getAspectManager(
// "tests").getPointcutManager(ASPECT_NAME).getPointcuts(
// new ExpressionContext(PointcutType.EXECUTION, methodMetaData, null)).get(0);
//
// // add the new advice to the pointcut
// methodPointcut.addAroundAdvice("test.aspects.DynamicallyCreatedAspect.advice1");
//
// // check that it is executed
// m_logString = "";
// createAspectTestMethod();
// assertEquals("before2 beforeNew invocation afterNew after2 ", m_logString);
//
// //remove it for other tests
// methodPointcut.removeAroundAdvice("test.aspects.DynamicallyCreatedAspect.advice1");
// } catch (Exception e) {
// e.printStackTrace();
// fail(e.getMessage());
// }
// }
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
public static junit.framework.Test suite() {
return new junit.framework.TestSuite(DynamicDeploymentTest.class);
}
public void log(final String wasHere) {
m_logString += wasHere;
}
public void reorderAdvicesTestMethod() {
log("invocation ");
}
public void removeAdviceTestMethod() {
log("invocation ");
}
public void addAdviceTestMethod() {
log("invocation ");
}
public void createAspectTestMethod() {
log("invocation ");
}
}