- Revision
- 1120
- Author
- mauro
- Date
- 2009-04-05 05:22:24 -0500 (Sun, 05 Apr 2009)
Log Message
JBEHAVE-127: Fixed regression with 2.1.x. Now supports configurable resolution pattern, one treating numbers as upper case letters (default) and another treating them as lower case (the 2.1.x default).
Modified Paths
Diff
Modified: trunk/core/jbehave-core/src/behaviour/org/jbehave/scenario/parser/UnderscoredCamelCaseResolverBehaviour.java (1119 => 1120)
--- trunk/core/jbehave-core/src/behaviour/org/jbehave/scenario/parser/UnderscoredCamelCaseResolverBehaviour.java 2009-04-05 09:17:37 UTC (rev 1119) +++ trunk/core/jbehave-core/src/behaviour/org/jbehave/scenario/parser/UnderscoredCamelCaseResolverBehaviour.java 2009-04-05 10:22:24 UTC (rev 1120) @@ -2,6 +2,7 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.jbehave.Ensure.ensureThat; +import static org.jbehave.scenario.parser.UnderscoredCamelCaseResolver.NUMBERS_AS_LOWER_CASE_LETTERS_PATTERN; import org.jbehave.scenario.JUnitScenario; import org.junit.Test; @@ -10,29 +11,36 @@ @Test public void shouldResolveCamelCasedClassNameToUnderscoredName() { - UnderscoredCamelCaseResolver resolver = new UnderscoredCamelCaseResolver(); + ScenarioNameResolver resolver = new UnderscoredCamelCaseResolver(); ensureThat(resolver.resolve(CamelCaseScenario.class), equalTo("org/jbehave/scenario/parser/camel_case_scenario")); - } - - + @Test public void shouldResolveCamelCasedClassNameToUnderscoredNameWithExtension() { - UnderscoredCamelCaseResolver resolver = new UnderscoredCamelCaseResolver(".scenario"); + ScenarioNameResolver resolver = new UnderscoredCamelCaseResolver(".scenario"); ensureThat(resolver.resolve(CamelCase.class), equalTo("org/jbehave/scenario/parser/camel_case.scenario")); - } @Test - public void shouldResolveCamelCasedClassNameWithNumbers() { - UnderscoredCamelCaseResolver resolver = new UnderscoredCamelCaseResolver(); - ensureThat(resolver.resolve(CamelCaseWith3Dates.class), - equalTo("org/jbehave/scenario/parser/camel_case_with_3_dates")); - + public void shouldResolveCamelCasedClassNameWithNumbersTreatedAsUpperCaseLetters() { + ScenarioNameResolver resolver = new UnderscoredCamelCaseResolver(); + ensureThat(resolver.resolve(CamelCaseWithA3Qualifier.class), + equalTo("org/jbehave/scenario/parser/camel_case_with_a_3_qualifier")); + ensureThat(resolver.resolve(CamelCaseWithA33Qualifier.class), + equalTo("org/jbehave/scenario/parser/camel_case_with_a_3_3_qualifier")); } + @Test + public void shouldResolveCamelCasedClassNameWithNumbersTreatedAsLowerCaseLetters() { + ScenarioNameResolver resolver = new UnderscoredCamelCaseResolver("", NUMBERS_AS_LOWER_CASE_LETTERS_PATTERN); + ensureThat(resolver.resolve(CamelCaseWithA3Qualifier.class), + equalTo("org/jbehave/scenario/parser/camel_case_with_a3_qualifier")); + ensureThat(resolver.resolve(CamelCaseWithA33Qualifier.class), + equalTo("org/jbehave/scenario/parser/camel_case_with_a33_qualifier")); + } + static class CamelCaseScenario extends JUnitScenario { } @@ -41,7 +49,11 @@ } - static class CamelCaseWith3Dates extends JUnitScenario { + static class CamelCaseWithA3Qualifier extends JUnitScenario { } + + static class CamelCaseWithA33Qualifier extends JUnitScenario { + + } }
Modified: trunk/core/jbehave-core/src/java/org/jbehave/scenario/parser/UnderscoredCamelCaseResolver.java (1119 => 1120)
--- trunk/core/jbehave-core/src/java/org/jbehave/scenario/parser/UnderscoredCamelCaseResolver.java 2009-04-05 09:17:37 UTC (rev 1119) +++ trunk/core/jbehave-core/src/java/org/jbehave/scenario/parser/UnderscoredCamelCaseResolver.java 2009-04-05 10:22:24 UTC (rev 1120) @@ -1,13 +1,15 @@ package org.jbehave.scenario.parser; +import static java.util.regex.Pattern.compile; + import java.util.regex.Matcher; -import java.util.regex.Pattern; import org.jbehave.scenario.RunnableScenario; /** * <p> - * Resolves scenario names converting the Java scenario class to underscored eg: + * Resolves scenario names converting the camel-cased Java scenario class to + * lower-case underscore-separated name eg: * "org.jbehave.scenario.ICanLogin.java" -> "org/jbehave/scenario/i_can_login". * </p> * <p> @@ -15,31 +17,49 @@ * constructor so that we can resolve name to eg * "org/jbehave/scenario/i_can_login.scenario". * </p> + * <p> + * The default resolution pattern treats numbers as upper case letters, eg: + * "org.jbehave.scenario.ICanLoginTo1Site.java" -> "org/jbehave/scenario/i_can_login_to_1_site" + * </p> + * <p> + * Choose {...@link NUMBERS_AS_LOWER_CASE_LETTERS_PATTERN} to treat numbers as lower case letters, eg: + * "org.jbehave.scenario.ICanLoginTo1Site.java" -> "org/jbehave/scenario/i_can_login_to1_site" + * </p> */ public class UnderscoredCamelCaseResolver extends AbstractScenarioNameResolver { - private static final String SIMPLE_TO_UNDERSCORED_PATTERN = "([A-Z0-9].*?)([A-Z0-9]|\\z)"; - private static final String UNDERSCORE = "_"; + protected static final String NUMBERS_AS_UPPER_CASE_LETTERS_PATTERN = "([A-Z0-9].*?)([A-Z0-9]|\\z)"; + protected static final String NUMBERS_AS_LOWER_CASE_LETTERS_PATTERN = "([A-Z].*?)([A-Z]|\\z)"; + protected static final String UNDERSCORE = "_"; + private final String resolutionPattern; - public UnderscoredCamelCaseResolver() { - super(); - } + public UnderscoredCamelCaseResolver() { + this(DEFAULT_EXTENSION); + } - public UnderscoredCamelCaseResolver(String extension) { - super(extension); - } + public UnderscoredCamelCaseResolver(String extension) { + this(extension, NUMBERS_AS_UPPER_CASE_LETTERS_PATTERN); + } + public UnderscoredCamelCaseResolver(String extension, + String resolutionPattern) { + super(extension); + this.resolutionPattern = resolutionPattern; + } + @Override - protected String resolveFileName(Class<? extends RunnableScenario> scenarioClass) { - Matcher matcher = Pattern.compile(SIMPLE_TO_UNDERSCORED_PATTERN).matcher(scenarioClass.getSimpleName()); - int startAt = 0; - StringBuilder builder = new StringBuilder(); - while (matcher.find(startAt)) { - builder.append(matcher.group(1).toLowerCase()); - builder.append(UNDERSCORE); - startAt = matcher.start(2); - } - return builder.substring(0, builder.length() - 1); + protected String resolveFileName( + Class<? extends RunnableScenario> scenarioClass) { + Matcher matcher = compile(resolutionPattern).matcher( + scenarioClass.getSimpleName()); + int startAt = 0; + StringBuilder builder = new StringBuilder(); + while (matcher.find(startAt)) { + builder.append(matcher.group(1).toLowerCase()); + builder.append(UNDERSCORE); + startAt = matcher.start(2); + } + return builder.substring(0, builder.length() - 1); } }
To unsubscribe from this list please visit: