[picocontainer-scm] [scm-git][1/2] Isolating test case problem as close as possible. (Tests are failing right now)
Michael Rimov <git-yCVjj/[email protected]> Thu, 21 Feb 2013 01:42:22 -0600 (CST)
| Newsgroups | gmane.comp.java.picocontainer.cvs |
|---|---|
| Message-ID | <[email protected]> |
commit eab61262ebb50a9fdeff27e70f46ca6f60c7d933 Author: Michael Rimov <[email protected]> AuthorDate: Sat, 2 Feb 2013 23:16:06 -0800 Commit: Michael Rimov <[email protected]> CommitDate: Sat, 2 Feb 2013 23:16:06 -0800 Isolating test case problem as close as possible. (Tests are failing right now) diff --git a/pico/container/src/java/org/picocontainer/DefaultPicoContainer.java b/pico/container/src/java/org/picocontainer/DefaultPicoContainer.java index 93af131..feee697 100644 --- a/pico/container/src/java/org/picocontainer/DefaultPicoContainer.java +++ b/pico/container/src/java/org/picocontainer/DefaultPicoContainer.java @@ -477,9 +477,9 @@ public class DefaultPicoContainer implements MutablePicoContainer, Converting, C //JSR 330 Provider compatibility... we have to be able to return both the providers that provide //the type as well as the actual types themselves. Class<?> implementation = componentAdapter.getComponentImplementation(); - boolean compatible; - compatible = JTypeHelper.isAssignableFrom(componentType, componentAdapter.getComponentImplementation()); + + boolean compatible = JTypeHelper.isAssignableFrom(componentType, implementation); if (componentAdapter.findAdapterOfType(ProviderAdapter.class) != null) { //If provider //Todo: Direct access of provider adapter... work around. diff --git a/pico/container/src/java/org/picocontainer/JTypeHelper.java b/pico/container/src/java/org/picocontainer/JTypeHelper.java index ef9d866..114d0b7 100644 --- a/pico/container/src/java/org/picocontainer/JTypeHelper.java +++ b/pico/container/src/java/org/picocontainer/JTypeHelper.java @@ -18,12 +18,19 @@ public class JTypeHelper { public static final Generic BYTE = Generic.get(Byte.class); public static final Generic VOID = Generic.get(Void.TYPE); + /** + * + * @param generic + * @param aClass + * @return + */ + @SuppressWarnings("unchecked") public static boolean isAssignableFrom(Generic<?> generic, Class<?> aClass) { Type type = generic.getType(); if (type instanceof Class) { return ((Class) type).isAssignableFrom(aClass); } else if (type instanceof ParameterizedType) { - Generic g = Generic.get(aClass); + //Generic g = Generic.get(aClass); Type[] types = aClass.getGenericInterfaces(); while (types.length == 0 && canGetSuperClass(aClass)) { aClass = aClass.getSuperclass(); @@ -65,7 +72,14 @@ public class JTypeHelper { return true; } - public static boolean isAssignableTo(Generic<?> generic, Class aClass) { + /** + * Checks that the generic's type is a class, and performs a direct + * <code>aClass.isAssignableFrom(genericType)</code> + * @param generic the generic type to check + * @param aClass the type to check for compatibility/ + * @return + */ + public static boolean isAssignableTo(Generic<?> generic, Class<?> aClass) { if (generic.getType() instanceof Class) { return aClass.isAssignableFrom((Class<?>) generic.getType()); } diff --git a/pico/container/src/test/org/picocontainer/JTypeHelperTestCase.java b/pico/container/src/test/org/picocontainer/JTypeHelperTestCase.java index 88f0138..341e704 100644 --- a/pico/container/src/test/org/picocontainer/JTypeHelperTestCase.java +++ b/pico/container/src/test/org/picocontainer/JTypeHelperTestCase.java @@ -2,13 +2,20 @@ package org.picocontainer; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import java.lang.reflect.Type; import java.util.List; +import javax.inject.Provider; + import org.junit.After; import org.junit.Before; import org.junit.Test; import org.picocontainer.adapters.SimpleNamedBindingAnnotationTestCase.Apple; +import org.picocontainer.containers.JSRPicoContainerTestCase.ThreeAProvider; +import org.picocontainer.containers.JSRPicoContainerTestCase.ThreeCProvider; +import org.picocontainer.containers.JSRPicoContainerTestCase.C; import com.googlecode.jtype.Generic; @@ -24,4 +31,61 @@ public class JTypeHelperTestCase { assertFalse(JTypeHelper.isAssignableFrom(new Generic<List<HttpServletRequest>>() {}, Apple.class)); } + @Test + public void testIsAssignableFromWithTwoClasses() { + Generic<List> listType = Generic.get(List.class); + assertTrue(JTypeHelper.isAssignableFrom(listType, List.class)); + } + + + + + @Test + public void testIsAssignableWithACompoundTypeAndANormalClass() { + Generic<?> listType = Generic.get(List.class, String.class); + assertFalse(JTypeHelper.isAssignableFrom(listType, String.class)); + assertTrue(JTypeHelper.isAssignableFrom(listType, List.class)); + } + + + public static class SomeType implements Provider<String> { + + public String get() { + return "Test"; + } + + } + + @Test + public void testProviderType() { + Generic<SomeType> providerType = Generic.get(SomeType.class); + Generic<String> stringType = Generic.get(String.class); + + assertTrue(JTypeHelper.isAssignableFrom(stringType, String.class)); + assertFalse(JTypeHelper.isAssignableFrom(providerType, String.class)); + assertFalse(JTypeHelper.isAssignableFrom(stringType, SomeType.class)); + assertTrue(JTypeHelper.isAssignableFrom(providerType, SomeType.class)); + } + + + public static class TestArg { + public void doSomething(Provider<C> threeCProvider) { + + } + } + + @Test + public void testCombinationOfTypeFromOtherTests() throws NoSuchMethodException, SecurityException { + Generic<ThreeAProvider> aProvider = Generic.get(ThreeAProvider.class); + + assertFalse(JTypeHelper.isAssignableFrom(aProvider, ThreeCProvider.class)); + + + Class<?> paramType = TestArg.class.getMethod("doSomething", Provider.class).getParameterTypes()[0]; + Generic<?> argType = Generic.get(paramType); + + assertFalse(JTypeHelper.isAssignableFrom(argType, ThreeAProvider.class)); + } + + } diff --git a/pico/container/src/test/org/picocontainer/containers/JSRPicoContainerTestCase.java b/pico/container/src/test/org/picocontainer/containers/JSRPicoContainerTestCase.java index fd28a57..2693f55 100644 --- a/pico/container/src/test/org/picocontainer/containers/JSRPicoContainerTestCase.java +++ b/pico/container/src/test/org/picocontainer/containers/JSRPicoContainerTestCase.java @@ -207,4 +207,43 @@ public class JSRPicoContainerTestCase { assertTrue(testObject != null); } + + public static class ProvderTestThree { + public ProvderTestThree(Provider<C> arg) { + assertNotNull(arg); + } + } + + public static class ThreeCProvider implements Provider<C> { + + public C get() { + return new C(); + } + + } + + public static class ThreeAProvider implements Provider<A> { + + public A get() { + return new A(); + } + + } + + @Test + public void testConstructorInjectionCanDifferentiateDifferentGenericTypesOnProviders() { + MutablePicoContainer mpc = new JSRPicoContainer(new PicoBuilder().withCaching().withJavaEE5Lifecycle().build()); + + + mpc.addComponent(ProvderTestThree.class, ProvderTestThree.class, + new JSR330ComponentParameter()) //The Test + .addProvider(new ThreeCProvider()) //No Qualifier + .addProvider(new ThreeAProvider()) //No Qualifier Generic type provided should short it out + ; + + ProvderTestThree testThree = mpc.getComponent(ProvderTestThree.class); + assertNotNull(testThree); + + } + } diff --git a/pico/container/src/test/org/picocontainer/injectors/ProviderAdapterTestCase.java b/pico/container/src/test/org/picocontainer/injectors/ProviderAdapterTestCase.java index 73db591..3ee3fb9 100644 --- a/pico/container/src/test/org/picocontainer/injectors/ProviderAdapterTestCase.java +++ b/pico/container/src/test/org/picocontainer/injectors/ProviderAdapterTestCase.java @@ -1,10 +1,12 @@ package org.picocontainer.injectors; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; -import org.junit.After; -import org.junit.Before; import org.junit.Test; +import org.picocontainer.JTypeHelper; + +import com.googlecode.jtype.Generic; public class ProviderAdapterTestCase { @@ -20,18 +22,17 @@ public class ProviderAdapterTestCase { } - @Before - public void setUp() throws Exception { - } - - @After - public void tearDown() throws Exception { - } - @Test public void testGetComponentKey() { ProviderAdapter providerAdapter = new ProviderAdapter(new ProviderA()); assertEquals(A.class, providerAdapter.getComponentKey()); } + @Test + public void testImplementationType() { + ProviderAdapter providerAdapter = new ProviderAdapter(new ProviderA()); + assertEquals(ProviderA.class, providerAdapter.getComponentImplementation()); + assertFalse(JTypeHelper.isAssignableFrom(Generic.get(A.class), providerAdapter.getComponentImplementation())); + } + }