package cucumber.runtime.java;
import cucumber.api.StepDefinitionReporter;
import cucumber.api.java.ObjectFactory;
import cucumber.runtime.CucumberException;
import cucumber.runtime.Glue;
import cucumber.runtime.HookDefinition;
import cucumber.runtime.StepDefinition;
import cucumber.runtime.StepDefinitionMatch;
import cucumber.runtime.java.stepdefs.Stepdefs;
import gherkin.I18n;
import gherkin.formatter.model.Step;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;
public class JavaBackendTest {
@Test
public void finds_step_definitions_by_classpath_url() {
ObjectFactory factory = new DefaultJavaObjectFactory();
JavaBackend backend = new JavaBackend(factory);
GlueStub glue = new GlueStub();
backend.loadGlue(glue, asList("classpath:cucumber/runtime/java/stepdefs"));
backend.buildWorld();
assertEquals(Stepdefs.class, factory.getInstance(Stepdefs.class).getClass());
}
@Test
public void finds_step_definitions_by_package_name() {
ObjectFactory factory = new DefaultJavaObjectFactory();
JavaBackend backend = new JavaBackend(factory);
GlueStub glue = new GlueStub();
backend.loadGlue(glue, asList("cucumber.runtime.java.stepdefs"));
backend.buildWorld();
assertEquals(Stepdefs.class, factory.getInstance(Stepdefs.class).getClass());
}
@Test(expected = CucumberException.class)
public void detects_subclassed_glue_and_throws_exception() {
ObjectFactory factory = new DefaultJavaObjectFactory();
JavaBackend backend = new JavaBackend(factory);
GlueStub glue = new GlueStub();
backend.loadGlue(glue, asList("cucumber.runtime.java.stepdefs", "cucumber.runtime.java.incorrectlysubclassedstepdefs"));
}
private class GlueStub implements Glue {
public final List<StepDefinition> stepDefinitions = new ArrayList<StepDefinition>();
@Override
public void addStepDefinition(StepDefinition stepDefinition) {
stepDefinitions.add(stepDefinition);
}
@Override
public void addBeforeHook(HookDefinition hookDefinition) {
throw new UnsupportedOperationException();
}
@Override
public void addAfterHook(HookDefinition hookDefinition) {
throw new UnsupportedOperationException();
}
@Override
public List<HookDefinition> getBeforeHooks() {
throw new UnsupportedOperationException();
}
@Override
public List<HookDefinition> getAfterHooks() {
throw new UnsupportedOperationException();
}
@Override
public StepDefinitionMatch stepDefinitionMatch(String featurePath, Step step, I18n i18n) {
throw new UnsupportedOperationException();
}
@Override
public void reportStepDefinitions(StepDefinitionReporter stepDefinitionReporter) {
throw new UnsupportedOperationException();
}
@Override
public void removeScenarioScopedGlue() {
}
}
}