public List<String> findPaths() { if (!finder.isAnnotationPresent(UsingPaths.class)) { return new ArrayList<String>(); } String searchIn = finder.getAnnotatedValue(UsingPaths.class, String.class, "searchIn"); List<String> includes = finder.getAnnotatedValues(UsingPaths.class, String.class, "includes"); List<String> excludes = finder.getAnnotatedValues(UsingPaths.class, String.class, "excludes"); return new StoryFinder().findPaths(searchIn, includes, excludes); }
protected ParameterConverters parameterConverters(AnnotationFinder annotationFinder) { List<ParameterConverter> converters = new ArrayList<ParameterConverter>(); for (Class<ParameterConverter> converterClass : annotationFinder.getAnnotatedClasses( Configure.class, ParameterConverter.class, "parameterConverters")) { converters.add(instanceOf(ParameterConverter.class, converterClass)); } return new ParameterConverters().addConverters(converters); }
/** * Builds CandidateSteps using annotation {@link UsingSteps} found in the annotated object * instance and the configuration provided * * @param configuration the Configuration * @return A List of CandidateSteps instances */ public List<CandidateSteps> buildCandidateSteps(Configuration configuration) { List<Object> stepsInstances = new ArrayList<Object>(); InjectableStepsFactory factory = null; if (finder.isAnnotationPresent(UsingSteps.class)) { List<Class<Object>> stepsClasses = finder.getAnnotatedClasses(UsingSteps.class, Object.class, "instances"); for (Class<Object> stepsClass : stepsClasses) { stepsInstances.add(instanceOf(Object.class, stepsClass)); } factory = new InstanceStepsFactory(configuration, stepsInstances); } else { annotationMonitor.annotationNotFound(UsingSteps.class, annotatedClass); } if (factory == null) { factory = new InstanceStepsFactory(configuration); } return factory.createCandidateSteps(); }
@SuppressWarnings("unchecked") public Embedder buildEmbedder() { if (!finder.isAnnotationPresent(UsingEmbedder.class)) { return new Embedder(); } boolean batch = control(finder, "batch"); boolean skip = control(finder, "skip"); boolean generateViewAfterStories = control(finder, "generateViewAfterStories"); boolean ignoreFailureInStories = control(finder, "ignoreFailureInStories"); boolean ignoreFailureInView = control(finder, "ignoreFailureInView"); long storyTimeoutInSecs = finder.getAnnotatedValue(UsingEmbedder.class, Long.class, "storyTimeoutInSecs"); int threads = finder.getAnnotatedValue(UsingEmbedder.class, Integer.class, "threads"); Configuration configuration = buildConfiguration(); List<CandidateSteps> candidateSteps = buildCandidateSteps(configuration); Embedder embedder = instanceOf( Embedder.class, (Class<? extends Embedder>) finder.getAnnotatedValue(UsingEmbedder.class, Class.class, "embedder")); embedder .embedderControls() .doBatch(batch) .doSkip(skip) .doGenerateViewAfterStories(generateViewAfterStories) .doIgnoreFailureInStories(ignoreFailureInStories) .doIgnoreFailureInView(ignoreFailureInView) .useStoryTimeoutInSecs(storyTimeoutInSecs) .useThreads(threads); embedder.useConfiguration(configuration); embedder.useCandidateSteps(candidateSteps); List<String> metaFilters = finder.getAnnotatedValues(UsingEmbedder.class, String.class, "metaFilters"); if (!metaFilters.isEmpty()) { embedder.useMetaFilters(metaFilters); } return embedder; }
/** * Builds a Configuration instance based on annotation {@link Configure} found in the annotated * object instance * * @return A Configuration instance */ public Configuration buildConfiguration() throws AnnotationRequired { Configuration configuration = new MostUsefulConfiguration(); if (!finder.isAnnotationPresent(Configure.class)) { // not using annotation configuration, default to most useful // configuration return configuration; } configuration.useKeywords(configurationElement(finder, "keywords", Keywords.class)); configuration.useFailureStrategy( configurationElement(finder, "failureStrategy", FailureStrategy.class)); configuration.usePendingStepStrategy( configurationElement(finder, "pendingStepStrategy", PendingStepStrategy.class)); configuration.useParanamer(configurationElement(finder, "paranamer", Paranamer.class)); configuration.useStoryControls( configurationElement(finder, "storyControls", StoryControls.class)); configuration.useStepCollector( configurationElement(finder, "stepCollector", StepCollector.class)); configuration.useStepdocReporter( configurationElement(finder, "stepdocReporter", StepdocReporter.class)); configuration.useStepFinder(configurationElement(finder, "stepFinder", StepFinder.class)); configuration.useStepMonitor(configurationElement(finder, "stepMonitor", StepMonitor.class)); configuration.useStepPatternParser( configurationElement(finder, "stepPatternParser", StepPatternParser.class)); configuration.useStoryLoader(configurationElement(finder, "storyLoader", StoryLoader.class)); configuration.useStoryParser(configurationElement(finder, "storyParser", StoryParser.class)); configuration.useStoryPathResolver( configurationElement(finder, "storyPathResolver", StoryPathResolver.class)); configuration.useDefaultStoryReporter( configurationElement(finder, "defaultStoryReporter", StoryReporter.class)); configuration.useStoryReporterBuilder( configurationElement(finder, "storyReporterBuilder", StoryReporterBuilder.class)); configuration.useViewGenerator( configurationElement(finder, "viewGenerator", ViewGenerator.class)); configuration.useParameterConverters(parameterConverters(finder)); configuration.usePathCalculator( configurationElement(finder, "pathCalculator", PathCalculator.class)); return configuration; }
@SuppressWarnings("unchecked") private <T> Class<T> elementImplementation(AnnotationFinder finder, String name) { return finder.getAnnotatedValue(Configure.class, Class.class, name); }
private boolean control(AnnotationFinder finder, String name) { return finder.getAnnotatedValue(UsingEmbedder.class, Boolean.class, name); }