package net.thucydides.junit.listeners;
import com.google.inject.Key;
import net.thucydides.core.model.DataTable;
import net.thucydides.core.pages.Pages;
import net.thucydides.core.steps.BaseStepListener;
import net.thucydides.core.steps.Listeners;
import net.thucydides.core.steps.StepListener;
import net.thucydides.junit.guice.JUnitInjectors;
import net.thucydides.junit.runners.ParameterizedJUnitStepListener;
import java.io.File;
public class JUnitStepListenerBuilder {
private final File outputDirectory;
private final Pages pageFactory;
private final int parameterSetNumber;
private final DataTable parametersTable;
private final Class<?> testClass;
public JUnitStepListenerBuilder(File outputDirectory) {
this(outputDirectory, null, -1, null);
}
public JUnitStepListenerBuilder(File outputDirectory,
Pages pageFactory) {
this(outputDirectory, pageFactory, -1, null);
}
public JUnitStepListenerBuilder(File outputDirectory,
Pages pageFactory,
int parameterSetNumber) {
this(outputDirectory, pageFactory, parameterSetNumber, null);
}
public JUnitStepListenerBuilder(File outputDirectory,
Pages pageFactory,
int parameterSetNumber,
DataTable parametersTable) {
this(outputDirectory, pageFactory, parameterSetNumber, parametersTable, null);
}
public JUnitStepListenerBuilder(File outputDirectory,
Pages pageFactory,
int parameterSetNumber,
DataTable parametersTable,
Class<?> testClass) {
this.outputDirectory = outputDirectory;
this.pageFactory = pageFactory;
this.parameterSetNumber = parameterSetNumber;
this.parametersTable = parametersTable;
this.testClass = testClass;
}
public JUnitStepListenerBuilder and() {
return this;
}
public JUnitStepListenerBuilder withPageFactory(Pages pageFactory) {
return new JUnitStepListenerBuilder(outputDirectory, pageFactory);
}
public JUnitStepListenerBuilder withParameterSetNumber(int parameterSetNumber) {
return new JUnitStepListenerBuilder(outputDirectory, pageFactory, parameterSetNumber);
}
public JUnitStepListenerBuilder withParametersTable(DataTable parametersTable) {
return new JUnitStepListenerBuilder(outputDirectory, pageFactory, parameterSetNumber, parametersTable);
}
public JUnitStepListenerBuilder withTestClass(Class<?> testClass) {
return new JUnitStepListenerBuilder(outputDirectory, pageFactory, parameterSetNumber, parametersTable, testClass);
}
public JUnitStepListener build() {
if (parameterSetNumber >= 0) {
return newParameterizedJUnitStepListener();
} else {
return newStandardJunitStepListener();
}
}
private BaseStepListener buildBaseStepListener() {
if (pageFactory != null) {
return Listeners.getBaseStepListener()
.withPages(pageFactory)
.and().withOutputDirectory(outputDirectory);
} else {
return Listeners.getBaseStepListener()
.withOutputDirectory(outputDirectory);
}
}
private JUnitStepListener newParameterizedJUnitStepListener() {
return new ParameterizedJUnitStepListener(parameterSetNumber,
parametersTable,
testClass,
buildBaseStepListener(),
Listeners.getLoggingListener(),
newTestCountListener());
// Listeners.getStatisticsListener());
}
private StepListener newTestCountListener() {
return JUnitInjectors.getInjector().getInstance(Key.get(StepListener.class, TestCounter.class));
}
private JUnitStepListener newStandardJunitStepListener() {
return new JUnitStepListener(testClass,
buildBaseStepListener(),
Listeners.getLoggingListener(),
newTestCountListener());
// Listeners.getStatisticsListener());
}
}