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 *****************************************************************************/
009package org.picocontainer.injectors;
010
011import org.junit.Test;
012import org.picocontainer.DefaultPicoContainer;
013import org.picocontainer.containers.EmptyPicoContainer;
014import org.picocontainer.lifecycle.NullLifecycleStrategy;
015
016import static junit.framework.Assert.assertNull;
017import static org.junit.Assert.assertEquals;
018import static org.junit.Assert.assertNotNull;
019import static org.junit.Assert.assertTrue;
020
021/**
022 * @author Paul Hammant
023 */
024public class NamedMethodInjectionTestCase {
025
026    public static class Bean {
027        private String something;
028
029        public void setSomething(String blah) {
030            this.something = blah;
031        }
032    }
033
034    @Test
035    public void containerShouldMakeUsableNamedMethodInjector() {
036        DefaultPicoContainer picoContainer = new DefaultPicoContainer(new NamedMethodInjection(), new NullLifecycleStrategy(), new EmptyPicoContainer());
037        picoContainer.addComponent(Bean.class);
038        picoContainer.addConfig("something", "hello there");
039        assertTrue(picoContainer.getComponentAdapter(Bean.class) instanceof NamedMethodInjector);
040        assertEquals("hello there", picoContainer.getComponent(Bean.class).something);
041    }
042
043    @Test
044    public void containerShouldMakeNamedMethodInjectorThatIsOptionalInUse() {
045        DefaultPicoContainer picoContainer = new DefaultPicoContainer(new NamedMethodInjection(true), new NullLifecycleStrategy(), new EmptyPicoContainer());
046        picoContainer.addComponent(Bean.class);
047        assertTrue(picoContainer.getComponentAdapter(Bean.class) instanceof NamedMethodInjector);
048        assertNull(picoContainer.getComponent(Bean.class).something);
049    }
050
051    public static class MyConnectionPoolDataSource {
052        private String serverName;
053        private String databaseName;
054        private String user;
055
056        public void setServerName(String a0) { 
057            this.serverName = a0;
058        }
059        public void setDatabaseName(String a0) {
060            this.databaseName = a0;
061        }
062        public void setUser(String a0) {
063            this.user = a0;
064        }
065    }
066
067    @Test
068    public void vincentVanBeverensExample() {
069        MyConnectionPoolDataSource windmill = new DefaultPicoContainer(new NamedMethodInjection())
070                .addComponent(MyConnectionPoolDataSource.class)
071                .addConfig("user", "fred")
072                .addConfig("serverName", "example.com")
073                .addConfig("databaseName", "big://table")
074                .getComponent(MyConnectionPoolDataSource.class);
075        assertNotNull(windmill);
076        assertNotNull(windmill.serverName);
077        assertEquals("example.com", windmill.serverName);
078        assertNotNull(windmill.user);
079        assertEquals("fred", windmill.user);
080        assertNotNull(windmill.databaseName);
081        assertEquals("big://table", windmill.databaseName);
082    }
083
084}