1 10 package org.nanocontainer.aop.dynaop; 11 12 import org.nanocontainer.aop.AbstractAopTestCase; 13 import org.nanocontainer.aop.AspectablePicoContainer; 14 import org.nanocontainer.aop.AspectablePicoContainerFactory; 15 import org.nanocontainer.aop.LoggingInterceptor; 16 import org.nanocontainer.aop.PointcutsFactory; 17 import org.nanocontainer.testmodel.AnotherInterface; 18 import org.nanocontainer.testmodel.Dao; 19 import org.nanocontainer.testmodel.DaoImpl; 20 import org.nanocontainer.testmodel.IdGenerator; 21 import org.nanocontainer.testmodel.IdGeneratorImpl; 22 import org.nanocontainer.testmodel.Identifiable; 23 import org.nanocontainer.testmodel.IdentifiableMixin; 24 import org.nanocontainer.testmodel.OrderEntity; 25 import org.nanocontainer.testmodel.OrderEntityImpl; 26 import org.picocontainer.MutablePicoContainer; 27 import org.picocontainer.PicoContainer; 28 import org.picocontainer.defaults.DefaultPicoContainer; 29 import org.picocontainer.testmodel.SimpleTouchable; 30 31 34 public class DynaopAspectablePicoContainerFactoryTestCase extends AbstractAopTestCase { 35 36 private AspectablePicoContainerFactory containerFactory = new DynaopAspectablePicoContainerFactory(); 37 private AspectablePicoContainer pico = containerFactory.createContainer(); 38 private PointcutsFactory cuts = pico.getPointcutsFactory(); 39 40 public void testInterceptor() { 41 StringBuffer log = new StringBuffer (); 42 pico.registerInterceptor(cuts.instancesOf(Dao.class), cuts.allMethods(), new LoggingInterceptor(log)); 43 pico.registerComponentImplementation(Dao.class, DaoImpl.class); 44 Dao dao = (Dao) pico.getComponentInstance(Dao.class); 45 verifyIntercepted(dao, log); 46 } 47 48 public void testContainerSuppliedInterceptor() { 49 pico.registerInterceptor(cuts.instancesOf(Dao.class), cuts.allMethods(), LoggingInterceptor.class); 50 51 pico.registerComponentImplementation("log", StringBuffer .class); 52 pico.registerComponentImplementation(LoggingInterceptor.class); 53 pico.registerComponentImplementation(Dao.class, DaoImpl.class); 54 55 Dao dao = (Dao) pico.getComponentInstance(Dao.class); 56 StringBuffer log = (StringBuffer ) pico.getComponentInstance("log"); 57 verifyIntercepted(dao, log); 58 } 59 60 public void testComponentInterceptor() { 61 StringBuffer log = new StringBuffer (); 62 63 pico.registerInterceptor(cuts.component("intercepted"), cuts.allMethods(), new LoggingInterceptor(log)); 64 pico.registerComponentImplementation("intercepted", DaoImpl.class); 65 pico.registerComponentImplementation("notIntercepted", DaoImpl.class); 66 67 Dao intercepted = (Dao) pico.getComponentInstance("intercepted"); 68 Dao notIntercepted = (Dao) pico.getComponentInstance("notIntercepted"); 69 70 verifyIntercepted(intercepted, log); 71 verifyNotIntercepted(notIntercepted, log); 72 } 73 74 public void testContainerSuppliedComponentInterceptor() { 75 pico.registerInterceptor(cuts.component("intercepted"), cuts.allMethods(), LoggingInterceptor.class); 76 77 pico.registerComponentImplementation("log", StringBuffer .class); 78 pico.registerComponentImplementation(LoggingInterceptor.class); 79 pico.registerComponentImplementation("intercepted", DaoImpl.class); 80 pico.registerComponentImplementation("notIntercepted", DaoImpl.class); 81 82 StringBuffer log = (StringBuffer ) pico.getComponentInstance("log"); 83 Dao intercepted = (Dao) pico.getComponentInstance("intercepted"); 84 Dao notIntercepted = (Dao) pico.getComponentInstance("notIntercepted"); 85 86 verifyIntercepted(intercepted, log); 87 verifyNotIntercepted(notIntercepted, log); 88 } 89 90 public void testMixin() { 91 pico.registerMixin(cuts.instancesOf(Dao.class), IdentifiableMixin.class); 92 pico.registerComponentImplementation(Dao.class, DaoImpl.class); 93 Dao dao = (Dao) pico.getComponentInstance(Dao.class); 94 verifyMixin(dao); 95 assertTrue(dao instanceof AnotherInterface); 96 } 97 98 public void testContainerSuppliedMixin() { 99 pico.registerComponentImplementation(IdGenerator.class, IdGeneratorImpl.class); 100 pico.registerComponentImplementation("order1", OrderEntityImpl.class); 101 pico.registerComponentImplementation("order2", OrderEntityImpl.class); 102 pico.registerMixin(cuts.instancesOf(OrderEntity.class), new Class []{Identifiable.class}, 103 IdentifiableMixin.class); 104 105 Identifiable i1 = (Identifiable) pico.getComponentInstance("order1"); 106 Identifiable i2 = (Identifiable) pico.getComponentInstance("order2"); 107 108 assertEquals(new Integer (1), i1.getId()); 109 assertEquals(new Integer (2), i2.getId()); 110 111 i1.setId(new Integer (3)); 112 assertEquals(new Integer (3), i1.getId()); 113 assertEquals(new Integer (2), i2.getId()); 114 } 115 116 public void testComponentMixin() { 117 pico.registerComponentImplementation("hasMixin", DaoImpl.class); 118 pico.registerComponentImplementation("noMixin", DaoImpl.class); 119 120 pico.registerMixin(cuts.component("hasMixin"), IdentifiableMixin.class); 121 122 Dao hasMixin = (Dao) pico.getComponentInstance("hasMixin"); 123 Dao noMixin = (Dao) pico.getComponentInstance("noMixin"); 124 125 verifyMixin(hasMixin); 126 verifyNoMixin(noMixin); 127 assertTrue(hasMixin instanceof AnotherInterface); 128 } 129 130 public void testContainerSuppliedComponentMixin() { 131 pico.registerComponentImplementation(IdGenerator.class, IdGeneratorImpl.class); 132 pico.registerMixin(cuts.componentName("hasMixin*"), new Class []{Identifiable.class}, IdentifiableMixin.class); 133 pico.registerComponentImplementation("hasMixin1", OrderEntityImpl.class); 134 pico.registerComponentImplementation("hasMixin2", OrderEntityImpl.class); 135 pico.registerComponentImplementation("noMixin", OrderEntityImpl.class); 136 137 OrderEntity hasMixin1 = (OrderEntity) pico.getComponentInstance("hasMixin1"); 138 OrderEntity hasMixin2 = (OrderEntity) pico.getComponentInstance("hasMixin2"); 139 OrderEntity noMixin = (OrderEntity) pico.getComponentInstance("noMixin"); 140 141 assertTrue(hasMixin1 instanceof Identifiable); 142 assertTrue(hasMixin2 instanceof Identifiable); 143 assertFalse(noMixin instanceof Identifiable); 144 145 assertEquals(new Integer (1), ((Identifiable) hasMixin1).getId()); 146 assertEquals(new Integer (2), ((Identifiable) hasMixin2).getId()); 147 } 148 149 public void testMixinExplicitInterfaces() { 150 pico.registerMixin(cuts.instancesOf(Dao.class), new Class []{Identifiable.class}, IdentifiableMixin.class); 151 pico.registerComponentImplementation(Dao.class, DaoImpl.class); 152 Dao dao = (Dao) pico.getComponentInstance(Dao.class); 153 verifyMixin(dao); 154 assertFalse(dao instanceof AnotherInterface); 155 } 156 157 public void testComponentMixinExplicitInterfaces() { 158 pico.registerComponentImplementation("hasMixin", DaoImpl.class); 159 pico.registerComponentImplementation("noMixin", DaoImpl.class); 160 161 pico.registerMixin(cuts.component("hasMixin"), new Class []{Identifiable.class}, IdentifiableMixin.class); 162 163 Dao hasMixin = (Dao) pico.getComponentInstance("hasMixin"); 164 Dao noMixin = (Dao) pico.getComponentInstance("noMixin"); 165 166 verifyMixin(hasMixin); 167 verifyNoMixin(noMixin); 168 169 assertFalse(hasMixin instanceof AnotherInterface); 170 } 171 172 public void testCreateWithParentContainer() { 173 MutablePicoContainer parent = new DefaultPicoContainer(); 174 parent.registerComponentInstance("key", "value"); 175 AspectablePicoContainerFactory containerFactory = new DynaopAspectablePicoContainerFactory(); 176 PicoContainer child = containerFactory.createContainer(parent); 177 assertEquals("value", child.getComponentInstance("key")); 178 } 179 180 public void testMakeChildContainer(){ 181 AspectablePicoContainerFactory aspectableContainerFactory = new DynaopAspectablePicoContainerFactory(); 182 AspectablePicoContainer parent = aspectableContainerFactory.createContainer(); 183 parent.registerComponentImplementation("t1", SimpleTouchable.class); 184 AspectablePicoContainer child = aspectableContainerFactory.makeChildContainer(parent); 185 Object t1 = child.getParent().getComponentInstance("t1"); 186 assertNotNull(t1); 187 assertTrue(t1 instanceof SimpleTouchable); 188 } 189 190 public void testInterfacesWithClassPointcut() { 191 pico.registerComponentImplementation(Dao.class, DaoImpl.class); 192 pico.registerMixin(cuts.instancesOf(Dao.class), IdentifiableMixin.class); 193 pico.registerInterfaces(cuts.instancesOf(Dao.class), new Class []{AnotherInterface.class}); 194 Dao dao = (Dao) pico.getComponentInstance(Dao.class); 195 assertTrue(dao instanceof Identifiable); 196 assertTrue(dao instanceof AnotherInterface); 197 } 198 199 public void testInterfacesWithClassPointcutNoAdvice() { 200 pico.registerComponentImplementation(Dao.class, DaoImpl.class); 201 pico.registerInterfaces(cuts.instancesOf(Dao.class), new Class []{AnotherInterface.class}); 202 Dao dao = (Dao) pico.getComponentInstance(Dao.class); 203 204 assertFalse(dao instanceof AnotherInterface); 207 } 208 209 public void testInterfacesWithComponentPointcut() { 210 pico.registerComponentImplementation(Dao.class, DaoImpl.class); 211 pico.registerMixin(cuts.component(Dao.class), IdentifiableMixin.class); 212 pico.registerInterfaces(cuts.component(Dao.class), new Class []{AnotherInterface.class}); 213 Dao dao = (Dao) pico.getComponentInstance(Dao.class); 214 assertTrue(dao instanceof Identifiable); 215 assertTrue(dao instanceof AnotherInterface); 216 } 217 218 }
| Popular Tags
|