001    /*****************************************************************************
002     * Copyright (C) PicoContainer Organization. All rights reserved.            *
003     * ------------------------------------------------------------------------- *
004     * The software in this package is published under the terms of the BSD      *
005     * style license a copy of which has been included with this distribution in *
006     * the LICENSE.txt file.                                                     *
007     *                                                                           *
008     * Original code by Aslak Hellesoy and Paul Hammant                          *
009     *****************************************************************************/
010    
011    package org.picocontainer.script.xml;
012    
013    import static org.junit.Assert.assertEquals;
014    import static org.junit.Assert.assertNotNull;
015    
016    import java.io.IOException;
017    import java.io.Reader;
018    import java.io.StringReader;
019    import java.lang.annotation.Annotation;
020    import java.lang.reflect.Type;
021    import java.util.Collection;
022    import java.util.List;
023    
024    import javax.xml.parsers.ParserConfigurationException;
025    
026    import org.junit.Test;
027    import org.picocontainer.PicoCompositionException;
028    import org.picocontainer.script.AbstractScriptedContainerBuilderTestCase;
029    import org.picocontainer.script.testmodel.DefaultWebServerConfig;
030    import org.picocontainer.script.xml.XMLContainerBuilder;
031    import org.picocontainer.ComponentAdapter;
032    import org.picocontainer.DefaultPicoContainer;
033    import org.picocontainer.NameBinding;
034    import org.picocontainer.PicoContainer;
035    import org.picocontainer.PicoException;
036    import org.picocontainer.PicoVisitor;
037    import org.xml.sax.SAXException;
038    
039    /**
040     * @author Maarten Grootendorst
041     */
042    // TODO to rename?
043    public class NonMutablePicoContainerContainerTestCase extends AbstractScriptedContainerBuilderTestCase {
044    
045        @SuppressWarnings("unchecked")
046        private class TestPicoContainer implements PicoContainer {
047            public Object getComponent(Object componentKey) {
048                return null;
049            }
050    
051            public Object getComponent(Object o, Type type) {
052                return null;
053            }
054    
055            public <T> T getComponent(Class<T> componentType) {
056                return null;
057            }
058    
059            public <T> T getComponent(Class<T> componentType, Class<? extends Annotation> binding) {
060                return null;
061            }
062    
063            public List getComponents() {
064                return null;
065            }
066    
067            public PicoContainer getParent() {
068                return null;
069            }
070    
071            public ComponentAdapter<?> getComponentAdapter(Object componentKey) {
072                return null;
073            }
074    
075            public <T> ComponentAdapter<T> getComponentAdapter(Class<T> componentType, NameBinding componentNameBinding) {
076                return null;  
077            }
078    
079            public Collection<ComponentAdapter<?>> getComponentAdapters() {
080                return null;
081            }
082    
083            public void addOrderedComponentAdapter(ComponentAdapter componentAdapter) {
084            }
085    
086            public <T> List<T> getComponents(Class<T> type) throws PicoException {
087                return null;
088            }
089    
090            public void accept(PicoVisitor containerVisitor) {
091            }
092    
093            public <T> List<ComponentAdapter<T>> getComponentAdapters(Class<T> componentType) {
094                return null;
095            }
096    
097            public <T> ComponentAdapter<T> getComponentAdapter(Class<T> componentType, Class<? extends Annotation> binding) {
098                return null;
099            }
100    
101            public <T> List<ComponentAdapter<T>> getComponentAdapters(Class<T> componentType, Class<? extends Annotation> binding) {
102                return null;
103            }
104    
105            public void start() {
106            }
107    
108            public void stop() {
109            }
110    
111            public void dispose() {
112            }
113    
114        }
115    
116        @Test public void testCreateSimpleContainerWithPicoContainer()
117            throws ParserConfigurationException, SAXException, IOException, PicoCompositionException
118        {
119            Reader script = new StringReader("" +
120                                             "<container>" +
121                                             "  <component-implementation class='org.picocontainer.script.testmodel.DefaultWebServerConfig'/>" +
122                                             "  <component-implementation key='org.picocontainer.script.testmodel.WebServer' class='org.picocontainer.script.testmodel.WebServerImpl'/>" +
123                                             "</container>");
124    
125            PicoContainer pico = buildContainer(new XMLContainerBuilder(script, getClass().getClassLoader()),
126                                                new TestPicoContainer(),
127                                                "SOME_SCOPE");
128            assertEquals(2, pico.getComponents().size());
129            assertNotNull(pico.getComponent(DefaultWebServerConfig.class));
130        }
131    
132        @Test public void testCreateSimpleContainerWithMutablePicoContainer()
133            throws ParserConfigurationException, SAXException, IOException, PicoCompositionException
134        {
135            Reader script = new StringReader("" +
136                                             "<container>" +
137                                             "  <component-implementation class='org.picocontainer.script.testmodel.DefaultWebServerConfig'/>" +
138                                             "  <component-implementation key='org.picocontainer.script.testmodel.WebServer' class='org.picocontainer.script.testmodel.WebServerImpl'/>" +
139                                             "</container>");
140    
141            PicoContainer pico = buildContainer(new XMLContainerBuilder(script, getClass().getClassLoader()),
142                                                new DefaultPicoContainer(),
143                                                "SOME_SCOPE");
144            assertEquals(2, pico.getComponents().size());
145            assertNotNull(pico.getComponent(DefaultWebServerConfig.class));
146            assertNotNull(pico.getParent());
147    
148        }
149    }