mirror of
https://gitee.com/dcren/initializr.git
synced 2026-02-25 21:22:58 +08:00
Polish test utilities
This commit is contained in:
@@ -46,8 +46,8 @@ class ProjectGeneratorIntegrationTests {
|
||||
|
||||
@BeforeEach
|
||||
void setup(@TempDir Path directory) {
|
||||
this.projectTester = new ProjectGeneratorTester().withDirectory(directory).withBean(InitializrMetadata.class,
|
||||
() -> InitializrMetadataTestBuilder.withDefaults().build());
|
||||
this.projectTester = new ProjectGeneratorTester().withDirectory(directory).withIndentingWriterFactory()
|
||||
.withBean(InitializrMetadata.class, () -> InitializrMetadataTestBuilder.withDefaults().build());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -19,11 +19,14 @@ package io.spring.initializr.generator.test.project;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import io.spring.initializr.generator.io.IndentingWriterFactory;
|
||||
import io.spring.initializr.generator.io.SimpleIndentStrategy;
|
||||
import io.spring.initializr.generator.project.MutableProjectDescription;
|
||||
import io.spring.initializr.generator.project.ProjectDirectoryFactory;
|
||||
import io.spring.initializr.generator.project.ProjectGenerationContext;
|
||||
@@ -43,10 +46,6 @@ public abstract class AbstractProjectGenerationTester<SELF extends AbstractProje
|
||||
|
||||
private final Consumer<MutableProjectDescription> descriptionCustomizer;
|
||||
|
||||
protected AbstractProjectGenerationTester(Map<Class<?>, Supplier<?>> beanDefinitions) {
|
||||
this(beanDefinitions, defaultContextInitializer(), defaultDescriptionCustomizer());
|
||||
}
|
||||
|
||||
protected AbstractProjectGenerationTester(Map<Class<?>, Supplier<?>> beanDefinitions,
|
||||
Consumer<ProjectGenerationContext> contextInitializer,
|
||||
Consumer<MutableProjectDescription> descriptionCustomizer) {
|
||||
@@ -55,6 +54,32 @@ public abstract class AbstractProjectGenerationTester<SELF extends AbstractProje
|
||||
this.contextInitializer = contextInitializer;
|
||||
}
|
||||
|
||||
protected AbstractProjectGenerationTester() {
|
||||
this(Collections.emptyMap(), emptyContextInitializer(), defaultDescriptionCustomizer());
|
||||
}
|
||||
|
||||
private static Consumer<ProjectGenerationContext> emptyContextInitializer() {
|
||||
return (context) -> {
|
||||
};
|
||||
}
|
||||
|
||||
private static Consumer<MutableProjectDescription> defaultDescriptionCustomizer() {
|
||||
return (projectDescription) -> {
|
||||
if (projectDescription.getGroupId() == null) {
|
||||
projectDescription.setGroupId("com.example");
|
||||
}
|
||||
if (projectDescription.getArtifactId() == null) {
|
||||
projectDescription.setArtifactId("demo");
|
||||
}
|
||||
if (projectDescription.getVersion() == null) {
|
||||
projectDescription.setVersion("0.0.1-SNAPSHOT");
|
||||
}
|
||||
if (projectDescription.getApplicationName() == null) {
|
||||
projectDescription.setApplicationName("DemoApplication");
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
protected abstract SELF newInstance(Map<Class<?>, Supplier<?>> beanDefinitions,
|
||||
Consumer<ProjectGenerationContext> contextInitializer,
|
||||
Consumer<MutableProjectDescription> descriptionCustomizer);
|
||||
@@ -70,6 +95,15 @@ public abstract class AbstractProjectGenerationTester<SELF extends AbstractProje
|
||||
() -> (description) -> Files.createTempDirectory(directory, "project-"));
|
||||
}
|
||||
|
||||
public SELF withIndentingWriterFactory() {
|
||||
return withBean(IndentingWriterFactory.class,
|
||||
() -> IndentingWriterFactory.create(new SimpleIndentStrategy(" ")));
|
||||
}
|
||||
|
||||
public SELF withConfiguration(Class<?>... configurationClasses) {
|
||||
return withContextInitializer((context) -> context.register(configurationClasses));
|
||||
}
|
||||
|
||||
public SELF withContextInitializer(Consumer<ProjectGenerationContext> context) {
|
||||
return newInstance(this.beanDefinitions, this.contextInitializer.andThen(context), this.descriptionCustomizer);
|
||||
}
|
||||
@@ -79,28 +113,6 @@ public abstract class AbstractProjectGenerationTester<SELF extends AbstractProje
|
||||
this.descriptionCustomizer.andThen(description));
|
||||
}
|
||||
|
||||
protected static Consumer<ProjectGenerationContext> defaultContextInitializer() {
|
||||
return (context) -> {
|
||||
};
|
||||
}
|
||||
|
||||
protected static Consumer<MutableProjectDescription> defaultDescriptionCustomizer() {
|
||||
return (projectDescription) -> {
|
||||
if (projectDescription.getGroupId() == null) {
|
||||
projectDescription.setGroupId("com.example");
|
||||
}
|
||||
if (projectDescription.getArtifactId() == null) {
|
||||
projectDescription.setArtifactId("demo");
|
||||
}
|
||||
if (projectDescription.getVersion() == null) {
|
||||
projectDescription.setVersion("0.0.1-SNAPSHOT");
|
||||
}
|
||||
if (projectDescription.getApplicationName() == null) {
|
||||
projectDescription.setApplicationName("DemoApplication");
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
protected <T> T invokeProjectGeneration(MutableProjectDescription description,
|
||||
ProjectGenerationInvoker<T> invoker) {
|
||||
this.descriptionCustomizer.accept(description);
|
||||
|
||||
@@ -17,15 +17,12 @@
|
||||
package io.spring.initializr.generator.test.project;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import io.spring.initializr.generator.io.IndentingWriterFactory;
|
||||
import io.spring.initializr.generator.io.SimpleIndentStrategy;
|
||||
import io.spring.initializr.generator.project.MutableProjectDescription;
|
||||
import io.spring.initializr.generator.project.ProjectAssetGenerator;
|
||||
import io.spring.initializr.generator.project.ProjectDescription;
|
||||
@@ -40,20 +37,21 @@ import org.springframework.boot.test.context.runner.ContextConsumer;
|
||||
/**
|
||||
* A tester for project asset that does not detect available {@link ProjectContributor
|
||||
* contributors} and does not register any bean to the context. Contributors can be added
|
||||
* using a {@link #withConfiguration(Class[]) configuration class} or a
|
||||
* {@link #withContextInitializer(Consumer) customization of the project generation
|
||||
* using {@linkplain #withBean(Class, Supplier) bean registration}, a
|
||||
* {@linkplain #withConfiguration(Class[]) configuration class} or via the
|
||||
* {@linkplain #withContextInitializer(Consumer) customization of the project generation
|
||||
* context}.
|
||||
* <p>
|
||||
* Alternatively, the context can be queried the same way {@link ApplicationContextRunner}
|
||||
* works by {@link #configure(MutableProjectDescription, ContextConsumer) configuring} the
|
||||
* context.
|
||||
* works by {@linkplain #configure(MutableProjectDescription, ContextConsumer)
|
||||
* configuring} the context.
|
||||
*
|
||||
* @author Stephane Nicoll
|
||||
*/
|
||||
public class ProjectAssetTester extends AbstractProjectGenerationTester<ProjectAssetTester> {
|
||||
|
||||
public ProjectAssetTester() {
|
||||
super(Collections.emptyMap());
|
||||
super();
|
||||
}
|
||||
|
||||
private ProjectAssetTester(Map<Class<?>, Supplier<?>> beanDefinitions,
|
||||
@@ -69,15 +67,6 @@ public class ProjectAssetTester extends AbstractProjectGenerationTester<ProjectA
|
||||
return new ProjectAssetTester(beanDefinitions, contextInitializer, descriptionCustomizer);
|
||||
}
|
||||
|
||||
public ProjectAssetTester withIndentingWriterFactory() {
|
||||
return withBean(IndentingWriterFactory.class,
|
||||
() -> IndentingWriterFactory.create(new SimpleIndentStrategy(" ")));
|
||||
}
|
||||
|
||||
public ProjectAssetTester withConfiguration(Class<?>... configurationClasses) {
|
||||
return withContextInitializer((context) -> context.register(configurationClasses));
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure a {@link ProjectGenerationContext} using the specified
|
||||
* {@code description} and use the {@link ContextConsumer} to assert the context.
|
||||
|
||||
@@ -17,42 +17,39 @@
|
||||
package io.spring.initializr.generator.test.project;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import io.spring.initializr.generator.io.IndentingWriterFactory;
|
||||
import io.spring.initializr.generator.io.SimpleIndentStrategy;
|
||||
import io.spring.initializr.generator.project.DefaultProjectAssetGenerator;
|
||||
import io.spring.initializr.generator.project.MutableProjectDescription;
|
||||
import io.spring.initializr.generator.project.ProjectAssetGenerator;
|
||||
import io.spring.initializr.generator.project.ProjectGenerationConfiguration;
|
||||
import io.spring.initializr.generator.project.ProjectGenerationContext;
|
||||
import io.spring.initializr.generator.project.ProjectGenerator;
|
||||
|
||||
/**
|
||||
* A tester class for {@link ProjectGenerator}.
|
||||
* A tester class for {@link ProjectGenerator}. Contrary to {@link ProjectAssetTester},
|
||||
* standard {@link ProjectGenerationConfiguration} classes are processed
|
||||
* automatically.Extra beans can be added using {@linkplain #withBean(Class, Supplier)
|
||||
* bean registration}, a {@linkplain #withConfiguration(Class[]) configuration class} or
|
||||
* via the {@linkplain #withContextInitializer(Consumer) customization of the project
|
||||
* generation context}.
|
||||
*
|
||||
* @author Stephane Nicoll
|
||||
*/
|
||||
public class ProjectGeneratorTester extends AbstractProjectGenerationTester<ProjectGeneratorTester> {
|
||||
|
||||
public ProjectGeneratorTester() {
|
||||
super();
|
||||
}
|
||||
|
||||
private ProjectGeneratorTester(Map<Class<?>, Supplier<?>> beanDefinitions,
|
||||
Consumer<ProjectGenerationContext> contextInitializer,
|
||||
Consumer<MutableProjectDescription> descriptionCustomizer) {
|
||||
super(beanDefinitions, contextInitializer, descriptionCustomizer);
|
||||
}
|
||||
|
||||
public ProjectGeneratorTester() {
|
||||
super(defaultBeans());
|
||||
}
|
||||
|
||||
private static Map<Class<?>, Supplier<?>> defaultBeans() {
|
||||
Map<Class<?>, Supplier<?>> beans = new HashMap<>();
|
||||
beans.put(IndentingWriterFactory.class, () -> IndentingWriterFactory.create(new SimpleIndentStrategy(" ")));
|
||||
return beans;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ProjectGeneratorTester newInstance(Map<Class<?>, Supplier<?>> beanDefinitions,
|
||||
Consumer<ProjectGenerationContext> contextInitializer,
|
||||
|
||||
@@ -20,7 +20,6 @@ import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Map;
|
||||
|
||||
import io.spring.initializr.generator.io.IndentingWriterFactory;
|
||||
import io.spring.initializr.generator.project.MutableProjectDescription;
|
||||
import io.spring.initializr.generator.project.ProjectDescription;
|
||||
import io.spring.initializr.generator.project.contributor.ProjectContributor;
|
||||
@@ -45,12 +44,6 @@ class ProjectGeneratorTesterTests {
|
||||
assertThat(contributors).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testerHasIndentingWriterFactoryByDefault() {
|
||||
new ProjectGeneratorTester().generate(new MutableProjectDescription(),
|
||||
(context) -> assertThat(context.getBeansOfType(IndentingWriterFactory.class)).hasSize(1));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testerWithDescriptionCustomizer() {
|
||||
Version platformVersion = Version.parse("2.1.0.RELEASE");
|
||||
|
||||
Reference in New Issue
Block a user