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.alternatives;
010
011 import java.util.ArrayList;
012 import java.util.List;
013
014 import org.picocontainer.MutablePicoContainer;
015 import org.picocontainer.PicoContainer;
016 import org.picocontainer.defaults.ConstructorInjectionComponentAdapterFactory;
017 import org.picocontainer.defaults.DefaultPicoContainer;
018 import org.picocontainer.defaults.VerifyingVisitor;
019 import org.picocontainer.tck.AbstractImplementationHidingPicoContainerTestCase;
020 import org.picocontainer.testmodel.SimpleTouchable;
021
022 public class ImplementationHidingPicoContainerTestCase extends AbstractImplementationHidingPicoContainerTestCase {
023
024 protected MutablePicoContainer createImplementationHidingPicoContainer() {
025 return new ImplementationHidingPicoContainer();
026 }
027
028 protected MutablePicoContainer createPicoContainer(PicoContainer parent) {
029 return new ImplementationHidingPicoContainer(parent);
030 }
031
032 public void testStartStopAndDisposeNotCascadedtoRemovedChildren() {
033 super.testStartStopAndDisposeNotCascadedtoRemovedChildren();
034 }
035
036 public static class MyThread extends Thread {
037 public MyThread(String s) {
038 super(s);
039 }
040 }
041
042 public void testHidingWithoutParameter() {
043 // this was a bug reported by Arnd Kors on 21st Sept on the mail list.
044 ImplementationHidingPicoContainer pico = new ImplementationHidingPicoContainer();
045 pico.registerComponentImplementation(String.class);
046 pico.registerComponentImplementation(Runnable.class, MyThread.class);
047 new VerifyingVisitor().traverse(pico);
048 }
049
050 public void testUsageOfADifferentComponentAdapterFactory() {
051 // Jira bug 212
052 MutablePicoContainer parent = new DefaultPicoContainer();
053 ImplementationHidingPicoContainer pico = new ImplementationHidingPicoContainer(new ConstructorInjectionComponentAdapterFactory(), parent);
054 pico.registerComponentImplementation(List.class, ArrayList.class);
055 List list1 = (List) pico.getComponentInstanceOfType(List.class);
056 List list2 = (List) pico.getComponentInstanceOfType(List.class);
057 assertNotNull(list1);
058 assertNotNull(list2);
059 assertFalse(list1 instanceof ArrayList);
060 assertFalse(list2 instanceof ArrayList);
061 assertFalse(list1 == list2);
062 }
063
064 public void testMakeChildContainer(){
065 MutablePicoContainer parent = new ImplementationHidingPicoContainer();
066 parent.registerComponentImplementation("t1", SimpleTouchable.class);
067 MutablePicoContainer child = parent.makeChildContainer();
068 Object t1 = child.getParent().getComponentInstance("t1");
069 assertNotNull(t1);
070 assertTrue(t1 instanceof SimpleTouchable);
071 }
072
073 public void testSameInstanceCanBeUsedAsDifferentTypeWhenCaching() {
074 // IHPC does not cache by default.
075 }
076
077
078 }