package org.jbehave.core.configuration.groovy; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.instanceOf; import java.util.List; import org.jbehave.core.annotations.Configure; import org.jbehave.core.annotations.UsingEmbedder; import org.jbehave.core.annotations.groovy.UsingGroovy; import org.jbehave.core.configuration.Configuration; import org.jbehave.core.configuration.MostUsefulConfiguration; import org.jbehave.core.io.CodeLocations; import org.jbehave.core.steps.CandidateSteps; import org.jbehave.core.steps.Steps; import org.junit.Test; public class GroovyAnnotationBuilderBehaviour { @Test public void shouldBuildConfigurationFromAnnotations() { GroovyAnnotationBuilder builder = new GroovyAnnotationBuilder(AnnotatedUsingGroovy.class); assertThatConfigurationIs(builder.buildConfiguration(), new MostUsefulConfiguration()); } @Test public void shouldBuildDefaultConfigurationIfAnnotationOrAnnotatedValuesNotPresent() { GroovyAnnotationBuilder builderNotAnnotated = new GroovyAnnotationBuilder(NotAnnotated.class); assertThatConfigurationIs(builderNotAnnotated.buildConfiguration(), new MostUsefulConfiguration()); } private void assertThatConfigurationIs(Configuration builtConfiguration, Configuration defaultConfiguration) { assertThat(builtConfiguration.failureStrategy(), instanceOf(defaultConfiguration.failureStrategy().getClass())); assertThat(builtConfiguration.storyLoader(), instanceOf(defaultConfiguration.storyLoader().getClass())); assertThat(builtConfiguration.stepPatternParser(), instanceOf(defaultConfiguration.stepPatternParser() .getClass())); assertThat(builtConfiguration.storyReporterBuilder().formats(), equalTo(defaultConfiguration .storyReporterBuilder().formats())); assertThat(builtConfiguration.storyReporterBuilder().outputDirectory(), equalTo(defaultConfiguration .storyReporterBuilder().outputDirectory())); assertThat(builtConfiguration.storyReporterBuilder().viewResources(), equalTo(defaultConfiguration .storyReporterBuilder().viewResources())); assertThat(builtConfiguration.storyReporterBuilder().reportFailureTrace(), equalTo(defaultConfiguration .storyReporterBuilder().reportFailureTrace())); } @Test public void shouldBuildCandidateStepsFromAnnotationsUsingGroovy() { GroovyAnnotationBuilder builderAnnotated = new GroovyAnnotationBuilder(AnnotatedUsingGroovy.class); Configuration configuration = builderAnnotated.buildConfiguration(); assertThatStepsInstancesAre(builderAnnotated.buildCandidateSteps(configuration), "FooSteps"); } private void assertThatStepsInstancesAre(List<CandidateSteps> candidateSteps, String... stepsNames) { assertThat(candidateSteps.size(), equalTo(stepsNames.length)); for (int i = 0; i < stepsNames.length; i++) { assertThat(((Steps) candidateSteps.get(i)).instance().getClass().getSimpleName(), equalTo(stepsNames[i])); } } @UsingEmbedder() @Configure() @UsingGroovy(resourceFinder = TestGroovyResourceFinder.class) private static class AnnotatedUsingGroovy { } public static class TestGroovyResourceFinder extends GroovyResourceFinder { public TestGroovyResourceFinder(){ super(CodeLocations.codeLocationFromPath("src/test/java"), "**/configuration/groovy/*.groovy", ""); } } private static class NotAnnotated { } }