| package junitparams.internal; |
| |
| import java.lang.reflect.Method; |
| import junitparams.JUnitParamsRunner; |
| import org.junit.internal.AssumptionViolatedException; |
| import org.junit.internal.runners.model.EachTestNotifier; |
| import org.junit.runner.Description; |
| import org.junit.runner.notification.RunNotifier; |
| import org.junit.runners.model.FrameworkMethod; |
| import org.junit.runners.model.Statement; |
| |
| /** |
| * Base for {@link FrameworkMethod} classes that provide a {@link Statement} for invoking. |
| */ |
| public abstract class InvokableFrameworkMethod extends DescribableFrameworkMethod { |
| |
| private final Description description; |
| |
| InvokableFrameworkMethod(Method method, Description description) { |
| super(method); |
| this.description = description; |
| } |
| |
| @Override |
| public Description getDescription() { |
| return description; |
| } |
| |
| /** |
| * Create a {@link Statement} that when called will invoke the method. |
| * |
| * <p>This is usually called from the |
| * {@link JUnitParamsRunner#methodInvoker(FrameworkMethod, Object)} method via the |
| * {@link MethodBlockSupplier} which is usually called from within the |
| * {@link #run(MethodBlockSupplier, RunNotifier)} method. |
| * |
| * @param test |
| * the object on which the method will be invoked. |
| * @return the {@link Statement}. |
| */ |
| public abstract Statement getInvokeStatement(Object test); |
| |
| void runMethodInvoker(RunNotifier notifier, Statement methodInvoker, |
| Description methodWithParams) { |
| EachTestNotifier eachNotifier = new EachTestNotifier(notifier, methodWithParams); |
| eachNotifier.fireTestStarted(); |
| try { |
| methodInvoker.evaluate(); |
| } catch (AssumptionViolatedException e) { |
| eachNotifier.addFailedAssumption(e); |
| } catch (Throwable e) { |
| eachNotifier.addFailure(e); |
| } finally { |
| eachNotifier.fireTestFinished(); |
| } |
| } |
| |
| public abstract void run(MethodBlockSupplier supplier, RunNotifier notifier); |
| } |