package detective.core.filter.console;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import detective.core.Scenario;
import detective.core.Story;
import detective.core.exception.StoryFailException;
import detective.core.filter.RunnerFilter;
import detective.core.filter.RunnerFilterChain;
public class LogToConsoleFilter implements RunnerFilter<Story> {
private static final Logger logger = LoggerFactory.getLogger(LogToConsoleFilter.class);
@Override
public void doFilter(Story story, RunnerFilterChain<Story> chain) {
try {
boolean storyFailed = false;
Throwable error = null;
for (Scenario s : story.getScenarios()){
if (s.getIgnored()){
logger.info("Scenario [" + s.getTitle() + "] ignored.");
} else if (s.getSuccessed()){
logger.info("Scenario [" + s.getTitle() + "] succeed.");
}
else if (!s.getSuccessed()){
storyFailed = true;
error = s.getError();
logger.error(error.getMessage(), error);
}
}
if (storyFailed && error != null)
throw error;
else
logger.info("Story [" + story.getTitle() + "] ran successfully.");
} catch (Throwable e){
logger.error("Story [" + story.getTitle() + "] error." + e.getMessage(), e);
if (e instanceof StoryFailException)
throw (StoryFailException)e;
else
throw new StoryFailException(story, e.getMessage(), e);
}
chain.doFilter(story);
}
}