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                                                          *
009     *****************************************************************************/
010    package org.picocontainer.containers;
011    
012    import org.picocontainer.DefaultPicoContainer;
013    import org.picocontainer.injectors.AbstractInjector;
014    
015    import java.io.StringReader;
016    import java.io.IOException;
017    
018    import junit.framework.TestCase;
019    
020    public class ArgumentativePicoContainerTestCase extends TestCase {
021    
022        public void testBasicParsing() {
023            ArgumentativePicoContainer apc = new ArgumentativePicoContainer(new String[] {
024                "foo=bar", "foo2=12", "foo3=true", "foo4="
025            });
026            assertEquals("bar",apc.getComponent("foo"));
027            assertEquals(12,apc.getComponent("foo2"));
028            assertEquals(true,apc.getComponent("foo3"));
029            assertEquals(true,apc.getComponent("foo4"));
030        }
031    
032        public void testAsParentContainer() {
033            ArgumentativePicoContainer apc = new ArgumentativePicoContainer(new String[] {
034                "a=aaa", "b=bbb", "d=22"});
035            assertEquals("aaa",apc.getComponent("a"));
036            assertEquals("bbb",apc.getComponent("b"));
037            assertEquals(22,apc.getComponent("d"));
038    
039            DefaultPicoContainer dpc = new DefaultPicoContainer(apc);
040            dpc.addComponent(NeedsString.class);
041            assertEquals("bbb", dpc.getComponent(NeedsString.class).val);
042        }
043    
044        public static class NeedsString {
045            public String val;
046            public NeedsString(String b) {
047                val = b;
048            }
049        }
050    
051        public void testParsingWithDiffSeparator() {
052            ArgumentativePicoContainer apc = new ArgumentativePicoContainer(":", new String[] {
053                "foo:bar", "foo2:12", "foo3:true"
054            });
055            assertEquals("bar",apc.getComponent("foo"));
056            assertEquals(12,apc.getComponent("foo2"));
057            assertEquals(true,apc.getComponent("foo3"));
058        }
059    
060        public void testParsingWithWrongSeparator() {
061            ArgumentativePicoContainer apc = new ArgumentativePicoContainer(":", new String[] {
062                "foo=bar", "foo2=12", "foo3=true"
063            });
064            assertEquals(true,apc.getComponent("foo=bar"));
065            assertEquals(true,apc.getComponent("foo2=12"));
066            assertEquals(true,apc.getComponent("foo3=true"));
067        }
068    
069        public void testParsingOfPropertiesFile() throws IOException {
070            ArgumentativePicoContainer apc = new ArgumentativePicoContainer(":",
071                                   new StringReader("foo:bar\nfoo2:12\nfoo3:true\n"));
072            assertEquals("bar",apc.getComponent("foo"));
073            assertEquals(12,apc.getComponent("foo2"));
074            assertEquals(true,apc.getComponent("foo3"));
075        }
076    
077        public void testParsingOfPropertiesFileAndArgs() throws IOException {
078            ArgumentativePicoContainer apc = new ArgumentativePicoContainer(":",
079                                   new StringReader("foo:bar\nfoo2:12\n"), new String[] {"foo3:true"});
080            assertEquals("bar",apc.getComponent("foo"));
081            assertEquals(12,apc.getComponent("foo2"));
082            assertEquals(true,apc.getComponent("foo3"));
083        }
084    
085        public void testParsingOfPropertiesFileAndArgsWithClash() throws IOException {
086            ArgumentativePicoContainer apc = new ArgumentativePicoContainer(":",
087                                   new StringReader("foo:bar\nfoo2:99\n"), new String[] {"foo2:12","foo3:true"});
088            assertEquals("bar",apc.getComponent("foo"));
089            assertEquals(12,apc.getComponent("foo2"));
090            assertEquals(true,apc.getComponent("foo3"));
091        }
092    
093        public void testbyTypeFailsEvenIfOneOfSameType() {
094            ArgumentativePicoContainer apc = new ArgumentativePicoContainer(new String[] {
095                "foo=bar"});
096            assertEquals("bar",apc.getComponent("foo"));
097            assertNull(apc.getComponent(String.class));
098        }
099    
100        public void testAmbigousIfNoSuitableTyesForInjection() {
101            ArgumentativePicoContainer apc = new ArgumentativePicoContainer(new String[0]);
102            DefaultPicoContainer pico = new DefaultPicoContainer(apc);
103            pico.addComponent(NeedsAFew.class);
104            try {
105                Object foo = pico.getComponent(NeedsAFew.class);
106                fail();
107            } catch (AbstractInjector.AmbiguousComponentResolutionException e) {
108                // expetced;
109            }
110        }
111        public static class NeedsAFew {
112    
113            public NeedsAFew(String a, int b, long c, boolean d) {
114            }
115        }
116    
117    
118    }