package org.jbehave.examples.core.stories; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import org.jbehave.core.Embeddable; import org.jbehave.core.annotations.AfterScenario; import org.jbehave.core.annotations.BeforeScenario; import org.jbehave.core.annotations.Configure; import org.jbehave.core.annotations.Then; import org.jbehave.core.annotations.UsingEmbedder; import org.jbehave.core.annotations.UsingSteps; import org.jbehave.core.annotations.When; import org.jbehave.core.embedder.Embedder; import org.jbehave.core.junit.AnnotatedEmbedderRunner; import org.jbehave.core.reporters.StoryReporterBuilder; import org.jbehave.examples.core.stories.EnsuringOrderUsingSteps.A; import org.jbehave.examples.core.stories.EnsuringOrderUsingSteps.B; import org.jbehave.examples.core.stories.EnsuringOrderUsingSteps.C; import org.jbehave.examples.core.stories.EnsuringOrderUsingSteps.MyStoryReporterBuilder; import org.junit.Test; import org.junit.runner.RunWith; import static org.junit.Assert.assertTrue; @RunWith(AnnotatedEmbedderRunner.class) @UsingEmbedder(embedder = Embedder.class, generateViewAfterStories = true, ignoreFailureInStories = false, ignoreFailureInView = true) @UsingSteps(instances = { A.class, B.class, C.class, EnsuringOrderUsingSteps.class }) @Configure(storyReporterBuilder = MyStoryReporterBuilder.class) public class EnsuringOrderUsingSteps implements Embeddable { private Embedder embedder; public void useEmbedder(Embedder embedder) { this.embedder = embedder; } @Test public void run() { embedder.runStoriesAsPaths(Arrays.asList("org/jbehave/examples/core/stories/ensuring_order_using_steps.story")); } private static final List<String> ORDER = new LinkedList<String>(); @AfterScenario public void clearOrder() { ORDER.clear(); } public static class MyStoryReporterBuilder extends StoryReporterBuilder { public MyStoryReporterBuilder() { withFormats(Format.CONSOLE, Format.STATS); } } public static class A { @BeforeScenario public void add() { ORDER.add(getClass().getSimpleName()); } } public static class B { @BeforeScenario public void add() { ORDER.add(getClass().getSimpleName()); } } public static class C { @BeforeScenario public void add() { ORDER.add(getClass().getSimpleName()); } } @When("running @BeforeScenario") public void noop() { } @Then("$left should be called before $right") public void assertOrder(String left, String right) { int leftIndex = ORDER.indexOf(left); int rightIndex = ORDER.indexOf(right); assertTrue(left + " was not called before " + right, leftIndex < rightIndex); } }