1 /*************************************************************************************** 2 * Copyright (c) Jonas BonŽr, Alexandre Vasseur. All rights reserved. * 3 * http://aspectwerkz.codehaus.org * 4 * ---------------------------------------------------------------------------------- * 5 * The software in this package is published under the terms of the LGPL license * 6 * a copy of which has been included with this distribution in the license.txt file. * 7 **************************************************************************************/ 8 package test; 9 10 import junit.framework.TestCase; 11 import org.codehaus.aspectwerkz.reflect.ClassInfo; 12 import org.codehaus.aspectwerkz.reflect.impl.java.JavaClassInfo; 13 14 15 /*** 16 * @author <a href="mailto:jboner@codehaus.org">Jonas BonŽr </a> 17 * @TODO: this test is deprecated - need a better way of handling dynamic stuff 18 */ 19 public class DynamicDeploymentTest extends TestCase implements Loggable { 20 private static final String ASPECT_NAME = "test.aspect.DynamicDeploymentTestAspect"; 21 22 private static final String NEW_ASPECT_NAME = "test.aspect.DynamicallyCreatedAspect"; 23 24 private String m_logString = ""; 25 26 private ClassInfo m_classMetaData = JavaClassInfo.getClassInfo(DynamicDeploymentTest.class); 27 28 public DynamicDeploymentTest(String name) { 29 super(name); 30 } 31 32 // FIXME XXX implement dynamic deployment and comment out tests 33 34 // public void testReorderAdvicesAtRuntime1() { 35 // m_logString = ""; 36 // reorderAdvicesTestMethod(); 37 // assertEquals("before1 before2 invocation after2 after1 ", m_logString); 38 // 39 // // get the pointcut by name (can also be retrieved by method meta-data) 40 // Pointcut pointcut = SystemLoader.getCflowStack(this.getClass()).getAspectManager("tests") 41 // .getPointcutManager(ASPECT_NAME).getPointcut("pc1 || pc2 || pc3"); 42 // 43 // // get the advices 44 // List advices = pointcut.getAroundAdviceIndexTuples(); 45 // NameIndexTuple tuple1 = (NameIndexTuple) advices.get(0); 46 // NameIndexTuple tuple2 = (NameIndexTuple) advices.get(1); 47 // 48 // // reorder the advices 49 // advices.set(0, tuple2); 50 // advices.set(1, tuple1); 51 // 52 // // set the reordered advices 53 // pointcut.setAroundAdviceIndexTuples(advices); 54 // } 55 // 56 // public void testAddAdviceAtRuntime() { 57 // m_logString = ""; 58 // addAdviceTestMethod(); 59 // assertEquals("before1 invocation after1 ", m_logString); 60 // MethodInfo methodMetaData = null; 61 // try { 62 // methodMetaData = JavaMethodInfo.getMethodInfo(getClass().getMethodInfo( 63 // "addAdviceTestMethod", 64 // new Class[] {})); 65 // } catch (NoSuchMethodException e) { 66 // e.printStackTrace(); //To change body of catch statement use File | Settings | File 67 // // Templates. 68 // } 69 // Pointcut methodPointcut = (Pointcut) SystemLoader.getCflowStack(this.getClass()) 70 // .getAspectManager("tests").getPointcutManager(ASPECT_NAME).getPointcuts( 71 // new ExpressionContext(PointcutType.EXECUTION, methodMetaData, null)).get(0); 72 // methodPointcut.addAroundAdvice("test.aspect.DynamicDeploymentTestAspect.advice2"); 73 // m_logString = ""; 74 // addAdviceTestMethod(); 75 // assertEquals("before1 before2 invocation after2 after1 ", m_logString); 76 // 77 // // remove it for other tests 78 // methodPointcut.removeAroundAdvice("test.aspect.DynamicDeploymentTestAspect.advice2"); 79 // } 80 // 81 // public void testRemoveAdviceAtRuntime() { 82 // m_logString = ""; 83 // removeAdviceTestMethod(); 84 // assertEquals("before1 before2 invocation after2 after1 ", m_logString); 85 // MethodInfo methodMetaData = null; 86 // try { 87 // methodMetaData = JavaMethodInfo.getMethodInfo(getClass().getMethodInfo( 88 // "removeAdviceTestMethod", 89 // new Class[] {})); 90 // } catch (NoSuchMethodException e) { 91 // e.printStackTrace(); //To change body of catch statement use File | Settings | File 92 // // Templates. 93 // } 94 // Pointcut methodPointcut = (Pointcut) SystemLoader.getCflowStack(this).getAspectManager("tests") 95 // .getPointcutManager(ASPECT_NAME).getPointcuts( 96 // new ExpressionContext(PointcutType.EXECUTION, methodMetaData, null)).get(0); 97 // List advices = methodPointcut.getAroundAdviceIndexTuples(); 98 // NameIndexTuple adviceTuple = (NameIndexTuple) advices.remove(0); 99 // methodPointcut.setAroundAdviceIndexTuples(advices); 100 // m_logString = ""; 101 // removeAdviceTestMethod(); 102 // assertEquals("before2 invocation after2 ", m_logString); 103 // 104 // // restore it for other tests 105 // advices.add(0, adviceTuple); 106 // methodPointcut.setAroundAdviceIndexTuples(advices); 107 // } 108 // 109 // public void testCreateAspectAtRuntime() { 110 // try { 111 // // check that we have a pointcut at the createAspectTestMethod method 112 // m_logString = ""; 113 // createAspectTestMethod(); 114 // assertEquals("before2 invocation after2 ", m_logString); 115 // 116 // // create a new advice 117 // SystemLoader.getCflowStack(this).getAspectManager("tests").createAspect( 118 // NEW_ASPECT_NAME, 119 // NEW_ASPECT_NAME, 120 // DeploymentModel.PER_INSTANCE, 121 // null); 122 // 123 // // test the some stuff for the aspect 124 // assertNotNull(SystemLoader.getCflowStack(this).getAspectManager("tests") 125 // .getPointcutManager(NEW_ASPECT_NAME)); 126 // assertEquals(DeploymentModel.PER_INSTANCE, SystemLoader.getCflowStack(this) 127 // .getAspectManager("tests").getPointcutManager(NEW_ASPECT_NAME) 128 // .getDeploymentModel()); 129 // assertEquals(NEW_ASPECT_NAME, SystemLoader.getCflowStack(this).getAspectManager("tests") 130 // .getPointcutManager(NEW_ASPECT_NAME).getName()); 131 // MethodInfo methodMetaData = null; 132 // try { 133 // methodMetaData = JavaMethodInfo.getMethodInfo(getClass().getMethodInfo( 134 // "createAspectTestMethod", 135 // new Class[] {})); 136 // } catch (NoSuchMethodException e) { 137 // e.printStackTrace(); //To change body of catch statement use File | Settings | File 138 // // Templates. 139 // } 140 // 141 // // get an existing pointcut 142 // Pointcut methodPointcut = (Pointcut) SystemLoader.getCflowStack(this).getAspectManager( 143 // "tests").getPointcutManager(ASPECT_NAME).getPointcuts( 144 // new ExpressionContext(PointcutType.EXECUTION, methodMetaData, null)).get(0); 145 // 146 // // add the new advice to the pointcut 147 // methodPointcut.addAroundAdvice("test.aspects.DynamicallyCreatedAspect.advice1"); 148 // 149 // // check that it is executed 150 // m_logString = ""; 151 // createAspectTestMethod(); 152 // assertEquals("before2 beforeNew invocation afterNew after2 ", m_logString); 153 // 154 // //remove it for other tests 155 // methodPointcut.removeAroundAdvice("test.aspects.DynamicallyCreatedAspect.advice1"); 156 // } catch (Exception e) { 157 // e.printStackTrace(); 158 // fail(e.getMessage()); 159 // } 160 // } 161 162 public static void main(String[] args) { 163 junit.textui.TestRunner.run(suite()); 164 } 165 166 public static junit.framework.Test suite() { 167 return new junit.framework.TestSuite(DynamicDeploymentTest.class); 168 } 169 170 public void log(final String wasHere) { 171 m_logString += wasHere; 172 } 173 174 public void reorderAdvicesTestMethod() { 175 log("invocation "); 176 } 177 178 public void removeAdviceTestMethod() { 179 log("invocation "); 180 } 181 182 public void addAdviceTestMethod() { 183 log("invocation "); 184 } 185 186 public void createAspectTestMethod() { 187 log("invocation "); 188 } 189 }