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 }