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 *****************************************************************************/
010package org.picocontainer.parameters;
011
012import static org.junit.Assert.*;
013
014import java.lang.reflect.Constructor;
015import java.lang.reflect.Type;
016
017import org.junit.Test;
018import org.picocontainer.PicoCompositionException;
019
020
021/**
022 * test that constant parameter behaves well.
023 * @author Konstantin Pribluda
024 */
025public 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}