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.defaults.issues; 011 012 import static org.junit.Assert.fail; 013 import static org.junit.Assert.assertNotNull; 014 015 import org.junit.Test; 016 import org.junit.Assert; 017 import org.picocontainer.DefaultPicoContainer; 018 import org.picocontainer.MutablePicoContainer; 019 import org.picocontainer.injectors.AbstractInjector; 020 021 public final class Issue0342TestCase { 022 023 interface Interface { 024 } 025 026 interface SubInterface extends Interface { 027 } 028 029 public static class Generic<I extends Interface> { 030 private final I iface; 031 032 public Generic(final I iface) { 033 this.iface = iface; 034 } 035 } 036 037 public static class Implementation implements Interface { 038 } 039 040 public static class SubImplementation implements SubInterface { 041 } 042 043 044 @Test 045 public void testNotTheBug() { 046 //hard coded instantitation 047 Generic<Implementation> generic1 = new Generic<Implementation>(new Implementation()); 048 Assert.assertNotNull(generic1); 049 Generic<SubImplementation> generic2 = new Generic<SubImplementation>(new SubImplementation()); 050 Assert.assertNotNull(generic2); 051 } 052 053 054 @Test 055 public void testTheBug() { 056 057 //using picocontainer 058 DefaultPicoContainer container = new DefaultPicoContainer(); 059 container.addComponent(Implementation.class); 060 container.addComponent(Generic.class); 061 Generic result = container.getComponent(Generic.class); // fails here. 062 Assert.assertNotNull(result); 063 Assert.assertNotNull(result.iface); 064 065 } 066 067 068 @Test 069 public void testTheBug2() { 070 071 DefaultPicoContainer container = new DefaultPicoContainer(); 072 container.addComponent(SubImplementation.class); 073 container.addComponent(Generic.class); 074 //should be Generic<SubImplementation> but requires unsafe cast 075 Generic<?> result2 = container.getComponent(Generic.class); // fails here 076 Assert.assertNotNull(result2); 077 Assert.assertNotNull(result2.iface); 078 079 } 080 081 }