1 10 14 package org.nanocontainer.script.groovy; 15 16 import org.nanocontainer.script.AbstractScriptedContainerBuilderTestCase; 17 import org.nanocontainer.testmodel.A; 18 import org.picocontainer.PicoContainer; 19 import org.picocontainer.defaults.DefaultPicoContainer; 20 21 import java.io.Reader ; 22 import java.io.StringReader ; 23 24 import groovy.lang.Binding; 25 26 31 public class GroovyContainerBuilderTestCase extends AbstractScriptedContainerBuilderTestCase { 32 33 public void testContainerCanBeBuiltWithParent() { 34 Reader script = new StringReader ("" + 35 "builder = new org.nanocontainer.script.groovy.OldGroovyNodeBuilder()\n" + 36 "pico = builder.container(parent:parent) { \n" + 37 " component(StringBuffer)\n" + 38 "}"); 39 PicoContainer parent = new DefaultPicoContainer(); 40 PicoContainer pico = buildContainer(new GroovyContainerBuilder(script, getClass().getClassLoader()), parent, "SOME_SCOPE"); 41 assertNotSame(parent, pico.getParent()); 43 assertEquals(StringBuffer .class, pico.getComponentInstance(StringBuffer .class).getClass()); 44 } 45 46 public void testAdditionalBindingViaSubClassing() { 47 Reader script = new StringReader ("" + 48 "builder = new org.nanocontainer.script.groovy.OldGroovyNodeBuilder()\n" + 49 "pico = builder.container(parent:parent) { \n" + 50 " component(key:String.class, instance:foo)\n" + 51 "}"); 52 53 PicoContainer parent = new DefaultPicoContainer(); 54 PicoContainer pico = buildContainer(new SubclassGroovyContainerBuilder(script, getClass().getClassLoader()), parent, "SOME_SCOPE"); 55 56 assertNotSame(parent, pico.getParent()); 57 assertEquals("bar", pico.getComponentInstance(String .class)); 58 } 59 60 public void testBuildingWithDefaultBuilder() { 61 Reader script = new StringReader ("" + 63 "pico = builder.container(parent:parent) { \n" + 64 " component(key:String.class, instance:'foo')\n" + 65 "}"); 66 67 PicoContainer parent = new DefaultPicoContainer(); 68 PicoContainer pico = buildContainer(new GroovyContainerBuilder(script, getClass().getClassLoader()), parent, "SOME_SCOPE"); 69 70 assertNotSame(parent, pico.getParent()); 71 assertEquals("foo", pico.getComponentInstance(String .class)); 72 } 73 74 public void testBuildingWithAppendingNodes() { 75 Reader script = new StringReader ("" + 76 "pico = builder.container(parent:parent) { \n" + 77 78 "}\n" + 79 "\n" + 80 "builder.append(container:pico) {" + 81 " component(key:String.class, instance:'foo')\n" + 82 "}\n" + 83 ""); 84 85 PicoContainer parent = new DefaultPicoContainer(); 86 PicoContainer pico = buildContainer(new GroovyContainerBuilder(script, getClass().getClassLoader()), parent, "SOME_SCOPE"); 87 88 assertNotSame(parent, pico.getParent()); 89 assertEquals("foo", pico.getComponentInstance(String .class)); 90 } 91 92 93 94 public void testBuildingWithPicoSyntax() { 95 Reader script = new StringReader ("" + 96 "parent.registerComponentImplementation('foo', java.lang.String)\n" + 97 "pico = new org.picocontainer.defaults.DefaultPicoContainer(parent)\n" + 98 "pico.registerComponentImplementation(org.nanocontainer.testmodel.A)\n" + 99 ""); 100 101 PicoContainer parent = new DefaultPicoContainer(); 102 PicoContainer pico = buildContainer(new GroovyContainerBuilder(script, getClass().getClassLoader()), parent, "SOME_SCOPE"); 103 104 assertNotSame(parent, pico.getParent()); 105 assertNotNull(pico.getComponentInstance(A.class)); 106 assertNotNull(pico.getComponentInstance("foo")); 107 } 108 109 110 111 public void testBuildingWithPicoSyntaxAndNullParent() { 112 Reader script = new StringReader ("" + 113 "pico = new org.picocontainer.defaults.DefaultPicoContainer(parent)\n" + 114 "pico.registerComponentImplementation(org.nanocontainer.testmodel.A)\n" + 115 ""); 116 117 PicoContainer parent = null; 118 PicoContainer pico = buildContainer(new GroovyContainerBuilder(script, getClass().getClassLoader()), parent, "SOME_SCOPE"); 119 120 assertNotSame(parent, pico.getParent()); 121 assertNotNull(pico.getComponentInstance(A.class)); 122 } 123 124 127 private class SubclassGroovyContainerBuilder extends GroovyContainerBuilder { 128 public SubclassGroovyContainerBuilder(final Reader script, ClassLoader classLoader) { 129 super(script, classLoader); 130 } 131 132 protected void handleBinding(Binding binding) { 133 super.handleBinding(binding); 134 135 binding.setVariable("foo", "bar"); 136 } 137 138 } 139 140 } 141 | Popular Tags |