[picocontainer-scm] [5800] java/2.x/trunk/pico/container/src/test/org/picocontainer: UnsatisfiableDependenciesException reworked for greated clarity, as is the toString() of picocontainer

paul-yCVjj/[email protected] Sun, 30 Oct 2011 12:00:42 -0500 (CDT)
Newsgroups gmane.comp.java.picocontainer.cvs
Message-ID <[email protected]>
Revision 5800
Author paul
Date 2011-10-30 12:00:42 -0500 (Sun, 30 Oct 2011)

Log Message

UnsatisfiableDependenciesException reworked for greated clarity, as is the toString() of picocontainer

Modified Paths

- java/2.x/trunk/pico/container/src/java/org/picocontainer/DefaultPicoContainer.java

- java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/AbstractDelegatingPicoContainer.java

- java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/CommandLinePicoContainer.java

- java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/ImmutablePicoContainer.java

- java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/PropertiesPicoContainer.java

- java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/SystemPropertiesPicoContainer.java

- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/AbstractInjector.java

- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/AnnotatedFieldInjector.java

- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/ConstructorInjector.java

- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/IterativeInjector.java

- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/MethodInjector.java

- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/NamedFieldInjector.java

- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/SetterInjector.java

- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/SingleMemberInjector.java

- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/TypedFieldInjector.java

- java/2.x/trunk/pico/container/src/java/org/picocontainer/parameters/BasicComponentParameter.java

- java/2.x/trunk/pico/container/src/test/org/picocontainer/DefaultPicoContainerTestCase.java

- java/2.x/trunk/pico/container/src/test/org/picocontainer/containers/CommandLinePicoContainerTestCase.java

- java/2.x/trunk/pico/container/src/test/org/picocontainer/containers/PropertiesPicoContainerTestCase.java

- java/2.x/trunk/pico/container/src/test/org/picocontainer/containers/SystemPropertiesPicoContainerTestCase.java

- java/2.x/trunk/pico/container/src/test/org/picocontainer/containers/TieringPicoContainerTestCase.java

- java/2.x/trunk/pico/container/src/test/org/picocontainer/defaults/PicoExceptionsTestCase.java

- java/2.x/trunk/pico/container/src/test/org/picocontainer/defaults/ResolveAdapterReductionTestCase.java

- java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/AnnotatedFieldInjectorTestCase.java

- java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/MultiInjectionTestCase.java

- java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/NamedFieldInjectorTestCase.java

- java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/SetterInjectorTestCase.java

- java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/TypedFieldInjectorTestCase.java

- java/2.x/trunk/pico/container/src/test/org/picocontainer/tck/AbstractPicoContainerTest.java

Added Paths

- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/AbstractFieldInjector.java

Diff

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/DefaultPicoContainer.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/DefaultPicoContainer.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/DefaultPicoContainer.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -1083,7 +1083,7 @@

@Override
public String toString() {
- return String.format("%s:%d<%s", (name != null ? name : super.toString()), this.componentAdapters.size(), (parent != null ? parent.toString() : "|"));
+ return String.format("%s:%d<%s", (name != null ? name : super.toString()), this.componentAdapters.size(), (parent != null && !(parent instanceof EmptyPicoContainer)? parent.toString() : "|"));
}

/**

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/AbstractDelegatingPicoContainer.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/AbstractDelegatingPicoContainer.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/AbstractDelegatingPicoContainer.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -107,7 +107,7 @@

@Override
public String toString() {
- return "D<" + delegate.toString();
+ return "[Delegate]:" + delegate.toString();
}

public Converters getConverters() {

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/CommandLinePicoContainer.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/CommandLinePicoContainer.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/CommandLinePicoContainer.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -104,7 +104,13 @@
}

public void setName(String s) {
- ((DefaultPicoContainer)getDelegate()).setName(s);
+ ((MutablePicoContainer)getDelegate()).setName(s);
}

+ @Override
+ public String toString() {
+ return "[CommandLine]:" + super.getDelegate().toString();
+ }
+
+
}

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/ImmutablePicoContainer.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/ImmutablePicoContainer.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/ImmutablePicoContainer.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -105,7 +105,7 @@
}

public String toString() {
- return "I<" + delegate.toString();
+ return "[Immutable]:" + delegate.toString();
}

public Converters getConverters() {

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/PropertiesPicoContainer.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/PropertiesPicoContainer.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/PropertiesPicoContainer.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -49,4 +49,10 @@
((DefaultPicoContainer)getDelegate()).setName(s);
}

+ @Override
+ public String toString() {
+ return "[Properties]:" + super.getDelegate().toString();
+ }
+
+
}

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/SystemPropertiesPicoContainer.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/SystemPropertiesPicoContainer.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/SystemPropertiesPicoContainer.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -23,4 +23,11 @@
public SystemPropertiesPicoContainer(PicoContainer parent) {
super(System.getProperties(),parent);
}
+
+ @Override
+ public String toString() {
+ return "[SysProps]:" + super.getDelegate().toString();
+ }
+
+
}

Added: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/AbstractFieldInjector.java (0 => 5800)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/AbstractFieldInjector.java (rev 0)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/AbstractFieldInjector.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -0,0 +1,33 @@
+package org.picocontainer.injectors;
+
+import org.picocontainer.ComponentMonitor;
+import org.picocontainer.Parameter;
+import org.picocontainer.PicoContainer;
+
+import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.Field;
+import java.lang.reflect.Type;
+import java.util.List;
+import java.util.Set;
+
+public abstract class AbstractFieldInjector<T> extends IterativeInjector<T> {
+
+ public AbstractFieldInjector(Object componentKey, Class componentImplementation,
+ Parameter[] parameters, ComponentMonitor monitor,
+ boolean useNames) throws NotConcreteRegistrationException {
+ super(componentKey, componentImplementation, parameters, monitor, useNames);
+ }
+
+ @Override
+ final protected void unsatisfiedDependencies(PicoContainer container, Set<Type> unsatisfiableDependencyTypes, List<AccessibleObject> unsatisfiableDependencyMembers) {
+ StringBuilder sb = new StringBuilder(this.getComponentImplementation().getName()).append(" has unsatisfied dependency for fields [");
+ for (int i = 0; i < unsatisfiableDependencyMembers.size(); i++) {
+ AccessibleObject accessibleObject = unsatisfiableDependencyMembers.get(i);
+ Field m = (Field) accessibleObject;
+ sb.append(m.getType().getName()).append(".").append(m.getName());
+ }
+ String container1 = container.toString();
+ throw new UnsatisfiableDependenciesException(sb.toString() + "] from " + container1);
+ }
+
+}

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/AbstractInjector.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/AbstractInjector.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/AbstractInjector.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -90,12 +90,12 @@
/**
* Create default parameters for the given types.
*
- * @param parameterTypes the parameter types
+ * @param length parameter list length
* @return the array with the default parameters.
*/
- protected Parameter[] createDefaultParameters(final Type[] parameterTypes) {
- Parameter[] componentParameters = new Parameter[parameterTypes.length];
- for (int i = 0; i < parameterTypes.length; i++) {
+ protected Parameter[] createDefaultParameters(int length) {
+ Parameter[] componentParameters = new Parameter[length];
+ for (int i = 0; i < length; i++) {
componentParameters[i] = ComponentParameter.DEFAULT;
}
return componentParameters;
@@ -333,7 +333,7 @@

/**
- * Construct a new exception with the ambigous class type and the ambiguous component keys.
+ * Construct a new exception with the ambiguous class type and the ambiguous component keys.
*
* @param ambiguousDependency the unresolved dependency type
* @param componentKeys the ambiguous keys.
@@ -386,44 +386,10 @@
*/
public static class UnsatisfiableDependenciesException extends PicoCompositionException {

-
- private final ComponentAdapter<?> instantiatingComponentAdapter;
- private final Set unsatisfiableDependencies;
- private final Type unsatisfiedDependencyType;
-
- /**
- * The original container requesting the instantiation of the component.
- */
- private final PicoContainer leafContainer;
-
- public UnsatisfiableDependenciesException(final ComponentAdapter<?> instantiatingComponentAdapter,
- final Type unsatisfiedDependencyType, final Set unsatisfiableDependencies,
- final PicoContainer leafContainer) {
- super(instantiatingComponentAdapter.getComponentImplementation().getName() + " has unsatisfied dependency: " + unsatisfiedDependencyType
- +" among unsatisfiable dependencies: "+unsatisfiableDependencies + " where " + leafContainer
- + " was the leaf container being asked for dependencies.");
- this.instantiatingComponentAdapter = instantiatingComponentAdapter;
- this.unsatisfiableDependencies = unsatisfiableDependencies;
- this.unsatisfiedDependencyType = unsatisfiedDependencyType;
- this.leafContainer = leafContainer;
+ public UnsatisfiableDependenciesException(String message) {
+ super(message);
}

- public ComponentAdapter<?> getUnsatisfiableComponentAdapter() {
- return instantiatingComponentAdapter;
- }
-
- public Set getUnsatisfiableDependencies() {
- return unsatisfiableDependencies;
- }
-
- public Type getUnsatisfiedDependencyType() {
- return unsatisfiedDependencyType;
- }
-
- public PicoContainer getLeafContainer() {
- return leafContainer;
- }
-
}

/**

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/AnnotatedFieldInjector.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/AnnotatedFieldInjector.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/AnnotatedFieldInjector.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -31,7 +31,7 @@
* The default annotation of org.picocontainer.annotations.@Inject can be overridden.
*/
@SuppressWarnings("serial")
-public class AnnotatedFieldInjector<T> extends IterativeInjector<T> {
+public class AnnotatedFieldInjector<T> extends AbstractFieldInjector<T> {

private final Class<? extends Annotation> injectionAnnotation;

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/ConstructorInjector.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/ConstructorInjector.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/ConstructorInjector.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -33,6 +33,7 @@
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -127,7 +128,7 @@
@SuppressWarnings("synthetic-access")
protected CtorAndAdapters<T> getGreediestSatisfiableConstructor(PicoContainer container) throws PicoCompositionException {
final Set<Constructor> conflicts = new HashSet<Constructor>();
- final Set<List<Type>> unsatisfiableDependencyTypes = new HashSet<List<Type>>();
+ final Set<Type> unsatisfiableDependencyTypes = new HashSet<Type>();
final Map<ResolverKey, Parameter.Resolver> resolvers = new HashMap<ResolverKey, Parameter.Resolver>();
if (sortedMatchingConstructors == null) {
sortedMatchingConstructors = getSortedMatchingConstructors();
@@ -136,14 +137,15 @@
Parameter[] greediestConstructorsParameters = null;
ComponentAdapter[] greediestConstructorsParametersComponentAdapters = null;
int lastSatisfiableConstructorSize = -1;
- Type unsatisfiedDependencyType = null;
+ Type unsatisfiedDependency = null;
+ Constructor unsatisfiedConstructor = null;
for (final Constructor<T> sortedMatchingConstructor : sortedMatchingConstructors) {
try {
boolean failedDependency = false;
Type[] parameterTypes = sortedMatchingConstructor.getGenericParameterTypes();
fixGenericParameterTypes(sortedMatchingConstructor, parameterTypes);
Annotation[] bindings = getBindings(sortedMatchingConstructor.getParameterAnnotations());
- final Parameter[] currentParameters = parameters != null ? parameters : createDefaultParameters(parameterTypes);
+ final Parameter[] currentParameters = parameters != null ? parameters : createDefaultParameters(parameterTypes.length);
final ComponentAdapter<?>[] currentAdapters = new ComponentAdapter<?>[currentParameters.length];
// remember: all constructors with less arguments than the given parameters are filtered out already
for (int j = 0; j < currentParameters.length; j++) {
@@ -160,10 +162,10 @@
currentAdapters[j] = resolver.getComponentAdapter();
continue;
}
- unsatisfiableDependencyTypes.add(Arrays.asList(parameterTypes));
- unsatisfiedDependencyType = box(parameterTypes[j]);
+ unsatisfiableDependencyTypes.add(expectedType);
+ unsatisfiedDependency = box(parameterTypes[j]);
+ unsatisfiedConstructor = sortedMatchingConstructor;
failedDependency = true;
- break;
}

if (greediestConstructor != null && parameterTypes.length != lastSatisfiableConstructorSize) {
@@ -192,7 +194,9 @@
if (!conflicts.isEmpty()) {
throw new PicoCompositionException(conflicts.size() + " satisfiable constructors is too many for '"+getComponentImplementation()+"'. Constructor List:" + conflicts.toString().replace(getComponentImplementation().getName(),"<init>").replace("public <i","<i"));
} else if (greediestConstructor == null && !unsatisfiableDependencyTypes.isEmpty()) {
- throw new UnsatisfiableDependenciesException(this, unsatisfiedDependencyType, unsatisfiableDependencyTypes, container);
+ throw new UnsatisfiableDependenciesException(this.getComponentImplementation().getName()
+ + " has unsatisfied dependency '" + unsatisfiedDependency
+ + "' for constructor '" + unsatisfiedConstructor + "'" + " from " + container);
} else if (greediestConstructor == null) {
// be nice to the user, show all constructors that were filtered out
final Set<Constructor> nonMatching = new HashSet<Constructor>();
@@ -204,6 +208,18 @@
return new CtorAndAdapters<T>(greediestConstructor, greediestConstructorsParameters, greediestConstructorsParametersComponentAdapters);
}

+ private String toList(Set<Type> unsatisfiableDependencyTypes) {
+ StringBuilder sb = new StringBuilder();
+ Iterator<Type> it = unsatisfiableDependencyTypes.iterator();
+ while (it.hasNext()) {
+ Type next = it.next();
+ sb.append(next.toString().replace("class ", ""));
+ sb.append(", ");
+ }
+ String s = sb.toString();
+ return s.substring(0, s.lastIndexOf(", "));
+ }
+
public void enableEmjection(boolean enableEmjection) {
this.enableEmjection = enableEmjection;
}
@@ -403,7 +419,7 @@
public Object run(Object instance) {
final Constructor constructor = getGreediestSatisfiableConstructor(guardedContainer).getConstructor();
final Class[] parameterTypes = constructor.getParameterTypes();
- final Parameter[] currentParameters = parameters != null ? parameters : createDefaultParameters(parameterTypes);
+ final Parameter[] currentParameters = parameters != null ? parameters : createDefaultParameters(parameterTypes.length);
for (int i = 0; i < currentParameters.length; i++) {
currentParameters[i].verify(container, ConstructorInjector.this, box(parameterTypes[i]),
new ParameterNameBinding(getParanamer(), constructor, i),

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/IterativeInjector.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/IterativeInjector.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/IterativeInjector.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -89,17 +89,19 @@

final List<Object> matchingParameterList = new ArrayList<Object>(Collections.nCopies(injectionMembers.size(), null));

- final Parameter[] currentParameters = parameters != null ? parameters : createDefaultParameters(injectionTypes);
+ final Parameter[] currentParameters = parameters != null ? parameters : createDefaultParameters(injectionTypes.length);
final Set<Integer> nonMatchingParameterPositions = matchParameters(container, matchingParameterList, currentParameters);

final Set<Type> unsatisfiableDependencyTypes = new HashSet<Type>();
+ final List<AccessibleObject> unsatisfiableDependencyMembers = new ArrayList<AccessibleObject>();
for (int i = 0; i < matchingParameterList.size(); i++) {
if (matchingParameterList.get(i) == null) {
unsatisfiableDependencyTypes.add(injectionTypes[i]);
+ unsatisfiableDependencyMembers.add(injectionMembers.get(i));
}
}
if (unsatisfiableDependencyTypes.size() > 0) {
- unsatisfiedDependencies(container, unsatisfiableDependencyTypes);
+ unsatisfiedDependencies(container, unsatisfiableDependencyTypes, unsatisfiableDependencyMembers);
} else if (nonMatchingParameterPositions.size() > 0) {
throw new PicoCompositionException("Following parameters do not match any of the injectionMembers for " + getComponentImplementation() + ": " + nonMatchingParameterPositions.toString());
}
@@ -142,9 +144,7 @@
return new ParameterNameBinding(paranamer, member, 0);
}

- protected void unsatisfiedDependencies(PicoContainer container, Set<Type> unsatisfiableDependencyTypes) {
- throw new UnsatisfiableDependenciesException(this, null, unsatisfiableDependencyTypes, container);
- }
+ protected abstract void unsatisfiedDependencies(PicoContainer container, Set<Type> unsatisfiableDependencyTypes, List<AccessibleObject> unsatisfiableDependencyMembers);

public T getComponentInstance(final PicoContainer container, Type into) throws PicoCompositionException {
final Constructor constructor = getConstructor();
@@ -344,5 +344,4 @@
});
}

-
}

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/MethodInjector.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/MethodInjector.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/MethodInjector.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -164,7 +164,7 @@
public Object run(Object instance) {
final Method method = getInjectorMethod();
final Class[] parameterTypes = method.getParameterTypes();
- final Parameter[] currentParameters = parameters != null ? parameters : createDefaultParameters(parameterTypes);
+ final Parameter[] currentParameters = parameters != null ? parameters : createDefaultParameters(parameterTypes.length);
for (int i = 0; i < currentParameters.length; i++) {
currentParameters[i].verify(container, MethodInjector.this, parameterTypes[i],
new ParameterNameBinding(getParanamer(), method, i), useNames(),

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/NamedFieldInjector.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/NamedFieldInjector.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/NamedFieldInjector.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -12,6 +12,7 @@
import org.picocontainer.ComponentMonitor;
import org.picocontainer.NameBinding;
import org.picocontainer.Parameter;
+import org.picocontainer.PicoContainer;
import org.picocontainer.annotations.Bind;

import java.lang.annotation.Annotation;
@@ -25,13 +26,14 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Set;

/**
* Injection happens after instantiation, and fields are marked as
* injection points via a named field.
*/
@SuppressWarnings("serial")
-public class NamedFieldInjector extends IterativeInjector {
+public class NamedFieldInjector<T> extends AbstractFieldInjector<T> {

private final List<String> fieldNames;

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/SetterInjector.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/SetterInjector.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/SetterInjector.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -16,9 +16,10 @@
import org.picocontainer.behaviors.Cached;

import java.lang.reflect.Method;
+import java.lang.reflect.Type;
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Type;
+import java.util.List;
import java.util.Set;

/**
@@ -100,9 +101,10 @@
}

@Override
- protected void unsatisfiedDependencies(PicoContainer container, Set<Type> unsatisfiableDependencyTypes) {
+ protected void unsatisfiedDependencies(PicoContainer container, Set<Type> unsatisfiableDependencyTypes, List<AccessibleObject> unsatisfiableDependencyMembers) {
if (!optional) {
- super.unsatisfiedDependencies(container, unsatisfiableDependencyTypes);
+ throw new UnsatisfiableDependenciesException(this.getComponentImplementation().getName() + " has unsatisfied dependencies " + unsatisfiableDependencyTypes
+ + " for members " + unsatisfiableDependencyMembers + " from " + container);
}
}

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/SingleMemberInjector.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/SingleMemberInjector.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/SingleMemberInjector.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -17,7 +17,6 @@
import java.lang.reflect.Type;
import org.picocontainer.ComponentAdapter;
import org.picocontainer.ComponentMonitor;
-import org.picocontainer.LifecycleStrategy;
import org.picocontainer.Parameter;
import org.picocontainer.PicoCompositionException;
import org.picocontainer.PicoContainer;
@@ -55,7 +54,7 @@
protected Object[] getMemberArguments(PicoContainer container, final AccessibleObject member, final Type[] parameterTypes, final Annotation[] bindings) {
boxParameters(parameterTypes);
Object[] result = new Object[parameterTypes.length];
- final Parameter[] currentParameters = parameters != null ? parameters : createDefaultParameters(parameterTypes);
+ final Parameter[] currentParameters = parameters != null ? parameters : createDefaultParameters(parameterTypes.length);

for (int i = 0; i < currentParameters.length; i++) {
result[i] = getParameter(container, member, i, parameterTypes[i], bindings[i], currentParameters[i], null);

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/TypedFieldInjector.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/TypedFieldInjector.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/injectors/TypedFieldInjector.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -12,28 +12,25 @@
import org.picocontainer.ComponentMonitor;
import org.picocontainer.NameBinding;
import org.picocontainer.Parameter;
-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.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Type;
+import java.lang.reflect.*;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Set;

/**
* Injection happens after instantiation, and fields are marked as
* injection points via a field type.
*/
@SuppressWarnings("serial")
-public class TypedFieldInjector<T> extends IterativeInjector<T> {
+public class TypedFieldInjector<T> extends AbstractFieldInjector<T> {

private final List<String> classes;

Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/parameters/BasicComponentParameter.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/java/org/picocontainer/parameters/BasicComponentParameter.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/parameters/BasicComponentParameter.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -136,7 +136,8 @@
if (componentAdapter == null) {
final Set<Type> set = new HashSet<Type>();
set.add(expectedType);
- throw new AbstractInjector.UnsatisfiableDependenciesException(forAdapter, null, set, container);
+ throw new AbstractInjector.UnsatisfiableDependenciesException(
+ forAdapter.getComponentImplementation().getName() + " has unsatisfied dependencies: " + set + " from " + container);
}
componentAdapter.verify(container);
}

Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/DefaultPicoContainerTestCase.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/test/org/picocontainer/DefaultPicoContainerTestCase.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/DefaultPicoContainerTestCase.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -93,7 +93,7 @@
+ AbstractInjector.UnsatisfiableDependenciesException.class
.getName() + " expected");
} catch (final AbstractInjector.UnsatisfiableDependenciesException e) {
- assertEquals(ComponentB.class, e.getUnsatisfiedDependencyType());
+ assertEquals("A has unsatisfied dependency 'class C' for constructor 'public A(B,C)' from parent:1<|", e.getMessage().replace("org.picocontainer.tck.AbstractPicoContainerTest$Component",""));
}

}
@@ -248,7 +248,7 @@
child.setName("child");
parent.addComponent("st", SimpleTouchable.class);
child.addComponent("dot", DependsOnTouchable.class);
- assertEquals("child:1<I<parent:1<|", child.toString());
+ assertEquals("child:1<[Immutable]:parent:1<|", child.toString());
}

@SuppressWarnings("serial")
@@ -870,4 +870,8 @@
}
}

+ @Test public void testUnsatisfiableDependenciesExceptionGivesVerboseEnoughErrorMessage() {
+ super.testUnsatisfiableDependenciesExceptionGivesVerboseEnoughErrorMessage();
+ }
+
}
\ No newline at end of file

Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/containers/CommandLinePicoContainerTestCase.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/test/org/picocontainer/containers/CommandLinePicoContainerTestCase.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/containers/CommandLinePicoContainerTestCase.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -196,7 +196,8 @@
child.setName("child");
child.addComponent("hello", "goodbye");
child.addComponent("bonjour", "aurevior");
- assertEquals("child:2<I<D<parent:3<|", child.toString());
+ String actual = child.toString();
+ assertEquals("child:2<[Immutable]:[CommandLine]:parent:3<|", actual);
}

Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/containers/PropertiesPicoContainerTestCase.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/test/org/picocontainer/containers/PropertiesPicoContainerTestCase.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/containers/PropertiesPicoContainerTestCase.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -123,7 +123,7 @@
child.setName("child");
child.addComponent("hello", "goodbye");
child.addComponent("bonjour", "aurevior");
- assertEquals("child:2<I<D<parent:3<|", child.toString());
+ assertEquals("child:2<[Immutable]:[Properties]:parent:3<|", child.toString());
}

Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/containers/SystemPropertiesPicoContainerTestCase.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/test/org/picocontainer/containers/SystemPropertiesPicoContainerTestCase.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/containers/SystemPropertiesPicoContainerTestCase.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -33,7 +33,7 @@
child.addComponent("hello", "goodbye");
child.addComponent("bonjour", "aurevior");
int num = System.getProperties().size();
- assertEquals("child:2<I<D<parent:"+num+"<|", child.toString());
+ assertEquals("child:2<[Immutable]:[SysProps]:parent:"+num+"<|", child.toString());
}

Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/containers/TieringPicoContainerTestCase.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/test/org/picocontainer/containers/TieringPicoContainerTestCase.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/containers/TieringPicoContainerTestCase.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -178,7 +178,7 @@
child.setName("child");
parent.addComponent("st", SimpleTouchable.class);
child.addComponent("dot", DependsOnTouchable.class);
- assertEquals("child:1<I<parent:1<|", child.toString());
+ assertEquals("child:1<[Immutable]:parent:1<|", child.toString());
}

Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/defaults/PicoExceptionsTestCase.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/test/org/picocontainer/defaults/PicoExceptionsTestCase.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/defaults/PicoExceptionsTestCase.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -45,32 +45,14 @@
final ComponentAdapter componentAdapter = new ConstructorInjector(clazz, clazz, null, new AbstractComponentMonitor(), false, false);
DefaultPicoContainer pico = new DefaultPicoContainer();
pico.addComponent(MESSAGE);
- try {
- final Exception exception = (Exception) componentAdapter.getComponentInstance(pico, ComponentAdapter.NOTHING.class);
+ Exception exception = (Exception) componentAdapter.getComponentInstance(pico, ComponentAdapter.NOTHING.class);
assertEquals(MESSAGE, exception.getMessage());
- } catch (final AbstractInjector.UnsatisfiableDependenciesException ex) {
- final Set<Object> set = new HashSet<Object>();
- for (Object o : ex.getUnsatisfiableDependencies()) {
- final List<Object> list = (List<Object>)o;
- set.addAll(list);
- }
- assertTrue(set.contains(Throwable.class));
- }
pico = new DefaultPicoContainer();
pico.addComponent(THROWABLE);
- try {
- final PicoException exception = (PicoException) componentAdapter.getComponentInstance(pico, ComponentAdapter.NOTHING.class);
- assertSame(THROWABLE, exception.getCause());
- } catch (final AbstractInjector.UnsatisfiableDependenciesException ex) {
- final Set<Object> set = new HashSet<Object>();
- for (Object o : ex.getUnsatisfiableDependencies()) {
- final List<Object> list = (List<Object>)o;
- set.addAll(list);
- }
- assertTrue(set.contains(String.class));
- }
+ exception = (PicoException) componentAdapter.getComponentInstance(pico, ComponentAdapter.NOTHING.class);
+ assertSame(THROWABLE, exception.getCause());
pico.addComponent(MESSAGE);
- final PicoException exception = (PicoException) componentAdapter.getComponentInstance(pico, ComponentAdapter.NOTHING.class);
+ exception = (PicoException) componentAdapter.getComponentInstance(pico, ComponentAdapter.NOTHING.class);
assertEquals(MESSAGE, exception.getMessage());
assertSame(THROWABLE, exception.getCause());
}

Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/defaults/ResolveAdapterReductionTestCase.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/test/org/picocontainer/defaults/ResolveAdapterReductionTestCase.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/defaults/ResolveAdapterReductionTestCase.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -139,9 +139,9 @@
return adapters;
}

- protected Parameter[] createDefaultParameters(Type[] parameters) {
- Parameter[] componentParameters = new Parameter[parameters.length];
- for (int i = 0; i < parameters.length; i++) {
+ protected Parameter[] createDefaultParameters(int length) {
+ Parameter[] componentParameters = new Parameter[length];
+ for (int i = 0; i < length; i++) {
componentParameters[i] = new CountingComponentParameter();

}

Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/AnnotatedFieldInjectorTestCase.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/AnnotatedFieldInjectorTestCase.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/AnnotatedFieldInjectorTestCase.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -21,6 +21,8 @@
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.fail;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;

@@ -160,4 +162,20 @@
assertNotNull(c2.d2);
}

+ @Test public void testFieldInjectionByTypeWhereNoMatch() {
+ MutablePicoContainer container = new PicoBuilder().withAnnotatedFieldInjection().build();
+ container.setName("parent");
+ container.addComponent(C2.class);
+ try {
+ container.getComponent(C2.class);
+ fail("should have barfed");
+ } catch (AbstractInjector.UnsatisfiableDependenciesException e) {
+ String expected = "C2 has unsatisfied dependency for fields [D2.d2] from parent:1<|";
+ String actual = e.getMessage();
+ actual = actual.replace(AnnotatedFieldInjectorTestCase.class.getName() + "$", "");
+ assertEquals(expected, actual);
+ }
+ }
+
+
}
\ No newline at end of file

Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/MultiInjectionTestCase.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/MultiInjectionTestCase.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/MultiInjectionTestCase.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -8,6 +8,7 @@
*****************************************************************************/
package org.picocontainer.injectors;

+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

@@ -105,7 +106,11 @@
try {
Foo foo = dpc.getComponent(Foo.class);
} catch (AbstractInjector.UnsatisfiableDependenciesException e) {
- assertTrue(e.getMessage().contains(Baz.class.getName()));
+
+
+ String message = e.getMessage().replace("org.picocontainer.injectors.MultiInjectionTestCase$", "");
+
+ assertEquals("Foo has unsatisfied dependencies [class Baz] for members [public void Foo.setBaz(Baz)] from " + dpc, message);
}
}

Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/NamedFieldInjectorTestCase.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/NamedFieldInjectorTestCase.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/NamedFieldInjectorTestCase.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -9,9 +9,11 @@
*****************************************************************************/
package org.picocontainer.injectors;

+import static junit.framework.Assert.fail;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertEquals;

+import junit.framework.Assert;
import org.junit.Test;
import org.picocontainer.DefaultPicoContainer;
import org.picocontainer.MutablePicoContainer;
@@ -29,6 +31,9 @@
private String wing2;
}

+ public static class Monoplane {
+ private String wing1;
+ }

public static class PogoStick {
}
@@ -58,5 +63,20 @@
}

+ @Test public void testFieldInjectionByTypeWhereNoMatch() {
+ MutablePicoContainer pico = new DefaultPicoContainer();
+ pico.setName("parent");
+ pico.addAdapter(new NamedFieldInjector(Monoplane.class, Monoplane.class, null,
+ new NullComponentMonitor(), " aa wing1 cc wing2 dd "));
+ try {
+ pico.getComponent(Monoplane.class);
+ fail("should have barfed");
+ } catch (AbstractInjector.UnsatisfiableDependenciesException e) {
+ String expected = "Monoplane has unsatisfied dependency for fields [String.wing1] from parent:1<|";
+ String actual = e.getMessage().replace("java.lang.","");
+ actual = actual.replace(NamedFieldInjectorTestCase.class.getName() + "$", "");
+ Assert.assertEquals(expected, actual);
+ }
+ }

}
\ No newline at end of file

Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/SetterInjectorTestCase.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/SetterInjectorTestCase.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/SetterInjectorTestCase.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -266,15 +266,18 @@
SetterInjector bAdapter = new SetterInjector("b", B.class, Parameter.DEFAULT, new NullComponentMonitor(),
"set", "", false, false);

- MutablePicoContainer pico = new DefaultPicoContainer();
+ DefaultPicoContainer pico = new DefaultPicoContainer();
+ pico.setName("parent");
pico.addAdapter(bAdapter);
pico.addAdapter(aAdapter);

try {
aAdapter.getComponentInstance(pico, ComponentAdapter.NOTHING.class);
} catch (AbstractInjector.UnsatisfiableDependenciesException e) {
- assertTrue(e.getUnsatisfiableDependencies().contains(List.class));
- assertTrue(e.getUnsatisfiableDependencies().contains(String.class));
+ String message = e.getMessage().replace("org.picocontainer.injectors.SetterInjectorTestCase$", "");
+ message = message.replace("interface java.util.List, class java.lang.String", "class java.lang.String, interface java.util.List");
+ assertEquals("A has unsatisfied dependencies [class java.lang.String, interface java.util.List] for members [public void A.setString(java.lang.String), public void A.setList(java.util.List)] from parent:2<|",
+ message);
}
}

Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/TypedFieldInjectorTestCase.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/TypedFieldInjectorTestCase.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/injectors/TypedFieldInjectorTestCase.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -9,7 +9,12 @@
*****************************************************************************/
package org.picocontainer.injectors;

+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.fail;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+
import org.junit.Test;
import org.picocontainer.DefaultPicoContainer;
import org.picocontainer.MutablePicoContainer;
@@ -25,13 +30,12 @@
public static class PogoStick {
}

- //public static class Hulahoop {
- //}
+ public static class Hulahoop {
+ }

@Test public void testFieldInjectionByTypeWhereMatch() {
MutablePicoContainer pico = new DefaultPicoContainer();
- pico.addAdapter(new TypedFieldInjector(Helicopter.class, Helicopter.class, null,
- new NullComponentMonitor(),
+ pico.addAdapter(new TypedFieldInjector(Helicopter.class, Helicopter.class, null, new NullComponentMonitor(),
Integer.class.getName() + " " + PogoStick.class.getName() + " " + Float.class.getName()));
pico.addComponent(PogoStick.class, new PogoStick());
Helicopter chopper = pico.getComponent(Helicopter.class);
@@ -39,15 +43,21 @@
assertNotNull(chopper.pogo);
}

-// @Test public void testFieldInjectionByTypeWhereNoMatch() {
-// MutablePicoContainer pico = new DefaultPicoContainer();
-// pico.addAdapter(new TypedFieldInjector(Helicopter.class, Helicopter.class, null,
-// new NullComponentMonitor(),
-// Integer.class.getName() + " " + PogoStick.class.getName() + " " + Float.class.getName()));
-// pico.addComponent(Hulahoop.class, new Hulahoop());
-// Helicopter chopper = pico.getComponent(Helicopter.class);
-// assertNotNull(chopper);
-// assertNotNull(chopper.pogo);
-// }
+ @Test public void testFieldInjectionByTypeWhereNoMatch() {
+ MutablePicoContainer pico = new DefaultPicoContainer();
+ pico.setName("parent");
+ pico.addAdapter(new TypedFieldInjector(Helicopter.class, Helicopter.class, null, new NullComponentMonitor(),
+ Integer.class.getName() + " " + PogoStick.class.getName() + " " + Float.class.getName()));
+ pico.addComponent(Hulahoop.class, new Hulahoop());
+ try {
+ pico.getComponent(Helicopter.class);
+ fail("should have barfed");
+ } catch (AbstractInjector.UnsatisfiableDependenciesException e) {
+ String expected = "Helicopter has unsatisfied dependency for fields [PogoStick.pogo] from parent:2<|";
+ String actual = e.getMessage();
+ actual = actual.replace(TypedFieldInjectorTestCase.class.getName() + "$", "");
+ assertEquals(expected, actual);
+ }
+ }

}
\ No newline at end of file

Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/tck/AbstractPicoContainerTest.java (5799 => 5800)

--- java/2.x/trunk/pico/container/src/test/org/picocontainer/tck/AbstractPicoContainerTest.java 2011-10-25 08:43:36 UTC (rev 5799)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/tck/AbstractPicoContainerTest.java 2011-10-30 17:00:42 UTC (rev 5800)
@@ -18,6 +18,7 @@
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

+import org.picocontainer.injectors.IterativeInjector;
import org.picocontainer.parameters.ComponentParameter;

import org.picocontainer.Converting;
@@ -34,6 +35,7 @@
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -159,20 +161,15 @@

@Test public void testGettingComponentWithMissingDependencyFails() throws PicoException {
- PicoContainer picoContainer = createPicoContainerWithDependsOnTouchableOnly();
+ MutablePicoContainer picoContainer = (MutablePicoContainer) createPicoContainerWithDependsOnTouchableOnly();
+ picoContainer.setName("parent");
try {
picoContainer.getComponent(DependsOnTouchable.class);
fail("should need a Touchable");
} catch (AbstractInjector.UnsatisfiableDependenciesException e) {
- assertSame(picoContainer.getComponentAdapter(DependsOnTouchable.class, (NameBinding) null).getComponentImplementation(),
- e.getUnsatisfiableComponentAdapter().getComponentImplementation());
- final Set unsatisfiableDependencies = e.getUnsatisfiableDependencies();
- assertEquals(1, unsatisfiableDependencies.size());
+ String message = e.getMessage().replace("org.picocontainer.testmodel.", "");
+ assertEquals("DependsOnTouchable has unsatisfied dependency 'interface Touchable' for constructor 'public DependsOnTouchable(Touchable)' from parent:1<|", message);

- // Touchable.class is now inside a List (the list of unsatisfied parameters) -- mparaz
- List unsatisfied = (List)unsatisfiableDependencies.iterator().next();
- assertEquals(1, unsatisfied.size());
- assertEquals(Touchable.class, unsatisfied.get(0));
}
}

@@ -225,26 +222,20 @@

@Test public void testUnsatisfiableDependenciesExceptionGivesVerboseEnoughErrorMessage() {
MutablePicoContainer pico = createPicoContainer(null);
+ pico.setName("parent");
pico.addComponent(ComponentD.class);

try {
pico.getComponent(ComponentD.class);
} catch (AbstractInjector.UnsatisfiableDependenciesException e) {
- Set unsatisfiableDependencies = e.getUnsatisfiableDependencies();
- assertEquals(1, unsatisfiableDependencies.size());
-
- List list = (List)unsatisfiableDependencies.iterator().next();
-
- final List<Class> expectedList = new ArrayList<Class>(2);
- expectedList.add(ComponentE.class);
- expectedList.add(ComponentB.class);
-
- assertEquals(expectedList, list);
+ String msg = e.getMessage().replace("org.picocontainer.tck.AbstractPicoContainerTest$Component", "");
+ assertEquals("D has unsatisfied dependency 'class B' for constructor 'public D(E,B)' from parent:1<|", msg);
}
}

@Test public void testUnsatisfiableDependenciesExceptionGivesUnsatisfiedDependencyTypes() {
- MutablePicoContainer pico = createPicoContainer(null);
+ MutablePicoContainer pico = (MutablePicoContainer) createPicoContainer(null);
+ pico.setName("parent");
// D depends on E and B
pico.addComponent(ComponentD.class);

@@ -253,17 +244,9 @@
try {
pico.getComponent(ComponentD.class);
} catch (AbstractInjector.UnsatisfiableDependenciesException e) {
- Set unsatisfiableDependencies = e.getUnsatisfiableDependencies();
- assertEquals(1, unsatisfiableDependencies.size());
- List list = (List)unsatisfiableDependencies.iterator().next();
- final List<Class> expectedList = new ArrayList<Class>(2);
- expectedList.add(ComponentE.class);
- expectedList.add(ComponentB.class);
- assertEquals(expectedList, list);

- Type unsatisfiedDependencyType = e.getUnsatisfiedDependencyType();
- assertNotNull(unsatisfiedDependencyType);
- assertEquals(ComponentE.class, unsatisfiedDependencyType);
+ String message = e.getMessage().replace("org.picocontainer.tck.AbstractPicoContainerTest$Component", "");
+ assertEquals("D has unsatisfied dependency 'class B' for constructor 'public D(E,B)' from parent:1<|", message);
}

// now register only first dependency
@@ -272,17 +255,8 @@
try {
pico.getComponent(ComponentD.class);
} catch (AbstractInjector.UnsatisfiableDependenciesException e) {
- Set unsatisfiableDependencies = e.getUnsatisfiableDependencies();
- assertEquals(1, unsatisfiableDependencies.size());
- List list = (List)unsatisfiableDependencies.iterator().next();
- final List<Class> expectedList = new ArrayList<Class>(2);
- expectedList.add(ComponentE.class);
- expectedList.add(ComponentB.class);
- assertEquals(expectedList, list);
-
- Type unsatisfiedDependencyType = e.getUnsatisfiedDependencyType();
- assertNotNull(unsatisfiedDependencyType);
- assertEquals(ComponentB.class, unsatisfiedDependencyType);
+ String message = e.getMessage().replace("org.picocontainer.tck.AbstractPicoContainerTest$Component", "");
+ assertEquals("D has unsatisfied dependency 'class B' for constructor 'public D(E,B)' from parent:2<|", message);
}
}

----------

To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email