package cucumber.contrib.grammar.step; import com.google.common.collect.Lists; import cucumber.contrib.junit.ResourceLoaderWrapper; import cucumber.contrib.util.Filter; import cucumber.contrib.util.Filters; import cucumber.runtime.FeatureBuilder; import cucumber.runtime.io.MultiLoader; import cucumber.runtime.io.ResourceLoader; import cucumber.runtime.model.CucumberFeature; import gherkin.formatter.Formatter; import java.io.File; import java.io.InputStream; import java.util.List; /** * @author <a href="http://twitter.com/aloyer">@aloyer</a> */ public class FeatureParser { private List<CucumberFeature> cucumberFeatures; private Formatter formatter; private String suffix = ""; // private List<String> featurePaths = Lists.newArrayList(); private List<Object> filters = Lists.newArrayList(); private CucumberConverter converter = new CucumberConverter(); public FeatureParser() { cucumberFeatures = Lists.newArrayList(); formatter = new FeatureBuilder(cucumberFeatures); } public FeatureParser usingSourceDirectory(File sourceTree) { featurePaths.add(sourceTree.getAbsolutePath()); return this; } public Features process() { ResourceLoader resourceLoader = createResourceLoader(getClass()); Features features = new Features(); for (CucumberFeature cucumberFeature : CucumberFeature.load(resourceLoader, featurePaths, filters)) { features.add(converter.convert(cucumberFeature)); } return features; } protected ResourceLoader createResourceLoader(Class<?> clazz) { ClassLoader classLoader = clazz.getClassLoader(); MultiLoader loader = new MultiLoader(classLoader); List<Filter<InputStream>> filters = instanciateFilters(clazz); if (filters.isEmpty()) return loader; else return new ResourceLoaderWrapper(loader, Filters.chain(filters)); } private List<Filter<InputStream>> instanciateFilters(Class<?> clazz) { return Lists.newArrayList(); } }