001package org.picocontainer.defaults.issues;
002
003import org.picocontainer.MutablePicoContainer;
004import org.picocontainer.DefaultPicoContainer;
005import org.picocontainer.behaviors.Caching;
006import org.picocontainer.parameters.ComponentParameter;
007import org.junit.Ignore;
008import org.junit.Test;
009
010import java.util.ArrayList;
011import java.util.List;
012
013import static junit.framework.Assert.*;
014
015public 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}