diff --git a/spring-restdocs-asciidoctor/src/main/java/org/springframework/restdocs/asciidoctor/SnippetsDirectoryResolver.java b/spring-restdocs-asciidoctor/src/main/java/org/springframework/restdocs/asciidoctor/SnippetsDirectoryResolver.java index 4e9c53ea..5f927a83 100644 --- a/spring-restdocs-asciidoctor/src/main/java/org/springframework/restdocs/asciidoctor/SnippetsDirectoryResolver.java +++ b/spring-restdocs-asciidoctor/src/main/java/org/springframework/restdocs/asciidoctor/SnippetsDirectoryResolver.java @@ -21,6 +21,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Map; +import java.util.function.Supplier; /** * Resolves the directory from which snippets can be read for inclusion in an Asciidoctor @@ -57,13 +58,23 @@ class SnippetsDirectoryResolver { } private File getGradleSnippetsDirectory(Map attributes) { - return new File(getRequiredAttribute(attributes, "projectdir"), + return new File( + getRequiredAttribute(attributes, "gradle-projectdir", + () -> getRequiredAttribute(attributes, "projectdir")), "build/generated-snippets"); } private String getRequiredAttribute(Map attributes, String name) { + return getRequiredAttribute(attributes, name, null); + } + + private String getRequiredAttribute(Map attributes, String name, + Supplier fallback) { String attribute = (String) attributes.get(name); if (attribute == null || attribute.length() == 0) { + if (fallback != null) { + return fallback.get(); + } throw new IllegalStateException(name + " attribute not found"); } return attribute; diff --git a/spring-restdocs-asciidoctor/src/test/java/org/springframework/restdocs/asciidoctor/SnippetsDirectoryResolverTests.java b/spring-restdocs-asciidoctor/src/test/java/org/springframework/restdocs/asciidoctor/SnippetsDirectoryResolverTests.java index 711408be..6e5383a8 100644 --- a/spring-restdocs-asciidoctor/src/test/java/org/springframework/restdocs/asciidoctor/SnippetsDirectoryResolverTests.java +++ b/spring-restdocs-asciidoctor/src/test/java/org/springframework/restdocs/asciidoctor/SnippetsDirectoryResolverTests.java @@ -78,7 +78,30 @@ public class SnippetsDirectoryResolverTests { } @Test - public void gradleProjectsUseBuildGeneratedSnippetsBeneathProjectDir() + public void gradleProjectsUseBuildGeneratedSnippetsBeneathGradleProjectdir() + throws IOException { + Map attributes = new HashMap<>(); + attributes.put("gradle-projectdir", "project/dir"); + File snippetsDirectory = new SnippetsDirectoryResolver() + .getSnippetsDirectory(attributes); + assertThat(snippetsDirectory) + .isEqualTo(new File("project/dir/build/generated-snippets")); + } + + @Test + public void gradleProjectsUseBuildGeneratedSnippetsBeneathGradleProjectdirWhenBothItAndProjectdirAreSet() + throws IOException { + Map attributes = new HashMap<>(); + attributes.put("gradle-projectdir", "project/dir"); + attributes.put("projectdir", "fallback/dir"); + File snippetsDirectory = new SnippetsDirectoryResolver() + .getSnippetsDirectory(attributes); + assertThat(snippetsDirectory) + .isEqualTo(new File("project/dir/build/generated-snippets")); + } + + @Test + public void gradleProjectsUseBuildGeneratedSnippetsBeneathProjectdirWhenGradleProjectdirIsNotSet() throws IOException { Map attributes = new HashMap<>(); attributes.put("projectdir", "project/dir"); @@ -89,7 +112,7 @@ public class SnippetsDirectoryResolverTests { } @Test - public void illegalStateWhenProjectdirAttributeIsNotSetInGradleProject() + public void illegalStateWhenGradleProjectdirAndProjectdirAttributesAreNotSetInGradleProject() throws IOException { Map attributes = new HashMap<>(); this.thrown.expect(IllegalStateException.class);