package net.thucydides.junit.listeners;
import net.thucydides.core.Thucydides;
import net.thucydides.core.ThucydidesSystemProperty;
import net.thucydides.core.logging.LoggingLevel;
import net.thucydides.core.model.DataTable;
import net.thucydides.core.model.Story;
import net.thucydides.core.model.TestOutcome;
import net.thucydides.core.statistics.TestCount;
import net.thucydides.core.steps.ExecutedStepDescription;
import net.thucydides.core.steps.StepFailure;
import net.thucydides.core.steps.StepListener;
import net.thucydides.core.util.EnvironmentVariables;
import net.thucydides.junit.finder.TestFinder;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Map;
public class TestCountListener implements StepListener {
private final Logger logger;
private final EnvironmentVariables environmentVariables;
private final TestCount testCount;
protected TestCountListener(EnvironmentVariables environmentVariables, Logger logger, TestCount testCount) {
this.logger = logger;
this.environmentVariables = environmentVariables;
this.testCount = testCount;
logTotalTestCount();
}
public TestCountListener(EnvironmentVariables environmentVariables, TestCount testCount) {
this(environmentVariables, LoggerFactory.getLogger(Thucydides.class), testCount);
}
private void logTotalTestCount() {
String rootPackage = ThucydidesSystemProperty.THUCYDIDES_TEST_ROOT.from(environmentVariables);
if (StringUtils.isNotEmpty(rootPackage)) {
TestFinder finder = TestFinder.thatFinds().allTests().inPackage(rootPackage);
int testMethodCount = finder.countTestMethods();
if (loggingLevelIsAtLeast(LoggingLevel.NORMAL)) {
getLogger().info("PREPARING TO EXECUTE {} TESTS", testMethodCount);
}
}
}
private boolean loggingLevelIsAtLeast(LoggingLevel minimumLoggingLevel) {
return (getLoggingLevel().compareTo(minimumLoggingLevel) >= 0);
}
protected Logger getLogger() {
return logger;
}
private LoggingLevel getLoggingLevel() {
String logLevel = ThucydidesSystemProperty.THUCYDIDES_LOGGING.from(environmentVariables, LoggingLevel.NORMAL.name());
return LoggingLevel.valueOf(logLevel);
}
public void testSuiteStarted(Class<?> storyClass) {
}
public void testSuiteStarted(Story storyOrFeature) {
}
public void testSuiteFinished() {
}
public void testStarted(String description) {
int currentTestCount = testCount.getNextTest();
if (loggingLevelIsAtLeast(LoggingLevel.NORMAL)) {
getLogger().info("TEST NUMBER: {}", currentTestCount);
}
}
public void testFinished(TestOutcome result) {
}
public void testRetried() {
}
public void stepStarted(ExecutedStepDescription description) {
}
public void skippedStepStarted(ExecutedStepDescription description) {
}
public void stepFailed(StepFailure failure) {
}
public void lastStepFailed(StepFailure failure) {
}
public void stepIgnored() {
}
public void stepPending() {
}
public void stepPending(String message) {
}
public void stepFinished() {
}
public void testFailed(TestOutcome testOutcome, Throwable cause) {
}
public void testIgnored() {
}
@Override
public void testSkipped() {
}
@Override
public void testPending() {
}
public void notifyScreenChange() {
}
public void useExamplesFrom(DataTable table) {
}
public void exampleStarted(Map<String, String> data) {
}
public void exampleFinished() {
}
@Override
public void assumptionViolated(String message) {
}
}