package de.bechte.junit.runners.context.processing;
import de.bechte.junit.runners.context.HierarchicalContextRunner;
import de.bechte.junit.runners.context.description.Describer;
import de.bechte.junit.runners.context.statements.StatementExecutor;
import org.junit.internal.runners.statements.Fail;
import org.junit.runner.notification.RunNotifier;
import org.junit.runners.model.TestClass;
/**
* The {@link ContextExecutor} is responsible for executing a sub-contexts, represented by the given {@link Class}.
*
* This implementation will create and run a new {@link HierarchicalContextRunner} for the given {@link Class}.
*/
public class ContextExecutor implements ChildExecutor<Class<?>> {
private final Describer<Class<?>> describer;
private StatementExecutor statementExecutor;
public ContextExecutor(final Describer<Class<?>> describer) {
this.describer = describer;
this.statementExecutor = new StatementExecutor();
}
public void run(final TestClass testClass, final Class<?> clazz, final RunNotifier notifier) {
try {
new HierarchicalContextRunner(clazz).run(notifier);
} catch (final Throwable t) {
statementExecutor.execute(new Fail(t), notifier, describer.describe(clazz));
}
}
}