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 *****************************************************************************/ 009 package org.picocontainer.injectors; 010 011 import org.junit.Test; 012 import org.picocontainer.DefaultPicoContainer; 013 import org.picocontainer.containers.EmptyPicoContainer; 014 import org.picocontainer.lifecycle.NullLifecycleStrategy; 015 016 import static junit.framework.Assert.assertNull; 017 import static org.junit.Assert.assertEquals; 018 import static org.junit.Assert.assertNotNull; 019 import static org.junit.Assert.assertTrue; 020 021 /** 022 * @author Paul Hammant 023 */ 024 public 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 }