Search in sources :

Example 6 with Glue

use of io.cucumber.core.backend.Glue in project cucumber-jvm by cucumber.

the class HookOrderTest method before_step_hooks_execute_in_order.

@Test
void before_step_hooks_execute_in_order() {
    final List<HookDefinition> hooks = mockHooks(3, Integer.MAX_VALUE, 1, -1, 0, 10000, Integer.MIN_VALUE);
    TestRunnerSupplier runnerSupplier = new TestRunnerSupplier(bus, runtimeOptions) {

        @Override
        public void loadGlue(Glue glue, List<URI> gluePaths) {
            glue.addStepDefinition(stepDefinition);
            for (HookDefinition hook : hooks) {
                glue.addBeforeStepHook(hook);
            }
        }
    };
    runnerSupplier.get().runPickle(pickle);
    InOrder inOrder = inOrder(hooks.toArray());
    inOrder.verify(hooks.get(6)).execute(ArgumentMatchers.any());
    inOrder.verify(hooks.get(3)).execute(ArgumentMatchers.any());
    inOrder.verify(hooks.get(4)).execute(ArgumentMatchers.any());
    inOrder.verify(hooks.get(2)).execute(ArgumentMatchers.any());
    inOrder.verify(hooks.get(0)).execute(ArgumentMatchers.any());
    inOrder.verify(hooks.get(5)).execute(ArgumentMatchers.any());
    inOrder.verify(hooks.get(1)).execute(ArgumentMatchers.any());
}
Also used : InOrder(org.mockito.InOrder) Glue(io.cucumber.core.backend.Glue) ArrayList(java.util.ArrayList) List(java.util.List) HookDefinition(io.cucumber.core.backend.HookDefinition) Test(org.junit.jupiter.api.Test)

Example 7 with Glue

use of io.cucumber.core.backend.Glue in project cucumber-jvm by cucumber.

the class RunnerTest method hooks_execute_also_after_failure.

@Test
void hooks_execute_also_after_failure() {
    HookDefinition beforeHook = createHook();
    HookDefinition afterHook = createHook();
    HookDefinition failingBeforeHook = createHook();
    doThrow(new RuntimeException("boom")).when(failingBeforeHook).execute(any(TestCaseState.class));
    TestRunnerSupplier runnerSupplier = new TestRunnerSupplier(bus, runtimeOptions) {

        @Override
        public void loadGlue(Glue glue, List<URI> gluePaths) {
            glue.addBeforeHook(failingBeforeHook);
            glue.addBeforeHook(beforeHook);
            glue.addAfterHook(afterHook);
        }
    };
    runnerSupplier.get().runPickle(createPicklesWithSteps());
    InOrder inOrder = inOrder(failingBeforeHook, beforeHook, afterHook);
    inOrder.verify(failingBeforeHook).execute(any(TestCaseState.class));
    inOrder.verify(beforeHook).execute(any(TestCaseState.class));
    inOrder.verify(afterHook).execute(any(TestCaseState.class));
}
Also used : InOrder(org.mockito.InOrder) Glue(io.cucumber.core.backend.Glue) Collections.singletonList(java.util.Collections.singletonList) Collections.emptyList(java.util.Collections.emptyList) List(java.util.List) StaticHookDefinition(io.cucumber.core.backend.StaticHookDefinition) HookDefinition(io.cucumber.core.backend.HookDefinition) Test(org.junit.jupiter.api.Test)

Example 8 with Glue

use of io.cucumber.core.backend.Glue in project cucumber-jvm by cucumber.

the class RuntimeTest method generates_events_for_glue_and_scenario_scoped_glue.

@Test
void generates_events_for_glue_and_scenario_scoped_glue() {
    final Feature feature = TestFeatureParser.parse("test.feature", "" + "Feature: feature name\n" + "  Scenario: Run a scenario once\n" + "    Given global scoped\n" + "    And scenario scoped\n" + "  Scenario: Then do it again\n" + "    Given global scoped\n" + "    And scenario scoped\n" + "");
    final List<StepDefinition> stepDefinedEvents = new ArrayList<>();
    Plugin eventListener = (EventListener) publisher -> publisher.registerHandlerFor(StepDefinedEvent.class, (StepDefinedEvent event) -> {
        stepDefinedEvents.add(event.getStepDefinition());
    });
    final MockedStepDefinition mockedStepDefinition = new MockedStepDefinition();
    final MockedScenarioScopedStepDefinition mockedScenarioScopedStepDefinition = new MockedScenarioScopedStepDefinition();
    BackendSupplier backendSupplier = new TestBackendSupplier() {

        private Glue glue;

        @Override
        public void loadGlue(Glue glue, List<URI> gluePaths) {
            this.glue = glue;
            glue.addStepDefinition(mockedStepDefinition);
        }

        @Override
        public void buildWorld() {
            glue.addStepDefinition(mockedScenarioScopedStepDefinition);
        }
    };
    FeatureSupplier featureSupplier = new StubFeatureSupplier(feature);
    Runtime.builder().withBackendSupplier(backendSupplier).withAdditionalPlugins(eventListener).withEventBus(new TimeServiceEventBus(new StepDurationTimeService(ZERO), UUID::randomUUID)).withFeatureSupplier(featureSupplier).build().run();
    assertThat(stepDefinedEvents.get(0).getPattern(), is(mockedStepDefinition.getPattern()));
    assertThat(stepDefinedEvents.get(1).getPattern(), is(mockedScenarioScopedStepDefinition.getPattern()));
    // Twice, once for each scenario
    assertThat(stepDefinedEvents.get(2).getPattern(), is(mockedStepDefinition.getPattern()));
    assertThat(stepDefinedEvents.get(3).getPattern(), is(mockedScenarioScopedStepDefinition.getPattern()));
    assertThat(stepDefinedEvents.size(), is(4));
}
Also used : TestBackendSupplier(io.cucumber.core.runner.TestBackendSupplier) ArrayList(java.util.ArrayList) Feature(io.cucumber.core.gherkin.Feature) TestBackendSupplier(io.cucumber.core.runner.TestBackendSupplier) Glue(io.cucumber.core.backend.Glue) StepDefinedEvent(io.cucumber.plugin.event.StepDefinedEvent) StubStepDefinition(io.cucumber.core.backend.StubStepDefinition) StepDefinition(io.cucumber.plugin.event.StepDefinition) Collections.singletonList(java.util.Collections.singletonList) Arrays.asList(java.util.Arrays.asList) Collections.emptyList(java.util.Collections.emptyList) List(java.util.List) ArrayList(java.util.ArrayList) ConcurrentEventListener(io.cucumber.plugin.ConcurrentEventListener) EventListener(io.cucumber.plugin.EventListener) UUID(java.util.UUID) StepDurationTimeService(io.cucumber.core.runner.StepDurationTimeService) Plugin(io.cucumber.plugin.Plugin) Test(org.junit.jupiter.api.Test)

Example 9 with Glue

use of io.cucumber.core.backend.Glue in project cucumber-jvm by cucumber.

the class HookTest method after_hooks_execute_before_objects_are_disposed.

/**
 * Test for
 * <a href="https://github.com/cucumber/cucumber-jvm/issues/23">#23</a>.
 */
@Test
void after_hooks_execute_before_objects_are_disposed() {
    Backend backend = mock(Backend.class);
    when(backend.getSnippet()).thenReturn(new TestSnippet());
    ObjectFactory objectFactory = mock(ObjectFactory.class);
    final HookDefinition hook = mock(HookDefinition.class);
    when(hook.getLocation()).thenReturn("hook-location");
    when(hook.getTagExpression()).thenReturn("");
    doAnswer(invocation -> {
        Glue glue = invocation.getArgument(0);
        glue.addBeforeHook(hook);
        return null;
    }).when(backend).loadGlue(any(Glue.class), ArgumentMatchers.anyList());
    Runner runner = new Runner(bus, Collections.singleton(backend), objectFactory, runtimeOptions);
    runner.runPickle(pickle);
    InOrder inOrder = inOrder(hook, backend);
    inOrder.verify(backend).buildWorld();
    inOrder.verify(hook).execute(ArgumentMatchers.any());
    inOrder.verify(backend).disposeWorld();
}
Also used : Backend(io.cucumber.core.backend.Backend) InOrder(org.mockito.InOrder) ObjectFactory(io.cucumber.core.backend.ObjectFactory) Glue(io.cucumber.core.backend.Glue) TestSnippet(io.cucumber.core.snippets.TestSnippet) HookDefinition(io.cucumber.core.backend.HookDefinition) Test(org.junit.jupiter.api.Test)

Example 10 with Glue

use of io.cucumber.core.backend.Glue in project cucumber-jvm by cucumber.

the class RunnerTest method steps_are_skipped_after_failure.

@Test
void steps_are_skipped_after_failure() {
    StubStepDefinition stepDefinition = spy(new StubStepDefinition("some step"));
    Pickle pickleMatchingStepDefinitions = createPickleMatchingStepDefinitions(stepDefinition);
    final HookDefinition failingBeforeHook = createHook();
    doThrow(new RuntimeException("Boom")).when(failingBeforeHook).execute(ArgumentMatchers.any());
    TestRunnerSupplier runnerSupplier = new TestRunnerSupplier(bus, runtimeOptions) {

        @Override
        public void loadGlue(Glue glue, List<URI> gluePaths) {
            glue.addBeforeHook(failingBeforeHook);
            glue.addStepDefinition(stepDefinition);
        }
    };
    runnerSupplier.get().runPickle(pickleMatchingStepDefinitions);
    InOrder inOrder = inOrder(failingBeforeHook, stepDefinition);
    inOrder.verify(failingBeforeHook).execute(any(TestCaseState.class));
    inOrder.verify(stepDefinition, never()).execute(any(Object[].class));
}
Also used : Pickle(io.cucumber.core.gherkin.Pickle) InOrder(org.mockito.InOrder) Glue(io.cucumber.core.backend.Glue) Collections.singletonList(java.util.Collections.singletonList) Collections.emptyList(java.util.Collections.emptyList) List(java.util.List) StaticHookDefinition(io.cucumber.core.backend.StaticHookDefinition) HookDefinition(io.cucumber.core.backend.HookDefinition) Test(org.junit.jupiter.api.Test)

Aggregations

Glue (io.cucumber.core.backend.Glue)18 Test (org.junit.jupiter.api.Test)18 List (java.util.List)15 HookDefinition (io.cucumber.core.backend.HookDefinition)14 InOrder (org.mockito.InOrder)12 Collections.emptyList (java.util.Collections.emptyList)10 Collections.singletonList (java.util.Collections.singletonList)10 StaticHookDefinition (io.cucumber.core.backend.StaticHookDefinition)8 ArrayList (java.util.ArrayList)6 Pickle (io.cucumber.core.gherkin.Pickle)5 Backend (io.cucumber.core.backend.Backend)3 ObjectFactory (io.cucumber.core.backend.ObjectFactory)3 TestSnippet (io.cucumber.core.snippets.TestSnippet)3 StubStepDefinition (io.cucumber.core.backend.StubStepDefinition)2 RuntimeOptions (io.cucumber.core.options.RuntimeOptions)2 RuntimeOptionsBuilder (io.cucumber.core.options.RuntimeOptionsBuilder)2 Feature (io.cucumber.core.gherkin.Feature)1 StepDurationTimeService (io.cucumber.core.runner.StepDurationTimeService)1 TestBackendSupplier (io.cucumber.core.runner.TestBackendSupplier)1 ConcurrentEventListener (io.cucumber.plugin.ConcurrentEventListener)1