Skip to content

Commit

Permalink
Improve test utility
Browse files Browse the repository at this point in the history
Split ProjectGenerationTester in two tester to better separate cases
where all contributors are invoked vs. only selected ones.
  • Loading branch information
snicoll committed Jan 27, 2019
1 parent 430f1bd commit c243db0
Show file tree
Hide file tree
Showing 19 changed files with 546 additions and 505 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,16 @@
public class GitProjectGenerationConfiguration {

@Bean
public GitIgnoreContributor gitIgnoreContributor(
ObjectProvider<GitIgnoreCustomizer> gitIgnoreCustomizers) {
public GitIgnoreContributor gitIgnoreContributor(GitIgnore gitIgnore) {
return new GitIgnoreContributor(gitIgnore);
}

@Bean
public GitIgnore gitIgnore(ObjectProvider<GitIgnoreCustomizer> gitIgnoreCustomizers) {
GitIgnore gitIgnore = createGitIgnore();
gitIgnoreCustomizers.orderedStream()
.forEach((customizer) -> customizer.customize(gitIgnore));
return new GitIgnoreContributor(gitIgnore);
return gitIgnore;
}

@Bean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.project.ProjectGenerationConfiguration;
import io.spring.initializr.generator.project.ProjectGenerator;
import io.spring.initializr.generator.test.project.ProjectGenerationTester;
import io.spring.initializr.generator.test.project.ProjectGeneratorTester;
import io.spring.initializr.generator.util.Version;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
Expand All @@ -42,10 +42,10 @@
@ExtendWith(TempDirectory.class)
class ProjectGeneratorIntegrationTests {

private final ProjectGenerationTester projectGenerationTester;
private final ProjectGeneratorTester projectTester;

ProjectGeneratorIntegrationTests(@TempDir Path directory) {
this.projectGenerationTester = new ProjectGenerationTester(directory);
this.projectTester = new ProjectGeneratorTester().withDirectory(directory);
}

@Test
Expand All @@ -56,9 +56,8 @@ void customBaseDirectionIsUsedWhenGeneratingProject() {
description.setLanguage(new JavaLanguage());
description.setGroupId("com.example");
description.setBaseDirectory("test/demo-app");
Path project = this.projectGenerationTester.generateProject(description);
List<String> relativePaths = this.projectGenerationTester
.getRelativePathsOfProjectFiles(project);
List<String> relativePaths = this.projectTester.generate(description)
.getRelativePathsOfProjectFiles();
assertThat(relativePaths).containsOnly("test/demo-app/.gitignore",
"test/demo-app/pom.xml", "test/demo-app/mvnw", "test/demo-app/mvnw.cmd",
"test/demo-app/.mvn/wrapper/MavenWrapperDownloader.java",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.spring.build.BuildProjectGenerationConfiguration;
import io.spring.initializr.generator.test.project.ProjectGenerationTester;
import io.spring.initializr.generator.test.project.ProjectStructure;
import io.spring.initializr.generator.util.Version;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
Expand All @@ -51,26 +52,29 @@
@ExtendWith(TempDirectory.class)
class GradleProjectGenerationConfigurationTests {

private final ProjectGenerationTester projectGenerationTester;
private final ProjectGenerationTester projectTester;

GradleProjectGenerationConfigurationTests(@TempDir Path directory) {
this.projectGenerationTester = new ProjectGenerationTester(directory);
this.projectTester = new ProjectGenerationTester().withDefaultContextInitializer()
.withConfiguration(BuildProjectGenerationConfiguration.class,
GradleProjectGenerationConfiguration.class)
.withDirectory(directory).withDescriptionCustomizer((description) -> {
description.setBuildSystem(new GradleBuildSystem());
});
}

@Test
void gradle3WrapperIsContributedWhenGeneratingGradleProjectWithBoot15()
throws IOException {
ProjectDescription description = initProjectDescription();
ProjectDescription description = new ProjectDescription();
description.setPlatformVersion(Version.parse("1.5.17.RELEASE"));
Path project = this.projectGenerationTester.generateProject(description,
GradleProjectGenerationConfiguration.class);
List<String> relativePaths = this.projectGenerationTester
.getRelativePathsOfProjectFiles(project);
ProjectStructure projectStructure = this.projectTester.generate(description);
List<String> relativePaths = projectStructure.getRelativePathsOfProjectFiles();
assertThat(relativePaths).contains("gradlew", "gradlew.bat",
"gradle/wrapper/gradle-wrapper.properties",
"gradle/wrapper/gradle-wrapper.jar");
try (Stream<String> lines = Files
.lines(project.resolve("gradle/wrapper/gradle-wrapper.properties"))) {
try (Stream<String> lines = Files.lines(
projectStructure.resolve("gradle/wrapper/gradle-wrapper.properties"))) {
assertThat(lines.filter((line) -> line.contains("gradle-3.5.1-bin.zip")))
.hasSize(1);
}
Expand All @@ -79,34 +83,32 @@ void gradle3WrapperIsContributedWhenGeneratingGradleProjectWithBoot15()
@Test
void gradle4WrapperIsContributedWhenGeneratingGradleProjectWithBoot20()
throws IOException {
ProjectDescription description = initProjectDescription();
ProjectDescription description = new ProjectDescription();
description.setPlatformVersion(Version.parse("2.0.6.RELEASE"));
Path project = generateProject(description);
List<String> relativePaths = this.projectGenerationTester
.getRelativePathsOfProjectFiles(project);
ProjectStructure projectStructure = this.projectTester.generate(description);
List<String> relativePaths = projectStructure.getRelativePathsOfProjectFiles();
assertThat(relativePaths).contains("gradlew", "gradlew.bat",
"gradle/wrapper/gradle-wrapper.properties",
"gradle/wrapper/gradle-wrapper.jar");
try (Stream<String> lines = Files
.lines(project.resolve("gradle/wrapper/gradle-wrapper.properties"))) {
try (Stream<String> lines = Files.lines(
projectStructure.resolve("gradle/wrapper/gradle-wrapper.properties"))) {
assertThat(lines.filter((line) -> line.contains("gradle-4.10.2-bin.zip")))
.hasSize(1);
}
}

@Test
void buildDotGradleIsContributedWhenGeneratingGradleProject() throws IOException {
ProjectDescription description = initProjectDescription();
ProjectDescription description = new ProjectDescription();
description.setPlatformVersion(Version.parse("2.1.0.RELEASE"));
description.setLanguage(new JavaLanguage());
description.setJavaVersion("11");
description.addDependency("acme",
new Dependency("com.example", "acme", DependencyScope.COMPILE));
Path project = generateProject(description);
List<String> relativePaths = this.projectGenerationTester
.getRelativePathsOfProjectFiles(project);
ProjectStructure projectStructure = this.projectTester.generate(description);
List<String> relativePaths = projectStructure.getRelativePathsOfProjectFiles();
assertThat(relativePaths).contains("build.gradle");
Path path = project.resolve("build.gradle");
Path path = projectStructure.resolve("build.gradle");
String[] lines = readAllLines(path);
assertThat(lines).containsExactly("plugins {",
" id 'org.springframework.boot' version '2.1.0.RELEASE'",
Expand All @@ -121,31 +123,19 @@ void buildDotGradleIsContributedWhenGeneratingGradleProject() throws IOException

@Test
void warPluginIsAppliedWhenBuildingProjectThatUsesWarPackaging() throws IOException {
ProjectDescription description = initProjectDescription();
ProjectDescription description = new ProjectDescription();
description.setPlatformVersion(Version.parse("2.1.0.RELEASE"));
description.setLanguage(new JavaLanguage());
description.setPackaging(new WarPackaging());
Path project = generateProject(description);
List<String> relativePaths = this.projectGenerationTester
.getRelativePathsOfProjectFiles(project);
ProjectStructure projectStructure = this.projectTester.generate(description);
List<String> relativePaths = projectStructure.getRelativePathsOfProjectFiles();
assertThat(relativePaths).contains("build.gradle");
try (Stream<String> lines = Files.lines(project.resolve("build.gradle"))) {
try (Stream<String> lines = Files
.lines(projectStructure.resolve("build.gradle"))) {
assertThat(lines.filter((line) -> line.contains(" id 'war'"))).hasSize(1);
}
}

private Path generateProject(ProjectDescription description) {
return this.projectGenerationTester.generateProject(description,
BuildProjectGenerationConfiguration.class,
GradleProjectGenerationConfiguration.class);
}

private ProjectDescription initProjectDescription() {
ProjectDescription description = new ProjectDescription();
description.setBuildSystem(new GradleBuildSystem());
return description;
}

private static String[] readAllLines(Path file) throws IOException {
String content = StreamUtils.copyToString(
new FileInputStream(new File(file.toString())), StandardCharsets.UTF_8);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.spring.build.BuildProjectGenerationConfiguration;
import io.spring.initializr.generator.test.project.ProjectGenerationTester;
import io.spring.initializr.generator.test.project.ProjectStructure;
import io.spring.initializr.generator.util.Version;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
Expand All @@ -44,19 +45,23 @@
@ExtendWith(TempDirectory.class)
class MavenProjectGenerationConfigurationTests {

private final ProjectGenerationTester projectGenerationTester;
private final ProjectGenerationTester projectTester;

MavenProjectGenerationConfigurationTests(@TempDir Path directory) {
this.projectGenerationTester = new ProjectGenerationTester(directory);
this.projectTester = new ProjectGenerationTester().withDefaultContextInitializer()
.withConfiguration(BuildProjectGenerationConfiguration.class,
MavenProjectGenerationConfiguration.class)
.withDirectory(directory).withDescriptionCustomizer((description) -> {
description.setBuildSystem(new MavenBuildSystem());
});
}

@Test
void mavenWrapperIsContributedWhenGeneratingMavenProject() {
ProjectDescription description = initProjectDescription();
ProjectDescription description = new ProjectDescription();
description.setPlatformVersion(Version.parse("2.1.0.RELEASE"));
Path project = generateProject(description);
List<String> relativePaths = this.projectGenerationTester
.getRelativePathsOfProjectFiles(project);
List<String> relativePaths = this.projectTester.generate(description)
.getRelativePathsOfProjectFiles();
assertThat(relativePaths).contains("mvnw", "mvnw.cmd",
".mvn/wrapper/MavenWrapperDownloader.java",
".mvn/wrapper/maven-wrapper.properties",
Expand All @@ -65,41 +70,27 @@ void mavenWrapperIsContributedWhenGeneratingMavenProject() {

@Test
void mavenPomIsContributedWhenGeneratingMavenProject() {
ProjectDescription description = initProjectDescription();
ProjectDescription description = new ProjectDescription();
description.setPlatformVersion(Version.parse("2.1.0.RELEASE"));
Path project = generateProject(description);
List<String> relativePaths = this.projectGenerationTester
.getRelativePathsOfProjectFiles(project);
List<String> relativePaths = this.projectTester.generate(description)
.getRelativePathsOfProjectFiles();
assertThat(relativePaths).contains("pom.xml");
}

@Test
void warPackagingIsUsedWhenBuildingProjectThatUsesWarPackaging() throws IOException {
ProjectDescription description = initProjectDescription();
ProjectDescription description = new ProjectDescription();
description.setPlatformVersion(Version.parse("2.1.0.RELEASE"));
description.setLanguage(new JavaLanguage());
description.setPackaging(new WarPackaging());
Path project = generateProject(description);
List<String> relativePaths = this.projectGenerationTester
.getRelativePathsOfProjectFiles(project);
ProjectStructure projectStructure = this.projectTester.generate(description);
List<String> relativePaths = projectStructure.getRelativePathsOfProjectFiles();
assertThat(relativePaths).contains("pom.xml");
try (Stream<String> lines = Files.lines(project.resolve("pom.xml"))) {
try (Stream<String> lines = Files.lines(projectStructure.resolve("pom.xml"))) {
assertThat(lines
.filter((line) -> line.contains(" <packaging>war</packaging>")))
.hasSize(1);
}
}

private Path generateProject(ProjectDescription description) {
return this.projectGenerationTester.generateProject(description,
BuildProjectGenerationConfiguration.class,
MavenProjectGenerationConfiguration.class);
}

private ProjectDescription initProjectDescription() {
ProjectDescription description = new ProjectDescription();
description.setBuildSystem(new MavenBuildSystem());
return description;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.spring.code.SourceCodeProjectGenerationConfiguration;
import io.spring.initializr.generator.test.project.ProjectGenerationTester;
import io.spring.initializr.generator.test.project.ProjectStructure;
import io.spring.initializr.generator.util.Version;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
Expand All @@ -43,31 +44,35 @@
@ExtendWith(TempDirectory.class)
class GroovyProjectGenerationConfigurationTests {

private final ProjectGenerationTester projectGenerationTester;
private final ProjectGenerationTester projectTester;

GroovyProjectGenerationConfigurationTests(@TempDir Path directory) {
this.projectGenerationTester = new ProjectGenerationTester(directory);
this.projectTester = new ProjectGenerationTester().withDefaultContextInitializer()
.withConfiguration(SourceCodeProjectGenerationConfiguration.class,
GroovyProjectGenerationConfiguration.class)
.withDirectory(directory).withDescriptionCustomizer((description) -> {
description.setLanguage(new GroovyLanguage());
description.setPlatformVersion(Version.parse("2.1.0.RELEASE"));
description.setBuildSystem(new MavenBuildSystem());
});
}

@Test
void mainClassIsContributed() {
ProjectDescription description = initProjectDescription();
Path project = generateProject(description);
List<String> relativePaths = this.projectGenerationTester
.getRelativePathsOfProjectFiles(project);
List<String> relativePaths = this.projectTester.generate(new ProjectDescription())
.getRelativePathsOfProjectFiles();
assertThat(relativePaths)
.contains("src/main/groovy/com/example/DemoApplication.groovy");
}

@Test
void testClassIsContributed() throws IOException {
ProjectDescription description = initProjectDescription();
Path project = generateProject(description);
List<String> relativePaths = this.projectGenerationTester
.getRelativePathsOfProjectFiles(project);
ProjectStructure projectStructure = this.projectTester
.generate(new ProjectDescription());
List<String> relativePaths = projectStructure.getRelativePathsOfProjectFiles();
assertThat(relativePaths)
.contains("src/test/groovy/com/example/DemoApplicationTests.groovy");
List<String> lines = Files.readAllLines(project
List<String> lines = Files.readAllLines(projectStructure
.resolve("src/test/groovy/com/example/DemoApplicationTests.groovy"));
assertThat(lines).containsExactly("package com.example", "",
"import org.junit.Test", "import org.junit.runner.RunWith",
Expand All @@ -81,16 +86,15 @@ void testClassIsContributed() throws IOException {
@Test
void servletInitializerIsContributedWhenGeneratingProjectThatUsesWarPackaging()
throws IOException {
ProjectDescription description = initProjectDescription();
ProjectDescription description = new ProjectDescription();
description.setPackaging(new WarPackaging());
description.setApplicationName("Demo2Application");
Path project = generateProject(description);
List<String> relativePaths = this.projectGenerationTester
.getRelativePathsOfProjectFiles(project);
ProjectStructure projectStructure = this.projectTester.generate(description);
List<String> relativePaths = projectStructure.getRelativePathsOfProjectFiles();
assertThat(relativePaths)
.contains("src/main/groovy/com/example/ServletInitializer.groovy");
List<String> lines = Files.readAllLines(
project.resolve("src/main/groovy/com/example/ServletInitializer.groovy"));
List<String> lines = Files.readAllLines(projectStructure
.resolve("src/main/groovy/com/example/ServletInitializer.groovy"));
assertThat(lines).containsExactly("package com.example", "",
"import org.springframework.boot.builder.SpringApplicationBuilder",
"import org.springframework.boot.web.servlet.support.SpringBootServletInitializer",
Expand All @@ -100,18 +104,4 @@ void servletInitializerIsContributedWhenGeneratingProjectThatUsesWarPackaging()
" application.sources(Demo2Application)", " }", "", "}", "");
}

private Path generateProject(ProjectDescription description) {
return this.projectGenerationTester.generateProject(description,
SourceCodeProjectGenerationConfiguration.class,
GroovyProjectGenerationConfiguration.class);
}

private ProjectDescription initProjectDescription() {
ProjectDescription description = new ProjectDescription();
description.setLanguage(new GroovyLanguage());
description.setPlatformVersion(Version.parse("2.1.0.RELEASE"));
description.setBuildSystem(new MavenBuildSystem());
return description;
}

}
Loading

0 comments on commit c243db0

Please sign in to comment.