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.ComponentAdapter;
013    import org.picocontainer.DefaultPicoContainer;
014    import org.picocontainer.MutablePicoContainer;
015    import org.picocontainer.Parameter;
016    import org.picocontainer.injectors.ConstructorInjector;
017    import org.picocontainer.monitors.NullComponentMonitor;
018    
019    import static junit.framework.Assert.assertNotNull;
020    import static org.junit.Assert.fail;
021    
022    public final class NonPublicConstructorsTestCase {
023    
024        @Test
025       public void doFirstSampleWithNotPublicConstructor() {
026            MutablePicoContainer container = new DefaultPicoContainer();
027    
028            ComponentAdapter<DummyNotPublicConstructor> dummyComponentAdapter =
029                    new ConstructorInjector<DummyNotPublicConstructor>(
030                            DummyNotPublicConstructor.class,
031                            DummyNotPublicConstructor.class, null, new NullComponentMonitor(), false)
032                    .withNonPublicConstructors();
033    
034            container.addAdapter(dummyComponentAdapter);
035    
036            DummyNotPublicConstructor dummy = container.getComponent(DummyNotPublicConstructor.class);
037            assertNotNull(dummy);
038        }
039    
040        @Test
041        public void doSecondSampleWithNotPublicClass() {
042            MutablePicoContainer container = new DefaultPicoContainer();
043    
044            ComponentAdapter<DummyNotPublicClass> dummyComponentAdapter =
045                    new ConstructorInjector<DummyNotPublicClass>(
046                            DummyNotPublicClass.class.getCanonicalName(),
047                            DummyNotPublicClass.class, null, new NullComponentMonitor(), false)
048                    .withNonPublicConstructors();
049    
050            container.addAdapter(dummyComponentAdapter);
051    
052            Object item = container.getComponent(DummyNotPublicClass.class);
053            assertNotNull(item);
054        }
055    
056        @Test
057        public void doThirdSampleWithProtectedConstructor() {
058            MutablePicoContainer container = new DefaultPicoContainer();
059    
060            ComponentAdapter<DummyProtectedConstructor> dummyComponentAdapter =
061                    new ConstructorInjector<DummyProtectedConstructor>(
062                            DummyProtectedConstructor.class,
063                            DummyProtectedConstructor.class, null, new NullComponentMonitor(), false)
064                    .withNonPublicConstructors();
065    
066    
067            container.addAdapter(dummyComponentAdapter);
068    
069            DummyProtectedConstructor dummy = container.getComponent(DummyProtectedConstructor.class);
070            assertNotNull(dummy);
071    
072        }
073    
074        public static class DummyProtectedConstructor {
075            protected DummyProtectedConstructor() {
076            }
077        }
078    
079        public static class DummyNotPublicConstructor {
080            DummyNotPublicConstructor() {
081            }
082        }
083    
084        static class DummyNotPublicClass {
085        }
086    
087    }