package cuke4duke.internal.groovy;
import cuke4duke.internal.language.AbstractStepDefinition;
import cuke4duke.internal.language.JdkPatternArgumentMatcher;
import cuke4duke.internal.language.StepArgument;
import groovy.lang.Closure;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Locale;
import java.util.regex.Pattern;
public class GroovyStepDefinition extends AbstractStepDefinition {
private final GroovyLanguage groovyLanguage;
private final Pattern regexp;
private final Closure body;
public GroovyStepDefinition(GroovyLanguage groovyLanguage, Pattern regexp, Closure body) throws Throwable {
super(groovyLanguage);
this.groovyLanguage = groovyLanguage;
this.regexp = regexp;
this.body = body;
register();
}
public String regexp_source() {
return regexp.pattern();
}
public String file_colon_line() {
return body.toString();
}
public Object invokeWithArgs(Object[] args) throws Throwable {
return groovyLanguage.invokeClosure(body, args, Locale.getDefault());
}
public List<StepArgument> arguments_from(String stepName) throws UnsupportedEncodingException {
return JdkPatternArgumentMatcher.argumentsFrom(regexp, stepName);
}
}