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 Johan Hoogenboezem (thanks Johan) * 009 *****************************************************************************/ 010package org.picocontainer.injectors; 011 012import static org.junit.Assert.*; 013 014import org.junit.*; 015import org.picocontainer.*; 016import org.picocontainer.behaviors.*; 017 018import java.lang.reflect.Type; 019 020public class IntoTypeTestCase { 021 022 @Test 023 public void testThatIntoSetupCorrectlyForNestedInjectionViaAFactory() throws Exception { 024 MutablePicoContainer pico = new DefaultPicoContainer(new Caching()); 025 pico.addAdapter(new AliceFactory()); 026 pico.addComponent(Bob.class); 027 System.out.println("Going to ask pico for a Bob"); 028 assertTrue(Bob.class.isAssignableFrom(Bob.class)); 029 Bob bob = pico.getComponent(Bob.class); 030 assertNotNull(bob); 031 assertNotNull(bob.getAlice()); 032 } 033 034 035 public static interface Alice { 036 } 037 038 039 public static class AliceImpl implements Alice { 040 } 041 042 public static class Bob { 043 044 private Alice alice; 045 046 public Bob(Alice alice) { 047 System.out.println("Bob gets an Alice: " + alice); 048 this.alice = alice; 049 } 050 051 public Alice getAlice() { 052 return alice; 053 } 054 055 } 056 057 058 public static class AliceFactory extends FactoryInjector<Alice> { 059 @Override 060 public Alice getComponentInstance(PicoContainer container, Type into) { 061 // System.out.println("Manufacturing an Alice for " + ((InjectInto) into).getIntoClass()); 062 if (Bob.class.isAssignableFrom(((InjectInto) into).getIntoClass())) { 063 return new AliceImpl(); 064 } else { 065 fail("Expected a " + Bob.class + ", but got a " + into + " instead."); 066 return null; 067 } 068 } 069 070 } 071 072 073}