package eu.swiec.bearballin.tools;
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;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import eu.swiec.bearballin.runtime.graphs.MedGraph;
import org.jbehave.core.configuration.Configuration;
import org.jbehave.core.configuration.Keywords;
import org.jbehave.core.configuration.MostUsefulConfiguration;
import org.jbehave.core.embedder.Embedder;
import org.jbehave.core.i18n.LocalizedKeywords;
import org.jbehave.core.io.CodeLocations;
import org.jbehave.core.io.StoryFinder;
import org.jbehave.core.junit.JUnitStories;
import org.jbehave.core.parsers.RegexStoryParser;
import org.jbehave.core.reporters.FilePrintStreamFactory.ResolveToSimpleName;
import org.jbehave.core.reporters.StoryReporterBuilder;
import org.jbehave.core.steps.InjectableStepsFactory;
import org.jbehave.core.steps.InstanceStepsFactory;
import org.jbehave.core.steps.MarkUnmatchedStepsAsPending;
import org.jbehave.core.steps.ParameterConverters;
import org.junit.Test;
public class StoryRun extends JUnitStories {
@Override
@Test
public void run() throws Throwable {
Embedder embedder = configuredEmbedder();
try {
embedder.runStoriesAsPaths(storyPaths());
} finally {
embedder.generateCrossReference();
}
}
@Override
public Configuration configuration() {
Keywords keywords = new LocalizedKeywords(new Locale("en"));
return new MostUsefulConfiguration()
.useKeywords(keywords)
.useStepCollector(new MarkUnmatchedStepsAsPending(keywords))
.useStoryParser(new RegexStoryParser(keywords))
.useStoryReporterBuilder(
new StoryReporterBuilder()
.withPathResolver(new ResolveToSimpleName())
.withDefaultFormats()
.withFormats(CONSOLE, TXT, HTML, XML)
.withFailureTrace(true)
.withKeywords(keywords))
.useParameterConverters(new ParameterConverters());
}
@Override
public InjectableStepsFactory stepsFactory() {
List<Object> stepsList = new ArrayList<Object>(10);
stepsList.addAll(new MedGraph().getStepsInstances());
return new InstanceStepsFactory(configuration(), stepsList);
//put classes with step definitions here (with methods annotated @Given,@When,@Then... )
}
private String readProperty(String propertyName, String exceptionMessage) throws RuntimeException {
String readedProperty;
readedProperty = System.getProperty(propertyName);
if (readedProperty == null || readedProperty.isEmpty()) {
System.out.println("ERROR: " + exceptionMessage);
throw new RuntimeException(exceptionMessage);
}
return readedProperty;
}
@Override
protected List<String> storyPaths() {
List<String> stories;
String testName;
String relativeStoryPath;
relativeStoryPath = readProperty(Main.STORIESPATH, Main.STORIESPATH + " property has not been set");
testName = readProperty("TESTNAME", "TESTNAME property has not been set");
stories = new StoryFinder().findPaths(CodeLocations.codeLocationFromPath(relativeStoryPath).getFile(), asList(testName), null);
System.out.println("CodelocationFromArgu:" + CodeLocations.codeLocationFromPath("target/themis-slave-1.4-resources/").getFile());
System.out.println("CodelocationFromProp:" + CodeLocations.codeLocationFromPath(relativeStoryPath).getFile());
System.out.println("Stories:" + stories);
if (stories.isEmpty()) {
String errMsg = "No stories found, for specified arguments\nTESTNAME:" + testName + "\nSTORYBASE:" + relativeStoryPath;
System.out.println(errMsg);
throw new RuntimeException(errMsg);
}
return stories;
}
public static List<String> asList(String string) {
List<String> list = new ArrayList<String>(1);
list.add(string);
return list;
}
}