package cucumber.runtime.jython; import cucumber.api.Scenario; import cucumber.runtime.HookDefinition; import gherkin.TagExpression; import gherkin.formatter.model.Tag; import org.python.core.PyInstance; import org.python.core.PyTuple; import java.util.Collection; public class JythonHookDefinition implements HookDefinition { private final PyInstance hookDefinition; private final TagExpression tagExpression; private final JythonBackend backend; public JythonHookDefinition(JythonBackend backend, PyInstance hookDefinition) { this.backend = backend; this.hookDefinition = hookDefinition; PyTuple tags = (PyTuple) hookDefinition.__dict__.__finditem__("tags"); this.tagExpression = new TagExpression(tags); } @Override public void execute(Scenario scenario) throws Throwable { backend.executeHook(hookDefinition, scenario); } @Override public boolean matches(Collection<Tag> tags) { return tagExpression.evaluate(tags); } @Override public String getLocation(boolean detail) { return null; } @Override public int getOrder() { return 0; } @Override public boolean isScenarioScoped() { return false; } }