package org.jbehave.examples.core;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.hamcrest.Matchers;
import org.jbehave.core.annotations.AfterScenario;
import org.jbehave.core.annotations.AfterScenario.Outcome;
import org.jbehave.core.annotations.AfterStories;
import org.jbehave.core.annotations.When;
import org.jbehave.core.configuration.Configuration;
import org.jbehave.core.embedder.StoryControls;
import org.jbehave.core.failures.UUIDExceptionWrapper;
import org.jbehave.core.io.StoryFinder;
import org.jbehave.core.steps.CandidateSteps;
import org.jbehave.core.steps.InjectableStepsFactory;
import org.jbehave.core.steps.InstanceStepsFactory;
import org.junit.Assert;
import static org.jbehave.core.io.CodeLocations.codeLocationFromClass;
public class FailureCorrelationStories extends CoreStories {
private List<String> failures = new ArrayList<String>();
public FailureCorrelationStories() {
configuredEmbedder().embedderControls()
.doGenerateViewAfterStories(true)
.doIgnoreFailureInStories(true)
.doIgnoreFailureInView(true)
.useThreads(1).useStoryTimeouts("60");
}
@Override
public Configuration configuration() {
return super.configuration().useStoryControls(new StoryControls().doResetStateBeforeScenario(true));
}
@Override
public InjectableStepsFactory stepsFactory() {
return new InstanceStepsFactory(configuration(), this);
}
@Override
protected List<String> storyPaths() {
return new StoryFinder().findPaths(codeLocationFromClass(this.getClass()), "**/failure_correlation*.story", "");
}
@When("a failure occurs in story %count")
public void whenSomethingHappens(int count){
throw new RuntimeException("BUM! in story "+count);
}
@AfterScenario(uponOutcome = Outcome.FAILURE)
public void afterScenarioFailure(UUIDExceptionWrapper failure) throws Exception {
System.out.println("After Failed Scenario ...");
File file = new File("target/failures/"+failure.getUUID().toString());
file.getParentFile().mkdirs();
file.createNewFile();
failures.add(file.toString());
System.out.println("Failure: "+file);
}
@AfterStories
public void afterStories(){
Assert.assertThat(failures.size(), Matchers.equalTo(2));
}
}