    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.containers;
    010
    011    import static org.junit.Assert.assertTrue;
    012
    013    import java.util.Properties;
    014    import java.util.List;
    015
    016    import junit.framework.AssertionFailedError;
    017
    018    import org.junit.Test;
    019    import org.picocontainer.Characteristics;
    020    import org.picocontainer.DefaultPicoContainer;
    021    import org.picocontainer.MutablePicoContainer;
    022    import org.picocontainer.PicoContainer;
    023    import org.picocontainer.behaviors.Caching;
    024    import org.picocontainer.behaviors.ImplementationHiding;
    025    import org.picocontainer.injectors.ConstructorInjection;
    026    import org.picocontainer.tck.AbstractImplementationHidingPicoContainerTest;
    027
    028    /**
    029     *
    030     * @author Aslak Helles&oslash;y
    031     */
    032    public class ImplementationHidingWithDefaultPicoContainerTestCase extends AbstractImplementationHidingPicoContainerTest {
    033
    034        protected MutablePicoContainer createImplementationHidingPicoContainer() {
    035            return createPicoContainer(null);
    036        }
    037
    038        protected Properties[] getProperties() {
    039            return new Properties[] {Characteristics.NO_CACHE, Characteristics.NO_HIDE_IMPL};
    040        }
    041
    042        // TODO (PH) should IH do caching at all and CtorInjection instead of AdaptingInjection ?
    043
    044        protected void addDefaultComponentFactories(List expectedList) {
    045            expectedList.add(Caching.class);
    046            expectedList.add(ImplementationHiding.class);
    047            expectedList.add(ConstructorInjection.class);
    048        }
    049
    050        protected MutablePicoContainer createPicoContainer(PicoContainer parent) {
    051            return new DefaultPicoContainer(new Caching().wrap(new ImplementationHiding().wrap(new ConstructorInjection())), parent);
    052        }
    053
    054        @Test
    055        public void testAggregatedVerificationException() {
    056            super.testAggregatedVerificationException();
    057        }
    058
    059        @Test public void testSameInstanceCanBeUsedAsDifferentTypeWhenCaching() {
    060            // we're choosing a CAF for DPC, thus Caching (a default) not enabled.
    061            try {
    062                super.testSameInstanceCanBeUsedAsDifferentTypeWhenCaching();
    063            } catch (AssertionFailedError e) {
    064                assertTrue(e.getMessage().indexOf("expected same:<org.picocontainer.testmodel.WashableTouchable@") > -1);
    065                assertTrue(e.getMessage().indexOf("was not:<org.picocontainer.testmodel.WashableTouchable@") > -1);
    066            }
    067
    068        }
    069
    070        @Test public void testAcceptImplementsBreadthFirstStrategy() {
    071            super.testAcceptImplementsBreadthFirstStrategy();
    072        }
    073
    074    }