001    /*****************************************************************************
002     * Copyright (C) NanoContainer 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.nanocontainer.script.xml;
012    
013    import org.nanocontainer.integrationkit.PicoCompositionException;
014    import org.nanocontainer.script.AbstractScriptedContainerBuilderTestCase;
015    import org.nanocontainer.testmodel.DefaultWebServerConfig;
016    import org.picocontainer.ComponentAdapter;
017    import org.picocontainer.PicoContainer;
018    import org.picocontainer.PicoException;
019    import org.picocontainer.PicoVerificationException;
020    import org.picocontainer.PicoVisitor;
021    import org.picocontainer.defaults.DefaultPicoContainer;
022    import org.xml.sax.SAXException;
023    
024    import javax.xml.parsers.ParserConfigurationException;
025    import java.io.IOException;
026    import java.io.Reader;
027    import java.io.StringReader;
028    import java.util.Collection;
029    import java.util.List;
030    
031    /**
032     * @author Maarten Grootendorst
033     * @version $Revision: 1731 $
034     */
035    
036    // TODO to rename?
037    public class NonMutablePicoContainerContainerTestCase extends AbstractScriptedContainerBuilderTestCase {
038    
039        private class TestPicoContainer implements PicoContainer {
040            public Object getComponentInstance(Object componentKey) {
041                return null;
042            }
043    
044            public Object getComponentInstanceOfType(Class componentType) {
045                return null;
046            }
047    
048            public List getComponentInstances() {
049                return null;
050            }
051    
052            public PicoContainer getParent() {
053                return null;
054            }
055    
056            public ComponentAdapter getComponentAdapter(Object componentKey) {
057                return null;
058            }
059    
060            public ComponentAdapter getComponentAdapterOfType(Class componentType) {
061                return null;
062            }
063    
064            public Collection getComponentAdapters() {
065                return null;
066            }
067    
068            /**
069         * @deprecated since 1.1 - Use new VerifyingVisitor().traverse(this)
070             */
071           public void verify() throws PicoVerificationException {
072            }
073    
074            public void addOrderedComponentAdapter(ComponentAdapter componentAdapter) {
075            }
076    
077            public List getComponentInstancesOfType(Class type) throws PicoException {
078                return null;
079            }
080    
081            public void accept(PicoVisitor containerVisitor) {
082            }
083    
084            public List getComponentAdaptersOfType(Class componentType) {
085                return null;
086            }
087    
088            public void start() {
089            }
090    
091            public void stop() {
092            }
093    
094            public void dispose() {
095            }
096    
097        }
098    
099        public void testCreateSimpleContainerWithPicoContainer() throws ParserConfigurationException, SAXException, IOException, ClassNotFoundException, PicoCompositionException {
100            Reader script = new StringReader("" +
101                    "<container>" +
102                    "  <component-implementation class='org.nanocontainer.testmodel.DefaultWebServerConfig'/>" +
103                    "  <component-implementation key='org.nanocontainer.testmodel.WebServer' class='org.nanocontainer.testmodel.WebServerImpl'/>" +
104                    "</container>");
105    
106            PicoContainer pico = buildContainer(new XMLContainerBuilder(script, getClass().getClassLoader()), new TestPicoContainer(), "SOME_SCOPE");
107            assertEquals(2, pico.getComponentInstances().size());
108            assertNotNull(pico.getComponentInstance(DefaultWebServerConfig.class));
109        }
110    
111        public void testCreateSimpleContainerWithMutablePicoContainer() throws ParserConfigurationException, SAXException, IOException, ClassNotFoundException, PicoCompositionException {
112            Reader script = new StringReader("" +
113                    "<container>" +
114                    "  <component-implementation class='org.nanocontainer.testmodel.DefaultWebServerConfig'/>" +
115                    "  <component-implementation key='org.nanocontainer.testmodel.WebServer' class='org.nanocontainer.testmodel.WebServerImpl'/>" +
116                    "</container>");
117    
118            PicoContainer pico = buildContainer(new XMLContainerBuilder(script, getClass().getClassLoader()), new DefaultPicoContainer(), "SOME_SCOPE");
119            assertEquals(2, pico.getComponentInstances().size());
120            assertNotNull(pico.getComponentInstance(DefaultWebServerConfig.class));
121            assertNotNull(pico.getParent());
122    
123        }
124    }