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());
}
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));
}
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));
}
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();
}
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));
}
Aggregations