1 package org.sapia.soto.aop; 2 3 import junit.framework.TestCase; 4 5 import org.sapia.soto.SotoContainer; 6 7 8 12 public class AdviserTest extends TestCase { 13 16 public AdviserTest(String name) { 17 super(name); 18 } 19 20 public void testMethodWithoutSig() throws Exception { 21 Adviser adviser = new Adviser(); 22 TestAroundAdvice advice; 23 AdviceDef def = adviser.createAdviceDef(); 24 def.setAdvice(advice = new TestAroundAdvice()); 25 def.setId("around"); 26 27 MethodPointCut pc = adviser.createMethod(); 28 pc.setName("first*"); 29 30 AdviceRef ref = pc.createAdviceRef(); 31 ref.setId("around"); 32 33 TestService svc = new TestService(); 34 svc = (TestService) adviser.advise(svc); 35 svc.firstMethod(); 36 svc.firstMethod("someArg"); 37 38 super.assertEquals(2, advice.preCount); 39 super.assertEquals(2, advice.postCount); 40 } 41 42 public void testMethodWithSig() throws Exception { 43 Adviser adviser = new Adviser(); 44 TestAroundAdvice advice; 45 AdviceDef def = adviser.createAdviceDef(); 46 def.setAdvice(advice = new TestAroundAdvice()); 47 def.setId("around"); 48 49 MethodPointCut pc = adviser.createMethod(); 50 pc.setName("first*"); 51 pc.setSig("java.lang.*"); 52 53 AdviceRef ref = pc.createAdviceRef(); 54 ref.setId("around"); 55 56 TestService svc = new TestService(); 57 svc = (TestService) adviser.advise(svc); 58 svc.firstMethod(); 59 svc.firstMethod("someArg"); 60 61 super.assertEquals(1, advice.preCount); 62 super.assertEquals(1, advice.postCount); 63 } 64 65 public void testBeforeAdvice() throws Exception { 66 Adviser adviser = new Adviser(); 67 TestBeforeAdvice advice; 68 AdviceDef def = adviser.createAdviceDef(); 69 def.setAdvice(advice = new TestBeforeAdvice()); 70 def.setId("before"); 71 72 MethodPointCut pc = adviser.createMethod(); 73 pc.setName("*"); 74 75 AdviceRef ref = pc.createAdviceRef(); 76 ref.setId("before"); 77 78 TestService svc = new TestService(); 79 svc = (TestService) adviser.advise(svc); 80 svc.firstMethod(); 81 svc.firstMethod("someArg"); 82 svc.secondMethod(); 83 84 super.assertEquals(3, advice.count); 85 } 86 87 public void testAfterAdvice() throws Exception { 88 Adviser adviser = new Adviser(); 89 TestAfterAdvice advice; 90 AdviceDef def = adviser.createAdviceDef(); 91 def.setAdvice(advice = new TestAfterAdvice()); 92 def.setId("after"); 93 94 MethodPointCut pc = adviser.createMethod(); 95 pc.setName("*"); 96 97 AdviceRef ref = pc.createAdviceRef(); 98 ref.setId("after"); 99 100 TestService svc = new TestService(); 101 svc = (TestService) adviser.advise(svc); 102 svc.firstMethod(); 103 svc.firstMethod("someArg"); 104 svc.secondMethod(); 105 106 super.assertEquals(3, advice.count); 107 } 108 109 public void testThrowsAdvice() throws Exception { 110 Adviser adviser = new Adviser(); 111 TestThrowsAdvice advice; 112 AdviceDef def = adviser.createAdviceDef(); 113 def.setAdvice(advice = new TestThrowsAdvice()); 114 def.setId("throws"); 115 116 MethodPointCut pc = adviser.createMethod(); 117 pc.setName("*"); 118 119 AdviceRef ref = pc.createAdviceRef(); 120 ref.setId("throws"); 121 122 TestService svc = new TestService(); 123 svc = (TestService) adviser.advise(svc); 124 125 try { 126 svc.throwsMethod(); 127 } catch (Exception e) { 128 } 130 131 super.assertTrue("Throws advice was not invoked", advice.invoked); 132 } 133 134 public void testReturnAdvice() throws Exception { 135 Adviser adviser = new Adviser(); 136 TestReturnAdvice advice; 137 AdviceDef def = adviser.createAdviceDef(); 138 def.setAdvice(advice = new TestReturnAdvice()); 139 def.setId("return"); 140 141 MethodPointCut pc = adviser.createMethod(); 142 pc.setName("getName"); 143 144 AdviceRef ref = pc.createAdviceRef(); 145 ref.setId("return"); 146 147 TestService svc = new TestService(); 148 svc = (TestService) adviser.advise(svc); 149 svc.getName(); 150 super.assertEquals(1, advice.count); 151 } 152 153 public void testGroup() throws Exception { 154 Adviser adviser = new Adviser(); 155 TestAfterAdvice after = new TestAfterAdvice(); 156 AdviceDef outer = adviser.createAdviceDef(); 157 outer.setAdvice(after); 158 outer.setId("outer"); 159 160 Group group = adviser.createGroup(); 161 group.setId("test"); 162 163 AdviceDef inner = group.createAdviceDef(); 164 AdviceRef outerRef = group.createAdviceRef(); 165 outerRef.setId("outer"); 166 167 TestAroundAdvice adv = new TestAroundAdvice(); 168 inner.setAdvice(adv); 169 170 MethodPointCut pc = adviser.createMethod(); 171 pc.setName("*"); 172 173 GroupRef ref = pc.createGroupRef(); 174 ref.setId("test"); 175 176 TestService svc = new TestService(); 177 svc = (TestService) adviser.advise(svc); 178 svc.firstMethod(); 179 super.assertEquals(1, adv.preCount); 180 super.assertEquals(1, adv.postCount); 181 super.assertEquals(1, after.count); 182 } 183 184 public void testConfig() throws Exception { 185 SotoContainer cont = new SotoContainer(); 186 cont.load("org/sapia/soto/aop/aopConfig.xml"); 187 cont.start(); 188 cont.dispose(); 189 } 190 191 public void testImplements() throws Exception { 192 Adviser adviser = new Adviser(); 193 adviser.setImplements( 194 "java.io.Serializable, org.sapia.soto.aop.TestMarker*, java.**.Comparable"); 195 196 TestImplementation impl = new TestImplementation(); 197 super.assertTrue(adviser.matchesImplements(impl)); 198 adviser.setImplements("**"); 199 impl = new TestImplementation(); 200 super.assertTrue(adviser.matchesImplements(impl)); 201 adviser.setImplements("org.sapia.soto.aop.TestMarker*"); 202 impl = new TestImplementation(); 203 super.assertTrue(adviser.matchesImplements(impl)); 204 } 205 206 public void testPreInvocation() throws Exception { 207 Adviser adviser = new Adviser(); 208 TestBeforeAdviceInvoker first; 209 TestBeforeAdvice second; 210 TestAfterAdvice third; 211 AdviceDef firstDef = adviser.createAdviceDef(); 212 AdviceDef secondDef = adviser.createAdviceDef(); 213 AdviceDef thirdDef = adviser.createAdviceDef(); 214 firstDef.setAdvice(first = new TestBeforeAdviceInvoker()); 215 firstDef.setId("first"); 216 secondDef.setAdvice(second = new TestBeforeAdvice()); 217 secondDef.setId("second"); 218 thirdDef.setAdvice(third = new TestAfterAdvice()); 219 thirdDef.setId("third"); 220 221 MethodPointCut pc = adviser.createMethod(); 222 pc.setName("*"); 223 224 pc.createAdviceRef().setId("first"); 225 pc.createAdviceRef().setId("second"); 226 pc.createAdviceRef().setId("third"); 227 228 TestService svc = new TestService(); 229 svc = (TestService) adviser.advise(svc); 230 svc.firstMethod(); 231 232 Invocation inv = first.invocation; 233 super.assertTrue("Invocation not passed to advice", inv != null); 234 super.assertTrue("Invocation was not called", inv.wasInvoked()); 235 super.assertEquals(0, second.count); 236 super.assertEquals(1, third.count); 237 } 238 } 239 | Popular Tags |