    001    package org.picocontainer.defaults.issues;
    002
    003    import org.picocontainer.MutablePicoContainer;
    004    import org.picocontainer.DefaultPicoContainer;
    005    import org.picocontainer.behaviors.Caching;
    006    import org.picocontainer.parameters.ComponentParameter;
    007    import org.junit.Ignore;
    008    import org.junit.Test;
    009
    010    import java.util.ArrayList;
    011    import java.util.List;
    012
    013    import static junit.framework.Assert.*;
    014
    015    public class Issue0332TestCase {
    016
    017        /**
    018         * Sample class that demonstrates literal collection handling.
    019         */
    020        public static class Searcher {
    021            private final List<String> searchPath;
    022
    023            public Searcher(List<String> searchPath) {
    024                    this.searchPath = searchPath;
    025            }
    026
    027            public List<String> getSearchPath() {
    028                    return searchPath;
    029            }
    030        }
    031
    032
    033        /**
    034         * @todo Revisit this for Pico 3.
    035         */
    036        @Ignore
    037        @Test
    038        public void canInstantiateAutowiredCollectionThatAreDefinedImplicitly() {
    039            MutablePicoContainer pico = new DefaultPicoContainer(new Caching());
    040            List<String> searchPath = new ArrayList<String>();
    041            searchPath.add("a");
    042            searchPath.add("b");
    043
    044            List<Integer> conflictingList = new ArrayList<Integer>();
    045            conflictingList.add(1);
    046            conflictingList.add(2);
    047            pico.addComponent("conflict", conflictingList);
    048
    049            pico.addComponent("searchPath",searchPath)
    050                    .addComponent(Searcher.class);
    051
    052            assertNotNull(pico.getComponent(Searcher.class));
    053            assertNotNull(pico.getComponent(Searcher.class).getSearchPath());
    054        }
    055
    056        @Test
    057        public void canInstantiateExplicitCollectionWithComponentParameter() {
    058            MutablePicoContainer pico = new DefaultPicoContainer(new Caching());
    059            List<String> searchPath = new ArrayList<String>();
    060            searchPath.add("a");
    061            searchPath.add("b");
    062
    063            pico.addComponent("searchPath",searchPath);
    064            pico.addComponent(Searcher.class, Searcher.class, new ComponentParameter("searchPath"));
    065
    066            assertNotNull(pico.getComponent(Searcher.class));
    067            assertNotNull(pico.getComponent(Searcher.class).getSearchPath());
    068        }
    069
    070        @SuppressWarnings("serial")
    071            public static class StringArrayList extends ArrayList<String> {
    072        }
    073
    074        @Test
    075        public void canInstantiateAutowiredCollectionThatAreDefinedExplicitlyAnotherWay() {
    076            MutablePicoContainer pico = new DefaultPicoContainer(new Caching());
    077            List<String> searchPath = new StringArrayList();
    078            searchPath.add("a");
    079            searchPath.add("b");
    080
    081            pico.addComponent(searchPath)
    082                    .addComponent(Searcher.class);
    083
    084            assertNotNull(pico.getComponent(Searcher.class));
    085            List<String> list = pico.getComponent(Searcher.class).getSearchPath();
    086            assertNotNull(list);
    087            assertEquals("a", list.get(0));
    088            assertEquals("b", list.get(1));
    089        }
    090
    091
    092
    093    }