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                                                          *
009     *****************************************************************************/
010    package org.picocontainer.parameters;
011    
012    import static org.junit.Assert.*;
013    
014    import java.lang.reflect.Constructor;
015    import java.lang.reflect.Type;
016    
017    import org.junit.Test;
018    import org.picocontainer.PicoCompositionException;
019    
020    
021    /**
022     * test that constant parameter behaves well.
023     * @author Konstantin Pribluda
024     */
025    public class ConstantParameterTestCase {
026        
027        /**
028        *  constant parameter with instance type shall verify for expected primitives
029         * @throws Exception
030         */
031        @Test public void testThatInstaceTypeAcceptedForPrimitives() throws Exception {
032            ConstantParameter param = new ConstantParameter(239);
033            try{
034                param.verify(null,null,Integer.TYPE, null, false, null);
035            } catch(PicoCompositionException ex) {
036                fail("failed verification for primitive / instance ");
037            }
038        }
039        
040        @Test
041        public void testClassTypesAllowed() throws Exception {
042            ConstantParameter param = new ConstantParameter(String.class);
043            param.verify(null, null, Class.class, null, false, null);       
044        }
045        
046            
047        public static class ConstantParameterTestClass {
048            public ConstantParameterTestClass(Class<String> type) {
049                    assert type != null;
050            }
051        }
052            
053        
054        @Test
055        public void testParameterizedTypesAllowed() throws Exception {
056            
057            Constructor<?>[] ctors = ConstantParameterTestClass.class.getConstructors();
058            Type[] t = ctors[0].getGenericParameterTypes();
059            ConstantParameter param = new ConstantParameter(String.class);
060            assertTrue(param.resolve(null, null, null, t[0], null, false, null).isResolved());
061    
062        }
063        
064    }