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 }