Search in sources :

Example 1 with InjectableStepsFactory

use of org.jbehave.core.steps.InjectableStepsFactory in project jbehave-core by jbehave.

the class EmbedderBehaviour method shouldRunStoriesApplyingFilter.

@SuppressWarnings("unchecked")
@Test
public void shouldRunStoriesApplyingFilter() throws Throwable {
    // Given
    PerformableTree performableTree = mock(PerformableTree.class);
    EmbedderControls embedderControls = new EmbedderControls();
    OutputStream out = new ByteArrayOutputStream();
    EmbedderMonitor monitor = new PrintStreamEmbedderMonitor(new PrintStream(out));
    List<? extends Class<? extends Embeddable>> embeddables = asList(MyStory.class, MyOtherEmbeddable.class);
    Embedder embedder = embedderWith(performableTree, embedderControls, monitor);
    final StoryReporter storyReporter = mock(StoryReporter.class);
    Configuration configuration = new MostUsefulConfiguration() {

        @Override
        public StoryReporter storyReporter(String storyPath) {
            return storyReporter;
        }
    };
    embedder.useConfiguration(configuration);
    InjectableStepsFactory stepsFactory = embedder.stepsFactory();
    StoryPathResolver resolver = configuration.storyPathResolver();
    List<String> storyPaths = new ArrayList<>();
    Map<String, Story> stories = new HashMap<>();
    Meta meta = mock(Meta.class);
    for (Class<? extends Embeddable> embeddable : embeddables) {
        String storyPath = resolver.resolve(embeddable);
        storyPaths.add(storyPath);
        Story story = mockStory(Meta.EMPTY);
        when(story.getMeta()).thenReturn(meta);
        stories.put(storyPath, story);
        when(performableTree.storyOfPath(configuration, storyPath)).thenReturn(story);
        when(story.getPath()).thenReturn(storyPath);
        assertThat(configuration.storyReporter(storyPath), sameInstance(storyReporter));
    }
    // When
    MetaFilter filter = mock(MetaFilter.class);
    when(filter.allow(meta)).thenReturn(false);
    RunContext runContext = new RunContext(configuration, stepsFactory, monitor, filter, new BatchFailures());
    when(performableTree.newRunContext(isA(Configuration.class), isA(InjectableStepsFactory.class), isA(EmbedderMonitor.class), isA(MetaFilter.class), isA(BatchFailures.class))).thenReturn(runContext);
    embedder.runStoriesAsPaths(storyPaths);
    // Then
    for (String storyPath : storyPaths) {
        verify(performableTree, never()).perform(runContext, stories.get(storyPath));
    }
    assertThatReportsViewGenerated(out);
    assertThat(embedder.hasExecutorService(), is(false));
}
Also used : StoryReporter(org.jbehave.core.reporters.StoryReporter) Meta(org.jbehave.core.model.Meta) StoryPathResolver(org.jbehave.core.io.StoryPathResolver) Configuration(org.jbehave.core.configuration.Configuration) MostUsefulConfiguration(org.jbehave.core.configuration.MostUsefulConfiguration) HashMap(java.util.HashMap) MostUsefulConfiguration(org.jbehave.core.configuration.MostUsefulConfiguration) ByteArrayOutputStream(java.io.ByteArrayOutputStream) OutputStream(java.io.OutputStream) ArrayList(java.util.ArrayList) InjectableEmbedder(org.jbehave.core.InjectableEmbedder) UsingEmbedder(org.jbehave.core.annotations.UsingEmbedder) Matchers.containsString(org.hamcrest.Matchers.containsString) JUnitStory(org.jbehave.core.junit.JUnitStory) Story(org.jbehave.core.model.Story) PrintStream(java.io.PrintStream) InjectableStepsFactory(org.jbehave.core.steps.InjectableStepsFactory) ByteArrayOutputStream(java.io.ByteArrayOutputStream) BatchFailures(org.jbehave.core.failures.BatchFailures) RunContext(org.jbehave.core.embedder.PerformableTree.RunContext) Test(org.junit.Test)

Example 2 with InjectableStepsFactory

use of org.jbehave.core.steps.InjectableStepsFactory in project jbehave-core by jbehave.

the class EmbedderBehaviour method shouldNotGenerateViewWhenRunningStoriesAsPathsIfGenerateViewAfterStoriesFlagIsNotSet.

@SuppressWarnings("unchecked")
@Test
public void shouldNotGenerateViewWhenRunningStoriesAsPathsIfGenerateViewAfterStoriesFlagIsNotSet() throws Throwable {
    // Given
    PerformableTree performableTree = mock(PerformableTree.class);
    EmbedderControls embedderControls = new EmbedderControls().doGenerateViewAfterStories(false);
    OutputStream out = new ByteArrayOutputStream();
    EmbedderMonitor monitor = new PrintStreamEmbedderMonitor(new PrintStream(out));
    List<? extends Class<? extends Embeddable>> embeddables = asList(MyStory.class, MyOtherEmbeddable.class);
    Embedder embedder = embedderWith(performableTree, embedderControls, monitor);
    Configuration configuration = embedder.configuration();
    InjectableStepsFactory stepsFactory = embedder.stepsFactory();
    MetaFilter filter = embedder.metaFilter();
    StoryPathResolver resolver = configuration.storyPathResolver();
    List<String> storyPaths = new ArrayList<>();
    Map<String, Story> stories = new HashMap<>();
    for (Class<? extends Embeddable> embeddable : embeddables) {
        String storyPath = resolver.resolve(embeddable);
        storyPaths.add(storyPath);
        Story story = mockStory(Meta.EMPTY);
        stories.put(storyPath, story);
        when(performableTree.storyOfPath(configuration, storyPath)).thenReturn(story);
        when(story.getPath()).thenReturn(storyPath);
    }
    RunContext runContext = new RunContext(configuration, stepsFactory, monitor, filter, new BatchFailures());
    when(performableTree.newRunContext(isA(Configuration.class), isA(InjectableStepsFactory.class), isA(EmbedderMonitor.class), isA(MetaFilter.class), isA(BatchFailures.class))).thenReturn(runContext);
    // When
    embedder.runStoriesAsPaths(storyPaths);
    // Then
    for (String storyPath : storyPaths) {
        verify(performableTree).perform(runContext, stories.get(storyPath));
        assertThat(out.toString(), containsString("Running story " + storyPath));
    }
    assertThat(out.toString(), not(containsString("Generating stories view")));
    assertThat(out.toString(), not(containsString("Stories view generated")));
}
Also used : PrintStream(java.io.PrintStream) InjectableStepsFactory(org.jbehave.core.steps.InjectableStepsFactory) StoryPathResolver(org.jbehave.core.io.StoryPathResolver) Configuration(org.jbehave.core.configuration.Configuration) MostUsefulConfiguration(org.jbehave.core.configuration.MostUsefulConfiguration) HashMap(java.util.HashMap) ByteArrayOutputStream(java.io.ByteArrayOutputStream) OutputStream(java.io.OutputStream) ArrayList(java.util.ArrayList) InjectableEmbedder(org.jbehave.core.InjectableEmbedder) UsingEmbedder(org.jbehave.core.annotations.UsingEmbedder) ByteArrayOutputStream(java.io.ByteArrayOutputStream) Matchers.containsString(org.hamcrest.Matchers.containsString) BatchFailures(org.jbehave.core.failures.BatchFailures) RunContext(org.jbehave.core.embedder.PerformableTree.RunContext) JUnitStory(org.jbehave.core.junit.JUnitStory) Story(org.jbehave.core.model.Story) Test(org.junit.Test)

Example 3 with InjectableStepsFactory

use of org.jbehave.core.steps.InjectableStepsFactory in project jbehave-core by jbehave.

the class EmbedderBehaviour method shouldNotThrowExceptionUponFailingStoriesAsPathsIfIgnoreFailureInStoriesFlagIsSet.

@SuppressWarnings("unchecked")
@Test
public void shouldNotThrowExceptionUponFailingStoriesAsPathsIfIgnoreFailureInStoriesFlagIsSet() throws Throwable {
    // Given
    PerformableTree performableTree = mock(PerformableTree.class);
    EmbedderControls embedderControls = new EmbedderControls().doIgnoreFailureInStories(true);
    OutputStream out = new ByteArrayOutputStream();
    EmbedderMonitor monitor = new PrintStreamEmbedderMonitor(new PrintStream(out));
    List<? extends Class<? extends Embeddable>> embeddables = asList(MyStory.class, MyOtherEmbeddable.class);
    Embedder embedder = embedderWith(performableTree, embedderControls, monitor);
    Configuration configuration = embedder.configuration();
    InjectableStepsFactory stepsFactory = embedder.stepsFactory();
    MetaFilter filter = embedder.metaFilter();
    StoryPathResolver resolver = configuration.storyPathResolver();
    List<String> storyPaths = new ArrayList<>();
    Map<String, Story> stories = new HashMap<>();
    for (Class<? extends Embeddable> embeddable : embeddables) {
        String storyPath = resolver.resolve(embeddable);
        storyPaths.add(storyPath);
        Story story = mockStory(Meta.EMPTY);
        stories.put(storyPath, story);
        when(performableTree.storyOfPath(configuration, storyPath)).thenReturn(story);
        when(story.getPath()).thenReturn(storyPath);
    }
    RunContext runContext = new RunContext(configuration, stepsFactory, monitor, filter, new BatchFailures());
    when(performableTree.newRunContext(isA(Configuration.class), isA(InjectableStepsFactory.class), isA(EmbedderMonitor.class), isA(MetaFilter.class), isA(BatchFailures.class))).thenReturn(runContext);
    for (String storyPath : storyPaths) {
        doThrow(new RuntimeException(storyPath + " failed")).when(performableTree).perform(runContext, stories.get(storyPath));
    }
    // When
    embedder.runStoriesAsPaths(storyPaths);
    TimeUnit.SECONDS.sleep(2);
    // Then
    for (String storyPath : storyPaths) {
        assertThat(out.toString(), containsString("Running story " + storyPath));
        assertThat(out.toString(), containsString("Failed to run story " + storyPath));
    }
}
Also used : PrintStream(java.io.PrintStream) InjectableStepsFactory(org.jbehave.core.steps.InjectableStepsFactory) StoryPathResolver(org.jbehave.core.io.StoryPathResolver) Configuration(org.jbehave.core.configuration.Configuration) MostUsefulConfiguration(org.jbehave.core.configuration.MostUsefulConfiguration) HashMap(java.util.HashMap) ByteArrayOutputStream(java.io.ByteArrayOutputStream) OutputStream(java.io.OutputStream) ArrayList(java.util.ArrayList) InjectableEmbedder(org.jbehave.core.InjectableEmbedder) UsingEmbedder(org.jbehave.core.annotations.UsingEmbedder) ByteArrayOutputStream(java.io.ByteArrayOutputStream) Matchers.containsString(org.hamcrest.Matchers.containsString) BatchFailures(org.jbehave.core.failures.BatchFailures) RunContext(org.jbehave.core.embedder.PerformableTree.RunContext) JUnitStory(org.jbehave.core.junit.JUnitStory) Story(org.jbehave.core.model.Story) Test(org.junit.Test)

Example 4 with InjectableStepsFactory

use of org.jbehave.core.steps.InjectableStepsFactory in project jbehave-core by jbehave.

the class AnnotationBuilder method buildStepsFactory.

/**
 * Builds the {@link InjectableStepsFactory} using annotation
 * {@link UsingSteps} found in the annotated object instance and the
 * configuration provided
 *
 * @param configuration the Configuration
 * @return A {@link InjectableStepsFactory}
 */
public InjectableStepsFactory buildStepsFactory(Configuration configuration) {
    List<Object> stepsInstances = new ArrayList<>();
    InjectableStepsFactory factory = null;
    if (finder.isAnnotationPresent(UsingSteps.class)) {
        List<Class<Object>> stepsClasses = finder.getAnnotatedClasses(UsingSteps.class, Object.class, "instances");
        if (!stepsClasses.isEmpty()) {
            for (Class<Object> stepsClass : stepsClasses) {
                stepsInstances.add(instanceOf(Object.class, stepsClass));
            }
            factory = new InstanceStepsFactory(configuration, stepsInstances);
        }
        List<String> packages = finder.getAnnotatedValues(UsingSteps.class, String.class, "packages");
        if (!packages.isEmpty()) {
            String matchingNames = finder.getAnnotatedValue(UsingSteps.class, String.class, "matchingNames");
            String notMatchingNames = finder.getAnnotatedValue(UsingSteps.class, String.class, "notMatchingNames");
            factory = new ScanningStepsFactory(configuration, packages.toArray(new String[packages.size()])).matchingNames(matchingNames).notMatchingNames(notMatchingNames);
        }
    } else {
        annotationMonitor.annotationNotFound(UsingSteps.class, annotatedClass);
    }
    if (factory == null) {
        factory = new InstanceStepsFactory(configuration);
    }
    return factory;
}
Also used : InjectableStepsFactory(org.jbehave.core.steps.InjectableStepsFactory) InstanceStepsFactory(org.jbehave.core.steps.InstanceStepsFactory) ArrayList(java.util.ArrayList) ScanningStepsFactory(org.jbehave.core.steps.ScanningStepsFactory)

Example 5 with InjectableStepsFactory

use of org.jbehave.core.steps.InjectableStepsFactory in project serenity-jbehave by serenity-bdd.

the class SerenityReportingRunner method buildCandidateSteps.

private List<CandidateSteps> buildCandidateSteps() {
    List<CandidateSteps> candidateSteps;
    InjectableStepsFactory stepsFactory = configurableEmbedder.stepsFactory();
    if (stepsFactory != null) {
        candidateSteps = stepsFactory.createCandidateSteps();
    } else {
        Embedder embedder = getConfiguredEmbedder();
        candidateSteps = embedder.candidateSteps();
        if (candidateSteps == null || candidateSteps.isEmpty()) {
            candidateSteps = embedder.stepsFactory().createCandidateSteps();
        }
    }
    return candidateSteps;
}
Also used : InjectableStepsFactory(org.jbehave.core.steps.InjectableStepsFactory) CandidateSteps(org.jbehave.core.steps.CandidateSteps) ExtendedEmbedder(net.serenitybdd.jbehave.embedders.ExtendedEmbedder) Embedder(org.jbehave.core.embedder.Embedder) ConfigurableEmbedder(org.jbehave.core.ConfigurableEmbedder)

Aggregations

InjectableStepsFactory (org.jbehave.core.steps.InjectableStepsFactory)11 MostUsefulConfiguration (org.jbehave.core.configuration.MostUsefulConfiguration)9 Test (org.junit.Test)9 ArrayList (java.util.ArrayList)8 ByteArrayOutputStream (java.io.ByteArrayOutputStream)7 OutputStream (java.io.OutputStream)7 PrintStream (java.io.PrintStream)7 HashMap (java.util.HashMap)7 Matchers.containsString (org.hamcrest.Matchers.containsString)7 InjectableEmbedder (org.jbehave.core.InjectableEmbedder)7 UsingEmbedder (org.jbehave.core.annotations.UsingEmbedder)7 Configuration (org.jbehave.core.configuration.Configuration)7 RunContext (org.jbehave.core.embedder.PerformableTree.RunContext)7 BatchFailures (org.jbehave.core.failures.BatchFailures)7 StoryPathResolver (org.jbehave.core.io.StoryPathResolver)7 JUnitStory (org.jbehave.core.junit.JUnitStory)7 Story (org.jbehave.core.model.Story)7 CandidateSteps (org.jbehave.core.steps.CandidateSteps)3 StoryReporter (org.jbehave.core.reporters.StoryReporter)2 ExtendedEmbedder (net.serenitybdd.jbehave.embedders.ExtendedEmbedder)1