package de.bechte.junit.runners.context.description;
import de.bechte.junit.runners.context.processing.ChildResolver;
import de.bechte.junit.runners.model.TestClassPool;
import org.junit.runner.Description;
import org.junit.runners.model.TestClass;
/**
* The {@link SuiteDescriber} is responsible for creating the {@link Description} for a test suite. A test suite can be
* a single test or a test suite containing several test classes. This class only handles classes and subclasses found
* by the given {@link ChildResolver}.
*/
public class SuiteDescriber implements Describer<Class<?>> {
private final ChildResolver<Class<?>> childResolver;
public SuiteDescriber(final ChildResolver<Class<?>> childResolver) {
this.childResolver = childResolver;
}
@Override
public Description describe(final Class<?> suiteClass) {
if (suiteClass == null)
throw new IllegalArgumentException("Class must not be null!");
final Description description = Description.createSuiteDescription(suiteClass);
final TestClass testClass = TestClassPool.forClass(suiteClass);
addChildren(description, testClass);
return description;
}
protected void addChildren(final Description description, final TestClass testClass) {
for (final Class<?> child : childResolver.getChildren(testClass))
description.addChild(describe(child));
}
}