PendingStepMethodGenerator.java
- package org.jbehave.core.steps;
- import static java.text.MessageFormat.format;
- import org.apache.commons.lang3.StringUtils;
- import org.apache.commons.text.StringEscapeUtils;
- import org.apache.commons.text.WordUtils;
- import org.jbehave.core.annotations.Pending;
- import org.jbehave.core.configuration.Keywords;
- import org.jbehave.core.steps.StepCreator.PendingStep;
- public class PendingStepMethodGenerator {
- private static final String METHOD_SOURCE = "@{0}(\"{1}\")\n@{2}\npublic void {3}() '{'\n // {4}\n'}'\n";
- private final Keywords keywords;
- public PendingStepMethodGenerator(Keywords keywords) {
- this.keywords = keywords;
- }
- public String generateMethod(PendingStep step) {
- String stepAsString = step.stepAsString();
- String previousNonAndStepAsString = step.previousNonAndStepAsString();
- StepType stepType = null;
- if (keywords.isAndStep(stepAsString) && previousNonAndStepAsString != null) {
- stepType = keywords.stepTypeFor(previousNonAndStepAsString);
- } else {
- stepType = keywords.stepTypeFor(stepAsString);
- }
- String stepPattern = keywords.stepWithoutStartingWord(stepAsString, stepType);
- String stepAnnotation = StringUtils.capitalize(stepType.name().toLowerCase());
- String methodName = methodName(stepType, stepPattern);
- String pendingAnnotation = Pending.class.getSimpleName();
- return format(METHOD_SOURCE, stepAnnotation, StringEscapeUtils.escapeJava(stepPattern), pendingAnnotation,
- methodName, keywords.pending());
- }
- private String methodName(StepType stepType, String stepPattern) {
- String name = stepType.name().toLowerCase() + WordUtils.capitalize(stepPattern);
- char[] filteredName = new char[name.length()];
- int index = 0;
- for (int i = 0; i < name.length(); i++) {
- char ch = name.charAt(i);
- if (Character.isJavaIdentifierPart(ch) && ch != '$' && ch != 127) {
- filteredName[index++] = ch;
- }
- }
- return new String(filteredName,0,index);
- }
- }