1 10 package org.nanocontainer.aop.dynaop; 11 12 import org.nanocontainer.aop.AbstractAopTestCase; 13 import org.nanocontainer.aop.AspectsManager; 14 import org.nanocontainer.aop.ClassPointcut; 15 import org.nanocontainer.aop.ComponentPointcut; 16 import org.nanocontainer.aop.LoggingInterceptor; 17 import org.nanocontainer.aop.MethodPointcut; 18 import org.nanocontainer.aop.PointcutsFactory; 19 import org.nanocontainer.aop.defaults.AspectsComponentAdapterFactory; 20 import org.nanocontainer.testmodel.AnotherInterface; 21 import org.nanocontainer.testmodel.Dao; 22 import org.nanocontainer.testmodel.DaoImpl; 23 import org.nanocontainer.testmodel.IdGenerator; 24 import org.nanocontainer.testmodel.IdGeneratorImpl; 25 import org.nanocontainer.testmodel.Identifiable; 26 import org.nanocontainer.testmodel.IdentifiableMixin; 27 import org.nanocontainer.testmodel.OrderEntity; 28 import org.nanocontainer.testmodel.OrderEntityImpl; 29 import org.picocontainer.MutablePicoContainer; 30 import org.picocontainer.defaults.ComponentAdapterFactory; 31 import org.picocontainer.defaults.DefaultPicoContainer; 32 33 import java.lang.reflect.Method ; 34 35 38 public class DynaopAspectsManagerTestCase extends AbstractAopTestCase { 39 40 private AspectsManager aspects = new DynaopAspectsManager(); 41 private ComponentAdapterFactory caFactory = new AspectsComponentAdapterFactory(aspects); 42 private MutablePicoContainer pico = new DefaultPicoContainer(caFactory); 43 private PointcutsFactory cuts = aspects.getPointcutsFactory(); 44 45 public void testInterceptor() { 46 StringBuffer log = new StringBuffer (); 47 aspects.registerInterceptor(cuts.instancesOf(Dao.class), cuts.allMethods(), new LoggingInterceptor(log)); 48 pico.registerComponentImplementation(Dao.class, DaoImpl.class); 49 Dao dao = (Dao) pico.getComponentInstance(Dao.class); 50 verifyIntercepted(dao, log); 51 } 52 53 public void testContainerSuppliedInterceptor() { 54 aspects.registerInterceptor(cuts.instancesOf(Dao.class), cuts.allMethods(), LoggingInterceptor.class); 55 56 pico.registerComponentImplementation("log", StringBuffer .class); 57 pico.registerComponentImplementation(LoggingInterceptor.class); 58 pico.registerComponentImplementation(Dao.class, DaoImpl.class); 59 60 Dao dao = (Dao) pico.getComponentInstance(Dao.class); 61 StringBuffer log = (StringBuffer ) pico.getComponentInstance("log"); 62 verifyIntercepted(dao, log); 63 } 64 65 public void testComponentInterceptor() { 66 StringBuffer log = new StringBuffer (); 67 68 aspects.registerInterceptor(cuts.component("intercepted"), cuts.allMethods(), new LoggingInterceptor(log)); 69 pico.registerComponentImplementation("intercepted", DaoImpl.class); 70 pico.registerComponentImplementation("notIntercepted", DaoImpl.class); 71 72 Dao intercepted = (Dao) pico.getComponentInstance("intercepted"); 73 Dao notIntercepted = (Dao) pico.getComponentInstance("notIntercepted"); 74 75 verifyIntercepted(intercepted, log); 76 verifyNotIntercepted(notIntercepted, log); 77 } 78 79 public void testContainerSuppliedComponentInterceptor() { 80 aspects.registerInterceptor(cuts.component("intercepted"), cuts.allMethods(), LoggingInterceptor.class); 81 82 pico.registerComponentImplementation("log", StringBuffer .class); 83 pico.registerComponentImplementation(LoggingInterceptor.class); 84 pico.registerComponentImplementation("intercepted", DaoImpl.class); 85 pico.registerComponentImplementation("notIntercepted", DaoImpl.class); 86 87 StringBuffer log = (StringBuffer ) pico.getComponentInstance("log"); 88 Dao intercepted = (Dao) pico.getComponentInstance("intercepted"); 89 Dao notIntercepted = (Dao) pico.getComponentInstance("notIntercepted"); 90 91 verifyIntercepted(intercepted, log); 92 verifyNotIntercepted(notIntercepted, log); 93 } 94 95 public void testMixin() { 96 aspects.registerMixin(cuts.instancesOf(Dao.class), IdentifiableMixin.class); 97 pico.registerComponentImplementation(Dao.class, DaoImpl.class); 98 Dao dao = (Dao) pico.getComponentInstance(Dao.class); 99 verifyMixin(dao); 100 assertTrue(dao instanceof AnotherInterface); 101 } 102 103 public void testContainerSuppliedMixin() { 104 aspects.registerMixin(cuts.instancesOf(OrderEntity.class), IdentifiableMixin.class); 105 pico.registerComponentImplementation("order1", OrderEntityImpl.class); 106 pico.registerComponentImplementation("order2", OrderEntityImpl.class); 107 108 pico.registerComponentImplementation(IdGenerator.class, IdGeneratorImpl.class); 110 111 Identifiable order1 = (Identifiable) pico.getComponentInstance("order1"); 112 Identifiable order2 = (Identifiable) pico.getComponentInstance("order2"); 113 114 assertEquals(new Integer (1), order1.getId()); 115 assertEquals(new Integer (2), order2.getId()); 116 117 order1.setId(new Integer (42)); 121 assertEquals(new Integer (42), order1.getId()); 122 assertEquals(new Integer (2), order2.getId()); 123 } 124 125 public void testContainerSuppliedMixinWithMixinExplicitlyRegistered() { 126 aspects.registerMixin(cuts.instancesOf(OrderEntity.class), IdentifiableMixin.class); 127 pico.registerComponentImplementation(IdentifiableMixin.class); 128 pico.registerComponentImplementation("order1", OrderEntityImpl.class); 129 pico.registerComponentImplementation("order2", OrderEntityImpl.class); 130 131 Identifiable order1 = (Identifiable) pico.getComponentInstance("order1"); 132 Identifiable order2 = (Identifiable) pico.getComponentInstance("order2"); 133 134 assertEquals(new Integer (1), order1.getId()); 135 assertEquals(new Integer (1), order2.getId()); 136 137 order1.setId(new Integer (42)); 140 assertEquals(new Integer (42), order1.getId()); 141 assertEquals(new Integer (42), order2.getId()); 142 } 143 144 public void testComponentMixin() { 145 pico.registerComponentImplementation("hasMixin", DaoImpl.class); 146 pico.registerComponentImplementation("noMixin", DaoImpl.class); 147 148 aspects.registerMixin(cuts.component("hasMixin"), IdentifiableMixin.class); 149 150 Dao hasMixin = (Dao) pico.getComponentInstance("hasMixin"); 151 Dao noMixin = (Dao) pico.getComponentInstance("noMixin"); 152 153 verifyMixin(hasMixin); 154 verifyNoMixin(noMixin); 155 assertTrue(hasMixin instanceof AnotherInterface); 156 } 157 158 public void testContainerSuppliedComponentMixin() { 159 aspects.registerMixin(cuts.componentName("hasMixin*"), new Class []{Identifiable.class}, 160 IdentifiableMixin.class); 161 162 pico.registerComponentImplementation("hasMixin1", OrderEntityImpl.class); 163 pico.registerComponentImplementation("hasMixin2", OrderEntityImpl.class); 164 pico.registerComponentImplementation("noMixin", OrderEntityImpl.class); 165 pico.registerComponentImplementation(IdGenerator.class, IdGeneratorImpl.class); 166 167 Identifiable hasMixin1 = (Identifiable) pico.getComponentInstance("hasMixin1"); 168 Identifiable hasMixin2 = (Identifiable) pico.getComponentInstance("hasMixin1"); 169 OrderEntity noMixin = (OrderEntity) pico.getComponentInstance("noMixin"); 170 171 assertFalse(noMixin instanceof Identifiable); 172 assertEquals(new Integer (1), hasMixin1.getId()); 173 assertEquals(new Integer (2), hasMixin2.getId()); 174 175 hasMixin1.setId(new Integer (42)); 176 assertEquals(new Integer (42), hasMixin1.getId()); 177 assertEquals(new Integer (2), hasMixin2.getId()); 178 } 179 180 public void testMixinExplicitInterfaces() { 181 aspects.registerMixin(cuts.instancesOf(Dao.class), new Class []{Identifiable.class}, IdentifiableMixin.class); 182 pico.registerComponentImplementation(Dao.class, DaoImpl.class); 183 Dao dao = (Dao) pico.getComponentInstance(Dao.class); 184 verifyMixin(dao); 185 assertFalse(dao instanceof AnotherInterface); 186 } 187 188 public void testComponentMixinExplicitInterfaces() { 189 pico.registerComponentImplementation("hasMixin", DaoImpl.class); 190 pico.registerComponentImplementation("noMixin", DaoImpl.class); 191 192 aspects.registerMixin(cuts.component("hasMixin"), new Class []{Identifiable.class}, IdentifiableMixin.class); 193 194 Dao hasMixin = (Dao) pico.getComponentInstance("hasMixin"); 195 Dao noMixin = (Dao) pico.getComponentInstance("noMixin"); 196 197 verifyMixin(hasMixin); 198 verifyNoMixin(noMixin); 199 200 assertFalse(hasMixin instanceof AnotherInterface); 201 } 202 203 public void testCustomClassPointcut() { 204 StringBuffer log = new StringBuffer (); 205 206 ClassPointcut customCut = new ClassPointcut() { 207 public boolean picks(Class clazz) { 208 return true; 209 } 210 }; 211 212 aspects.registerInterceptor(customCut, cuts.allMethods(), new LoggingInterceptor(log)); 213 pico.registerComponentImplementation(Dao.class, DaoImpl.class); 214 Dao dao = (Dao) pico.getComponentInstance(Dao.class); 215 verifyIntercepted(dao, log); 216 } 217 218 public void testCustomMethodPointcut() { 219 StringBuffer log = new StringBuffer (); 220 221 MethodPointcut customCut = new MethodPointcut() { 222 public boolean picks(Method method) { 223 return true; 224 } 225 }; 226 227 aspects.registerInterceptor(cuts.instancesOf(Dao.class), customCut, new LoggingInterceptor(log)); 228 pico.registerComponentImplementation(Dao.class, DaoImpl.class); 229 Dao dao = (Dao) pico.getComponentInstance(Dao.class); 230 verifyIntercepted(dao, log); 231 } 232 233 public void testCustomComponentPointcut() { 234 StringBuffer log = new StringBuffer (); 235 236 ComponentPointcut customCut = new ComponentPointcut() { 237 public boolean picks(Object componentKey) { 238 return true; 239 } 240 }; 241 242 aspects.registerInterceptor(customCut, cuts.allMethods(), new LoggingInterceptor(log)); 243 pico.registerComponentImplementation(Dao.class, DaoImpl.class); 244 Dao dao = (Dao) pico.getComponentInstance(Dao.class); 245 verifyIntercepted(dao, log); 246 } 247 248 } | Popular Tags |