package org.jbehave.core.io;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.jbehave.core.io.UnderscoredCamelCaseResolver.NUMBERS_AS_UPPER_CASE_LETTERS_PATTERN;
import org.jbehave.core.Embeddable;
import org.jbehave.core.junit.JUnitStory;
import org.junit.Test;
public class StoryPathResolverBehaviour {
@Test
public void shouldResolveClassNamePreservingCase() {
StoryPathResolver resolver = new CasePreservingResolver();
assertThat(resolver.resolve(CamelCase.class),
equalTo("org/jbehave/core/io/CamelCase.story"));
}
@Test
public void shouldResolveClassNamePreservingCaseWithNumbers() {
StoryPathResolver resolver = new CasePreservingResolver(".story");
assertThat(resolver.resolve(CamelCaseWithA3Qualifier.class),
equalTo("org/jbehave/core/io/CamelCaseWithA3Qualifier.story"));
}
@Test
public void shouldResolveCamelCasedClassNameToCasePreservingName() {
StoryPathResolver resolver = new CasePreservingResolver("");
assertThat(resolver.resolve(CamelCaseStory.class),
equalTo("org/jbehave/core/io/CamelCaseStory"));
}
@Test
public void shouldResolveCamelCasedClassNameToCasePreservingNameWithExtension() {
StoryPathResolver resolver = new CasePreservingResolver(".story");
assertThat(resolver.resolve(CamelCaseStory.class),
equalTo("org/jbehave/core/io/CamelCaseStory.story"));
}
@Test
public void shouldResolveCamelCasedClassNameToUnderscoredNameWithDefaultExtension() {
StoryPathResolver resolver = new UnderscoredCamelCaseResolver();
assertThat(resolver.resolve(CamelCase.class),
equalTo("org/jbehave/core/io/camel_case.story"));
}
@Test
public void shouldResolveCamelCasedClassNameToUnderscoredNameWithExtension() {
StoryPathResolver resolver = new UnderscoredCamelCaseResolver(".story");
assertThat(resolver.resolve(CamelCase.class),
equalTo("org/jbehave/core/io/camel_case.story"));
}
/**
* Some teams are not going to have /stories/ directories, they are going to
* co-mingle with tests and match with *Story
*/
@Test
public void shouldResolveCamelCasedClassNameToUnderscoredNameWithExtensionStrippingExtraneousWord() {
StoryPathResolver resolver = new UnderscoredCamelCaseResolver(".story")
.removeFromClassName("Story");
assertThat(resolver.resolve(CamelCaseStory.class),
equalTo("org/jbehave/core/io/camel_case.story"));
}
@Test
public void shouldResolveCamelCasedClassNameWithNumbersTreatedAsLowerCaseLetters() {
StoryPathResolver resolver = new UnderscoredCamelCaseResolver("");
assertThat(resolver.resolve(CamelCaseWithA3Qualifier.class),
equalTo("org/jbehave/core/io/camel_case_with_a3_qualifier"));
assertThat(resolver.resolve(CamelCaseWithA33Qualifier.class),
equalTo("org/jbehave/core/io/camel_case_with_a33_qualifier"));
}
@Test
public void shouldResolveCamelCasedClassNameWithNumbersTreatedAsUpperCaseLetters() {
StoryPathResolver resolver = new UnderscoredCamelCaseResolver("",
NUMBERS_AS_UPPER_CASE_LETTERS_PATTERN);
assertThat(resolver.resolve(CamelCaseWithA3Qualifier.class),
equalTo("org/jbehave/core/io/camel_case_with_a_3_qualifier"));
assertThat(resolver.resolve(CamelCaseWithA33Qualifier.class),
equalTo("org/jbehave/core/io/camel_case_with_a_3_3_qualifier"));
}
@Test
public void shouldResolveDefaultPackageClassName() {
StoryPathResolver resolver = new CasePreservingResolver();
assertThat(resolver.resolve(load("DefaultPackageEmbeddable")),
equalTo("DefaultPackageEmbeddable.story"));
}
@SuppressWarnings("unchecked")
private Class<? extends Embeddable> load(String name) {
try {
return (Class<? extends Embeddable>) this.getClass().getClassLoader().loadClass(name);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
static class CamelCaseStory extends JUnitStory {
}
static class CamelCase extends JUnitStory {
}
static class CamelCaseWithA3Qualifier extends JUnitStory {
}
static class CamelCaseWithA33Qualifier extends JUnitStory {
}
}