From: David S. <ds...@us...> - 2007-07-12 17:08:55
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/runner In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv26134/src/org/junit/experimental/theories/runner Modified Files: TheoryContainerReference.java Added Files: TheoryMethod.java ConcreteFunction.java Function.java Log Message: Re-organize theory packages --- NEW FILE: TheoryMethod.java --- /** * */ package org.junit.experimental.theories.runner; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import org.junit.Assert; import org.junit.Assume.AssumptionViolatedException; import org.junit.experimental.theories.methods.api.Theory; import org.junit.internal.runners.TestClass; import org.junit.internal.runners.TestMethod; public class TheoryMethod extends TestMethod { private final Method fMethod; private List<AssumptionViolatedException> fInvalidParameters= new ArrayList<AssumptionViolatedException>(); public TheoryMethod(Method method, TestClass testClass) { super(method, testClass); fMethod= method; } @Override public void invoke(Object test) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { TheoryContainerReference container= new TheoryContainerReference( test); ConcreteFunction function= new ConcreteFunction(test, fMethod); int runCount= 0; try { runCount+= container.runWithParameters(this, new ArrayList<Object>(), function.signatures()); } catch (Throwable e) { throw new InvocationTargetException(e); } if (runCount == 0) Assert .fail("Never found parameters that satisfied method. Violated assumptions: " + fInvalidParameters); } public boolean nullsOk() { return fMethod.getAnnotation(Theory.class).nullsAccepted(); } public Method getMethod() { return fMethod; } public void addAssumptionFailure(AssumptionViolatedException e) { fInvalidParameters.add(e); } } --- NEW FILE: ConcreteFunction.java --- /** * */ package org.junit.experimental.theories.runner; import java.lang.reflect.Method; public class ConcreteFunction extends Function { protected final Object target; protected final Method method; public ConcreteFunction(Object target, Method method) { this.target = target; this.method = method; } @Override public Object getTarget() { return target; } @Override public Method getMethod() { return method; } @Override public boolean equals(Object obj) { Function function = (Function) obj; return targetIs(function.getTarget()) && method.equals(function.getMethod()); } private boolean targetIs(Object otherTarget) { if (target == null) return otherTarget == null; return target.equals(otherTarget); } @Override public String toString() { return String.format("%s.%s", target, method); } } --- NEW FILE: Function.java --- package org.junit.experimental.theories.runner; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Arrays; import org.junit.experimental.theories.methods.api.ParameterSignature; public abstract class Function { public abstract Method getMethod(); public abstract Object getTarget(); public Object invoke(Object... paramArray) throws Throwable { getMethod().setAccessible(true); Object[] modParams = modifyParameters(paramArray); if (modParams.length != parameterTypes().length) throw new IllegalArgumentException(String.format( "Wrong number of parameters, passing %s to %s", Arrays .asList(modParams), getMethod())); try { return getMethod().invoke(getTarget(), modParams); } catch (InvocationTargetException e) { throw e.getTargetException(); } } public Throwable exceptionThrown(Object... paramArray) { try { invoke(paramArray); } catch(Throwable t) { return t; } return null; } protected Object[] modifyParameters(Object... paramArray) { return paramArray; } public Type[] parameterTypes() { return getMethod().getGenericParameterTypes(); } public Object[] emptyParameterArray() { return new Object[parameterTypes().length]; } public Function curryWith(final Object[] curriedParameters) { return new Function() { @Override public Method getMethod() { return Function.this.getMethod(); } @Override public Object getTarget() { return Function.this.getTarget(); } @Override protected Object[] modifyParameters(Object... paramArray) { ArrayList<Object> list = new ArrayList<Object>(); list.addAll(Arrays.asList(curriedParameters)); list.addAll(Arrays.asList(paramArray)); return list.toArray(); } }; } public ArrayList<ParameterSignature> signatures() { return ParameterSignature.signatures(getMethod()); } } Index: TheoryContainerReference.java =================================================================== RCS file: /cvsroot/junit/junit/src/org/junit/experimental/theories/runner/TheoryContainerReference.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- TheoryContainerReference.java 2 Jul 2007 18:11:15 -0000 1.1 +++ TheoryContainerReference.java 12 Jul 2007 17:08:21 -0000 1.2 @@ -11,10 +11,8 @@ import java.util.List; import org.junit.Assume.AssumptionViolatedException; -import org.junit.experimental.theories.javamodel.api.ConcreteFunction; import org.junit.experimental.theories.methods.api.ParameterSignature; import org.junit.experimental.theories.methods.api.ParameterSupplier; -import org.junit.experimental.theories.runner.api.Theories.TheoryMethod; public class TheoryContainerReference { private final Object container; |