KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > nanocontainer > script > groovy > GroovyContainerBuilderTestCase


1 /*****************************************************************************
2  * Copyright (C) NanoContainer Organization. All rights reserved. *
3  * ------------------------------------------------------------------------- *
4  * The software in this package is published under the terms of the BSD *
5  * style license a copy of which has been included with this distribution in *
6  * the LICENSE.txt file. *
7  * *
8  * Original code by *
9  *****************************************************************************/

10 /**
11  * @author Aslak Hellesøy
12  * @version $Revision: 3148 $
13  */

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 JavaDoc;
22 import java.io.StringReader JavaDoc;
23
24 import groovy.lang.Binding;
25
26 /**
27  * @author Aslak Hellesøy
28  * @author Paul Hammant
29  * @version $Revision: 3148 $
30  */

31 public class GroovyContainerBuilderTestCase extends AbstractScriptedContainerBuilderTestCase {
32
33     public void testContainerCanBeBuiltWithParent() {
34         Reader JavaDoc script = new StringReader JavaDoc("" +
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         //PicoContainer.getParent() is now ImmutablePicoContainer
42
assertNotSame(parent, pico.getParent());
43         assertEquals(StringBuffer JavaDoc.class, pico.getComponentInstance(StringBuffer JavaDoc.class).getClass());
44     }
45
46         public void testAdditionalBindingViaSubClassing() {
47                 Reader JavaDoc script = new StringReader JavaDoc("" +
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 JavaDoc.class));
58         }
59
60     public void testBuildingWithDefaultBuilder() {
61         // NOTE script does NOT define a "builder"
62
Reader JavaDoc script = new StringReader JavaDoc("" +
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 JavaDoc.class));
72     }
73
74     public void testBuildingWithAppendingNodes() {
75         Reader JavaDoc script = new StringReader JavaDoc("" +
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 JavaDoc.class));
90     }
91
92
93
94     public void testBuildingWithPicoSyntax() {
95         Reader JavaDoc script = new StringReader JavaDoc("" +
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 JavaDoc script = new StringReader JavaDoc("" +
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     /**
125          * Child SubclassGroovyContainerBuilder which adds additional bindings
126          */

127         private class SubclassGroovyContainerBuilder extends GroovyContainerBuilder {
128                 public SubclassGroovyContainerBuilder(final Reader JavaDoc script, ClassLoader JavaDoc 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