1 10 package org.nanocontainer.script.groovy; 11 12 import java.io.StringReader ; 13 14 import org.nanocontainer.script.AbstractScriptedContainerBuilderTestCase; 15 import org.nanocontainer.testmodel.Dao; 16 import org.nanocontainer.testmodel.Identifiable; 17 import org.picocontainer.PicoContainer; 18 19 25 public class GroovyNodeBuilderAopTestCase extends AbstractScriptedContainerBuilderTestCase { 26 27 public void testContainerScopedInterceptor() { 28 String script = "" + 29 "package org.nanocontainer.script.groovy\n" + 30 "import org.nanocontainer.testmodel.*\n" + 31 "import org.nanocontainer.aop.dynaop.*\n" + 32 "" + 33 "log = new StringBuffer()\n" + 34 "logger = new LoggingInterceptor(log)\n" + 35 "\n" + 36 "cuts = new DynaopPointcutsFactory()\n" + 37 "builder = new DynaopGroovyNodeBuilder()\n" + 38 "nano = builder.container() {\n" + 39 " aspect(classCut:cuts.instancesOf(Dao.class), methodCut:cuts.allMethods(), interceptor:logger)\n" + 40 " component(key:Dao, class:DaoImpl)\n" + 41 " component(key:StringBuffer, instance:log)\n" + 42 "}\n"; 43 44 PicoContainer pico = buildContainer(script); 45 Dao dao = (Dao) pico.getComponentInstance(Dao.class); 46 StringBuffer log = (StringBuffer ) pico.getComponentInstance(StringBuffer .class); 47 verifyIntercepted(dao, log); 48 } 49 50 public void testContainerScopedPointcutWithNestedAdvices() { 51 String script = "" + 52 "package org.nanocontainer.script.groovy\n" + 53 "import org.nanocontainer.testmodel.*\n" + 54 "import org.nanocontainer.aop.dynaop.*\n" + 55 "" + 56 "log = new StringBuffer()\n" + 57 "logger = new LoggingInterceptor(log)\n" + 58 "\n" + 59 "cuts = new DynaopPointcutsFactory()\n" + 60 "builder = new DynaopGroovyNodeBuilder()\n" + 61 "nano = builder.container() {\n" + 62 " pointcut(classCut:cuts.instancesOf(Dao.class), methodCut:cuts.allMethods()) {\n" + 63 " aspect(interceptor:logger)\n" + 64 " }\n" + 65 " component(key:Dao, class:DaoImpl)\n" + 66 " component(key:StringBuffer, instance:log)\n" + 67 "}\n"; 68 69 PicoContainer pico = buildContainer(script); 70 Dao dao = (Dao) pico.getComponentInstance(Dao.class); 71 StringBuffer log = (StringBuffer ) pico.getComponentInstance(StringBuffer .class); 72 verifyIntercepted(dao, log); 73 } 74 75 public void testContainerScopedContainerSuppliedInterceptor() { 76 String script = "" + 77 "package org.nanocontainer.script.groovy\n" + 78 "import org.nanocontainer.testmodel.*\n" + 79 "import org.nanocontainer.aop.dynaop.*\n" + 80 "cuts = new DynaopPointcutsFactory()\n" + 81 "builder = new DynaopGroovyNodeBuilder()\n" + 82 "nano = builder.container() {\n" + 83 " aspect(classCut:cuts.instancesOf(Dao), methodCut:cuts.allMethods(), interceptorKey:LoggingInterceptor)\n" + 84 " component(key:'log', class:StringBuffer)\n" + 85 " component(LoggingInterceptor)\n" + 86 " component(key:Dao, class:DaoImpl)\n" + 87 "}\n"; 88 89 PicoContainer pico = buildContainer(script); 90 Dao dao = (Dao) pico.getComponentInstance(Dao.class); 91 StringBuffer log = (StringBuffer ) pico.getComponentInstance("log"); 92 verifyIntercepted(dao, log); 93 } 94 95 public void testComponentScopedInterceptor() { 96 String script = "" + 97 "package org.nanocontainer.script.groovy\n" + 98 "import org.nanocontainer.testmodel.*\n" + 99 "import org.nanocontainer.aop.dynaop.*\n" + 100 "log = new StringBuffer()\n" + 101 "logger = new LoggingInterceptor(log)\n" + 102 "\n" + 103 "cuts = new DynaopPointcutsFactory()\n" + 104 "builder = new DynaopGroovyNodeBuilder()\n" + 105 "nano = builder.container() {\n" + 106 " component(key:'intercepted', class:DaoImpl) {\n" + 107 " aspect(methodCut:cuts.allMethods(), interceptor:logger)\n" + 108 " }\n" + 109 " component(key:'log', instance:log)\n" + 110 " component(key:'notIntercepted', class:DaoImpl)\n" + 111 "}\n"; 112 113 PicoContainer pico = buildContainer(script); 114 Dao intercepted = (Dao) pico.getComponentInstance("intercepted"); 115 Dao notIntercepted = (Dao) pico.getComponentInstance("notIntercepted"); 116 StringBuffer log = (StringBuffer ) pico.getComponentInstance("log"); 117 118 verifyIntercepted(intercepted, log); 119 verifyNotIntercepted(notIntercepted, log); 120 } 121 122 public void testContainerScopedMixin() { 123 String script = "" + 124 "package org.nanocontainer.script.groovy\n" + 125 "import org.nanocontainer.testmodel.*\n" + 126 "import org.nanocontainer.aop.dynaop.*\n" + 127 "cuts = new DynaopPointcutsFactory()\n" + 128 "builder = new DynaopGroovyNodeBuilder()\n" + 129 "nano = builder.container() {\n" + 130 " component(key:Dao, class:DaoImpl) \n" + 131 " aspect(classCut:cuts.instancesOf(Dao), mixinClass:IdentifiableMixin)\n" + 132 "}"; 133 134 PicoContainer pico = buildContainer(script); 135 Dao dao = (Dao) pico.getComponentInstance(Dao.class); 136 verifyMixin(dao); 137 } 138 139 public void testExplicitAspectsManagerAndDecorationDelegate() { 140 String script = "" + 141 "package org.nanocontainer.script.groovy\n" + 142 "import org.nanocontainer.testmodel.*\n" + 143 "import org.nanocontainer.aop.dynaop.*\n" + 144 "aspectsManager = new org.nanocontainer.aop.dynaop.DynaopAspectsManager()\n" + 145 "cuts = aspectsManager.getPointcutsFactory()\n" + 146 "decorator = new org.nanocontainer.aop.defaults.AopNodeBuilderDecorationDelegate(aspectsManager)\n" + 147 "builder = new OldGroovyNodeBuilder(decorator) \n" + 148 "nano = builder.container() {\n" + 149 " component(key:Dao, class:DaoImpl) \n" + 150 " aspect(classCut:cuts.instancesOf(Dao), mixinClass:IdentifiableMixin)\n" + 151 "}"; 152 153 PicoContainer pico = buildContainer(script); 154 Dao dao = (Dao) pico.getComponentInstance(Dao.class); 155 verifyMixin(dao); 156 } 157 158 public void testCustomComponentAdapterFactory() { 159 String script = "" + 160 "package org.nanocontainer.script.groovy\n" + 161 "import org.nanocontainer.testmodel.*\n" + 162 "import org.nanocontainer.aop.dynaop.*\n" + 163 "intLog = new StringBuffer()\n" + 164 "logger = new LoggingInterceptor(intLog)\n" + 165 "cafLog = new StringBuffer()\n" + 166 "caf = new TestComponentAdapterFactory(cafLog)\n" + 167 "cuts = new DynaopPointcutsFactory()\n" + 168 "builder = new DynaopGroovyNodeBuilder()\n" + 169 "nano = builder.container(componentAdapterFactory:caf) {\n" + 170 " aspect(classCut:cuts.instancesOf(Dao.class), methodCut:cuts.allMethods(), interceptor:logger)\n" + 171 " component(key:Dao, class:DaoImpl)\n" + 172 " component(key:'intLog', instance:intLog)\n" + 173 " component(key:'cafLog', instance:cafLog)\n" + 174 "}"; 175 176 PicoContainer pico = buildContainer(script); 177 Dao dao = (Dao) pico.getComponentInstance(Dao.class); 178 StringBuffer intLog = (StringBuffer ) pico.getComponentInstance("intLog"); 179 verifyIntercepted(dao, intLog); 180 StringBuffer cafLog = (StringBuffer ) pico.getComponentInstance("cafLog"); 181 assertEquals("called", cafLog.toString()); 182 } 183 184 private PicoContainer buildContainer(String script) { 185 GroovyContainerBuilder builder = new GroovyContainerBuilder(new StringReader (script), getClass().getClassLoader()); 186 return buildContainer(builder, null, "SOME_SCOPE"); 187 } 188 189 private void verifyIntercepted(Dao dao, StringBuffer log) { 190 String before = log.toString(); 191 String data = dao.loadData(); 192 assertEquals("data", data); 193 assertEquals(before + "startend", log.toString()); 194 } 195 196 private void verifyNotIntercepted(Dao dao, StringBuffer log) { 197 String before = log.toString(); 198 String data = dao.loadData(); 199 assertEquals("data", data); 200 assertEquals(before, log.toString()); 201 } 202 203 private void verifyMixin(Object component) { 204 assertTrue(component instanceof Identifiable); 205 Identifiable identifiable = (Identifiable) component; 206 identifiable.setId("id"); 207 assertEquals("id", identifiable.getId()); 208 } 209 210 } | Popular Tags |