[picocontainer-scm] [5721] java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors: PICO-372 fix; reported by Ronald Blaschke
paul-yCVjj/[email protected] Wed, 30 Jun 2010 01:02:31 -0500 (CDT)
| Newsgroups | gmane.comp.java.picocontainer.cvs |
|---|---|
| Message-ID | <[email protected]> |
Revision 5721
Author paul
Date 2010-06-30 01:02:30 -0500 (Wed, 30 Jun 2010)
Log Message
PICO-372 fix; reported by Ronald Blaschke
Modified Paths
- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/IterativeInjector.java
- java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/SetterInjectorTestCase.java
Diff
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/IterativeInjector.java (5720 => 5721)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/IterativeInjector.java 2010-06-30 05:52:21 UTC (rev 5720)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/IterativeInjector.java 2010-06-30 06:02:30 UTC (rev 5721)
@@ -1,13 +1,17 @@
package org.picocontainer.injectors;
+import com.thoughtworks.paranamer.AdaptiveParanamer;
+import com.thoughtworks.paranamer.AnnotationParanamer;
+import com.thoughtworks.paranamer.CachingParanamer;
+import com.thoughtworks.paranamer.Paranamer;
import org.picocontainer.ComponentMonitor;
-import org.picocontainer.LifecycleStrategy;
+import org.picocontainer.NameBinding;
import org.picocontainer.Parameter;
-import org.picocontainer.NameBinding;
import org.picocontainer.PicoCompositionException;
import org.picocontainer.PicoContainer;
import org.picocontainer.annotations.Bind;
+import java.lang.annotation.Annotation;
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
@@ -15,7 +19,6 @@
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
-import java.lang.annotation.Annotation;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.ArrayList;
@@ -24,15 +27,13 @@
import java.util.List;
import java.util.Set;
-import com.thoughtworks.paranamer.Paranamer;
-import com.thoughtworks.paranamer.CachingParanamer;
-import com.thoughtworks.paranamer.AdaptiveParanamer;
-import com.thoughtworks.paranamer.AnnotationParanamer;
-
/**
* Injection will happen iteratively after component instantiation
*/
public abstract class IterativeInjector<T> extends AbstractInjector<T> {
+
+ private static final Object[] NONE = new Object[0];
+
private transient ThreadLocalCyclicDependencyGuard instantiationGuard;
protected transient List<AccessibleObject> injectionMembers;
protected transient Type[] injectionTypes;
@@ -206,7 +207,7 @@
IterativeInjector.this,
constructorToUse,
componentInstance,
- null,
+ NONE,
System.currentTimeMillis() - startTime);
return componentInstance;
}
Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/SetterInjectorTestCase.java (5720 => 5721)
--- java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/SetterInjectorTestCase.java 2010-06-30 05:52:21 UTC (rev 5720)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/SetterInjectorTestCase.java 2010-06-30 06:02:30 UTC (rev 5721)
@@ -18,16 +18,22 @@
import java.util.ArrayList;
import java.util.List;
+import org.jmock.Expectations;
+import org.jmock.Mockery;
+import org.jmock.api.Invocation;
+import org.jmock.lib.action.CustomAction;
import org.junit.Test;
import org.picocontainer.Characteristics;
import org.picocontainer.ComponentAdapter;
import org.picocontainer.ComponentFactory;
+import org.picocontainer.ComponentMonitor;
import org.picocontainer.DefaultPicoContainer;
import org.picocontainer.MutablePicoContainer;
import org.picocontainer.NameBinding;
import org.picocontainer.Parameter;
import org.picocontainer.behaviors.Caching;
import org.picocontainer.behaviors.ImplementationHiding;
+import org.picocontainer.containers.EmptyPicoContainer;
import org.picocontainer.lifecycle.NullLifecycleStrategy;
import org.picocontainer.monitors.AbstractComponentMonitor;
import org.picocontainer.monitors.NullComponentMonitor;
@@ -450,4 +456,45 @@
assertSame(yang, yin.getYang());
}
+ @Test
+ public void shouldProvideEmptyArgumentListForDefaultConstructor() throws Exception {
+ final Mockery mockery = new Mockery();
+ final ComponentMonitor componentMonitor = mockery.mock(ComponentMonitor.class);
+ final MutablePicoContainer pico = new DefaultPicoContainer(
+ new SetterInjection(), new NullLifecycleStrategy(), new EmptyPicoContainer(), componentMonitor
+ );
+
+ mockery.checking(new Expectations() {{
+ oneOf(componentMonitor).newInjector(
+ with(any(org.picocontainer.Injector.class))
+ ); will(returnSameInjector());
+ }});
+
+ pico.addComponent(B.class);
+
+ mockery.checking(new Expectations() {{
+ oneOf(componentMonitor).instantiating(
+ with(same(pico)), with(any(ComponentAdapter.class)), with(equal(B.class.getConstructor()))
+ ); will(new CustomAction("return same constructor") {
+ public Object invoke(Invocation invocation) {
+ return invocation.getParameter(2);
+ }
+ });
+ oneOf(componentMonitor).instantiated(
+ with(same(pico)), with(any(ComponentAdapter.class)), with(equal(B.class.getConstructor())),
+ with(any(Object.class)), with(equal(new Object[0])), with(any(long.class))
+ );
+ }});
+ pico.getComponent(B.class);
+
+ mockery.assertIsSatisfied();
+ }
+
+ private CustomAction returnSameInjector() {
+ return new CustomAction("return same injector") {
+ public Object invoke(Invocation invocation) {
+ return invocation.getParameter(0);
+ }
+ };
+ }
}
----------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email