package org.jbehave.examples.core.annotations;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Properties;
import org.jbehave.core.InjectableEmbedder;
import org.jbehave.core.annotations.Configure;
import org.jbehave.core.annotations.UsingEmbedder;
import org.jbehave.core.annotations.UsingSteps;
import org.jbehave.core.embedder.Embedder;
import org.jbehave.core.embedder.StoryControls;
import org.jbehave.core.io.LoadFromClasspath;
import org.jbehave.core.io.StoryFinder;
import org.jbehave.core.junit.AnnotatedEmbedderRunner;
import org.jbehave.core.parsers.RegexPrefixCapturingPatternParser;
import org.jbehave.core.reporters.StoryReporterBuilder;
import org.jbehave.core.steps.ParameterConverters.DateConverter;
import org.jbehave.examples.core.annotations.CoreAnnotatedEmbedder.MyDateConverter;
import org.jbehave.examples.core.annotations.CoreAnnotatedEmbedder.MyEmbedder;
import org.jbehave.examples.core.annotations.CoreAnnotatedEmbedder.MyRegexPrefixCapturingPatternParser;
import org.jbehave.examples.core.annotations.CoreAnnotatedEmbedder.MyReportBuilder;
import org.jbehave.examples.core.annotations.CoreAnnotatedEmbedder.MyStoryControls;
import org.jbehave.examples.core.annotations.CoreAnnotatedEmbedder.MyStoryLoader;
import org.jbehave.examples.core.steps.AndSteps;
import org.jbehave.examples.core.steps.BeforeAfterSteps;
import org.jbehave.examples.core.steps.CalendarSteps;
import org.jbehave.examples.core.steps.PriorityMatchingSteps;
import org.jbehave.examples.core.steps.SandpitSteps;
import org.jbehave.examples.core.steps.SearchSteps;
import org.jbehave.examples.core.steps.TraderSteps;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.jbehave.core.io.CodeLocations.codeLocationFromPath;
import static org.jbehave.core.reporters.Format.CONSOLE;
import static org.jbehave.core.reporters.Format.HTML;
import static org.jbehave.core.reporters.Format.TXT;
import static org.jbehave.core.reporters.Format.XML;
@RunWith(AnnotatedEmbedderRunner.class)
@Configure(stepPatternParser = MyRegexPrefixCapturingPatternParser.class, storyControls = MyStoryControls.class, storyLoader = MyStoryLoader.class, storyReporterBuilder = MyReportBuilder.class, parameterConverters = { MyDateConverter.class })
@UsingEmbedder(embedder = MyEmbedder.class, generateViewAfterStories = true, ignoreFailureInStories = true, ignoreFailureInView = true, verboseFailures = true, verboseFiltering = true, storyTimeouts = "100", threads = 1, metaFilters = "-skip")
@UsingSteps(instances = { TraderSteps.class, BeforeAfterSteps.class, AndSteps.class, CalendarSteps.class,
PriorityMatchingSteps.class, SandpitSteps.class, SearchSteps.class })
public class CoreAnnotatedEmbedder extends InjectableEmbedder {
@Test
public void run() {
List<String> storyPaths = new StoryFinder().findPaths(codeLocationFromPath("../core/src/main/java"),
"**/*.story", "**/examples_table_loaded*");
injectedEmbedder().runStoriesAsPaths(storyPaths);
}
public static class MyEmbedder extends Embedder {
public MyEmbedder() {
Properties properties = new Properties();
properties.setProperty("project.dir", System.getProperty("project.dir", "N/A"));
useSystemProperties(properties);
}
}
public static class MyStoryControls extends StoryControls {
public MyStoryControls() {
doDryRun(false);
doSkipScenariosAfterFailure(false);
}
}
public static class MyStoryLoader extends LoadFromClasspath {
public MyStoryLoader() {
super(CoreAnnotatedEmbedder.class.getClassLoader());
}
}
public static class MyReportBuilder extends StoryReporterBuilder {
public MyReportBuilder() {
this.withFormats(CONSOLE, TXT, HTML, XML).withDefaultFormats();
}
}
public static class MyRegexPrefixCapturingPatternParser extends RegexPrefixCapturingPatternParser {
public MyRegexPrefixCapturingPatternParser() {
super("%");
}
}
public static class MyDateConverter extends DateConverter {
public MyDateConverter() {
super(new SimpleDateFormat("yyyy-MM-dd"));
}
}
}