package net.thucydides.core;
import com.google.common.collect.ImmutableList;
import net.thucydides.core.guice.Injectors;
import net.thucydides.core.model.TestOutcome;
import net.thucydides.core.steps.BaseStepListener;
import net.thucydides.core.steps.Listeners;
import net.thucydides.core.steps.StepEventBus;
import net.thucydides.core.steps.StepListener;
import net.thucydides.core.webdriver.Configuration;
import org.openqa.selenium.WebDriver;
import java.io.File;
import java.util.List;
public class ThucydidesListeners {
private Configuration systemConfiguration;
private BaseStepListener baseStepListener;
private List<StepListener> stepListeners;
public ThucydidesListeners(Configuration systemConfiguration) {
this.systemConfiguration = systemConfiguration;
File outputDirectory = getSystemConfiguration().getOutputDirectory();
baseStepListener = Listeners.getBaseStepListener().withOutputDirectory(outputDirectory);
stepListeners = ImmutableList.of(baseStepListener,
Listeners.getLoggingListener());
//Listeners.getStatisticsListener());
StepEventBus.getEventBus().dropAllListeners();
registerListeners();
}
private void registerListeners() {
StepEventBus.getEventBus().registerListener(baseStepListener);
for (StepListener listener : stepListeners) {
if (listener != null) {
StepEventBus.getEventBus().registerListener(listener);
}
}
}
public ThucydidesListeners withDriver(WebDriver driver) {
baseStepListener.setDriver(driver);
return this;
}
public BaseStepListener getBaseStepListener() {
return baseStepListener;
}
public List<TestOutcome> getResults() {
return ImmutableList.copyOf(baseStepListener.getTestOutcomes());
}
/**
* The configuration manages output directories and driver types.
* They can be defined as system values, or have sensible defaults.
* @return current configuration object
*/
protected Configuration getSystemConfiguration() {
if (systemConfiguration == null) {
systemConfiguration = Injectors.getInjector().getInstance(Configuration.class);
}
return systemConfiguration;
}
}