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 }