Update ClassNameGenerator to work with a ClassName target
This commit updates ClassNameGenerator so that it uses a ClassName for its default target. This makes sure that a target that has been generated can be used. See gh-29027
This commit is contained in:
@@ -32,71 +32,69 @@ import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException
|
||||
*/
|
||||
class ClassNameGeneratorTests {
|
||||
|
||||
private final ClassNameGenerator generator = new ClassNameGenerator(Object.class);
|
||||
private static final ClassName TEST_TARGET = ClassName.get("com.example", "Test");
|
||||
|
||||
private final ClassNameGenerator generator = new ClassNameGenerator(TEST_TARGET);
|
||||
|
||||
@Test
|
||||
void generateClassNameWhenTargetClassIsNullUsesMainTarget() {
|
||||
ClassName generated = this.generator.generateClassName("test", null);
|
||||
assertThat(generated).hasToString("java.lang.Object__Test");
|
||||
assertThat(generated).hasToString("com.example.Test__Test");
|
||||
}
|
||||
|
||||
@Test
|
||||
void generateClassNameUseFeatureNamePrefix() {
|
||||
ClassName generated = new ClassNameGenerator(Object.class, "One")
|
||||
.generateClassName("test", InputStream.class);
|
||||
ClassName generated = new ClassNameGenerator(TEST_TARGET, "One")
|
||||
.generateClassName("test", ClassName.get(InputStream.class));
|
||||
assertThat(generated).hasToString("java.io.InputStream__OneTest");
|
||||
}
|
||||
|
||||
@Test
|
||||
void generateClassNameWithNoTextFeatureNamePrefix() {
|
||||
ClassName generated = new ClassNameGenerator(Object.class, " ")
|
||||
.generateClassName("test", InputStream.class);
|
||||
ClassName generated = new ClassNameGenerator(TEST_TARGET, " ")
|
||||
.generateClassName("test", ClassName.get(InputStream.class));
|
||||
assertThat(generated).hasToString("java.io.InputStream__Test");
|
||||
}
|
||||
|
||||
@Test
|
||||
void generatedClassNameWhenFeatureIsEmptyThrowsException() {
|
||||
assertThatIllegalArgumentException()
|
||||
.isThrownBy(() -> this.generator.generateClassName("", InputStream.class))
|
||||
.isThrownBy(() -> this.generator.generateClassName("", ClassName.get(InputStream.class)))
|
||||
.withMessage("'featureName' must not be empty");
|
||||
}
|
||||
|
||||
@Test
|
||||
void generatedClassNameWhenFeatureIsNotAllLettersThrowsException() {
|
||||
assertThat(this.generator.generateClassName("name!", InputStream.class))
|
||||
assertThat(this.generator.generateClassName("name!", ClassName.get(InputStream.class)))
|
||||
.hasToString("java.io.InputStream__Name");
|
||||
assertThat(this.generator.generateClassName("1NameHere", InputStream.class))
|
||||
assertThat(this.generator.generateClassName("1NameHere", ClassName.get(InputStream.class)))
|
||||
.hasToString("java.io.InputStream__NameHere");
|
||||
assertThat(this.generator.generateClassName("Y0pe", InputStream.class))
|
||||
assertThat(this.generator.generateClassName("Y0pe", ClassName.get(InputStream.class)))
|
||||
.hasToString("java.io.InputStream__YPe");
|
||||
}
|
||||
|
||||
@Test
|
||||
void generateClassNameWithClassWhenLowercaseFeatureNameGeneratesName() {
|
||||
ClassName generated = this.generator.generateClassName("bytes", InputStream.class);
|
||||
ClassName generated = this.generator.generateClassName("bytes", ClassName.get(InputStream.class));
|
||||
assertThat(generated).hasToString("java.io.InputStream__Bytes");
|
||||
}
|
||||
|
||||
@Test
|
||||
void generateClassNameWithClassWhenInnerClassGeneratesName() {
|
||||
ClassName generated = this.generator.generateClassName("EventListener", TestBean.class);
|
||||
ClassName innerBean = ClassName.get("com.example", "Test", "InnerBean");
|
||||
ClassName generated = this.generator.generateClassName("EventListener", innerBean);
|
||||
assertThat(generated)
|
||||
.hasToString("org.springframework.aot.generate.ClassNameGeneratorTests_TestBean__EventListener");
|
||||
.hasToString("com.example.Test_InnerBean__EventListener");
|
||||
}
|
||||
|
||||
@Test
|
||||
void generateClassWithClassWhenMultipleCallsGeneratesSequencedName() {
|
||||
ClassName generated1 = this.generator.generateClassName("bytes", InputStream.class);
|
||||
ClassName generated2 = this.generator.generateClassName("bytes", InputStream.class);
|
||||
ClassName generated3 = this.generator.generateClassName("bytes", InputStream.class);
|
||||
ClassName generated1 = this.generator.generateClassName("bytes",ClassName.get(InputStream.class));
|
||||
ClassName generated2 = this.generator.generateClassName("bytes", ClassName.get(InputStream.class));
|
||||
ClassName generated3 = this.generator.generateClassName("bytes", ClassName.get(InputStream.class));
|
||||
assertThat(generated1).hasToString("java.io.InputStream__Bytes");
|
||||
assertThat(generated2).hasToString("java.io.InputStream__Bytes1");
|
||||
assertThat(generated3).hasToString("java.io.InputStream__Bytes2");
|
||||
}
|
||||
|
||||
|
||||
static class TestBean {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.aot.generate.GeneratedFiles.Kind;
|
||||
import org.springframework.aot.hint.RuntimeHints;
|
||||
import org.springframework.javapoet.ClassName;
|
||||
import org.springframework.javapoet.TypeSpec;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@@ -35,10 +36,12 @@ import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException
|
||||
*/
|
||||
class DefaultGenerationContextTests {
|
||||
|
||||
private static final ClassName SAMPLE_TARGET = ClassName.get("com.example", "SampleTarget");
|
||||
|
||||
private static final Consumer<TypeSpec.Builder> typeSpecCustomizer = type -> {};
|
||||
|
||||
private final GeneratedClasses generatedClasses = new GeneratedClasses(
|
||||
new ClassNameGenerator(SampleTarget.class));
|
||||
new ClassNameGenerator(SAMPLE_TARGET));
|
||||
|
||||
private final InMemoryGeneratedFiles generatedFiles = new InMemoryGeneratedFiles();
|
||||
|
||||
@@ -48,7 +51,7 @@ class DefaultGenerationContextTests {
|
||||
@Test
|
||||
void createWithOnlyGeneratedFilesCreatesContext() {
|
||||
DefaultGenerationContext context = new DefaultGenerationContext(
|
||||
new ClassNameGenerator(SampleTarget.class), this.generatedFiles);
|
||||
new ClassNameGenerator(SAMPLE_TARGET), this.generatedFiles);
|
||||
assertThat(context.getGeneratedFiles()).isSameAs(this.generatedFiles);
|
||||
assertThat(context.getRuntimeHints()).isInstanceOf(RuntimeHints.class);
|
||||
}
|
||||
@@ -109,7 +112,7 @@ class DefaultGenerationContextTests {
|
||||
@Test
|
||||
void withNameUpdateNamingConvention() {
|
||||
DefaultGenerationContext context = new DefaultGenerationContext(
|
||||
new ClassNameGenerator(SampleTarget.class), this.generatedFiles);
|
||||
new ClassNameGenerator(SAMPLE_TARGET), this.generatedFiles);
|
||||
GenerationContext anotherContext = context.withName("Another");
|
||||
GeneratedClass generatedClass = anotherContext.getGeneratedClasses()
|
||||
.addForFeature("Test", typeSpecCustomizer);
|
||||
@@ -119,7 +122,7 @@ class DefaultGenerationContextTests {
|
||||
@Test
|
||||
void withNameKeepsTrackOfAllGeneratedFiles() {
|
||||
DefaultGenerationContext context = new DefaultGenerationContext(
|
||||
new ClassNameGenerator(SampleTarget.class), this.generatedFiles);
|
||||
new ClassNameGenerator(SAMPLE_TARGET), this.generatedFiles);
|
||||
context.getGeneratedClasses().addForFeature("Test", typeSpecCustomizer);
|
||||
GenerationContext anotherContext = context.withName("Another");
|
||||
assertThat(anotherContext.getGeneratedClasses()).isNotSameAs(context.getGeneratedClasses());
|
||||
@@ -133,7 +136,7 @@ class DefaultGenerationContextTests {
|
||||
@Test
|
||||
void withNameGeneratesUniqueName() {
|
||||
DefaultGenerationContext context = new DefaultGenerationContext(
|
||||
new ClassNameGenerator(Object.class), this.generatedFiles);
|
||||
new ClassNameGenerator(SAMPLE_TARGET), this.generatedFiles);
|
||||
context.withName("Test").getGeneratedClasses()
|
||||
.addForFeature("Feature", typeSpecCustomizer);
|
||||
context.withName("Test").getGeneratedClasses()
|
||||
@@ -142,11 +145,9 @@ class DefaultGenerationContextTests {
|
||||
.addForFeature("Feature", typeSpecCustomizer);
|
||||
context.writeGeneratedContent();
|
||||
assertThat(this.generatedFiles.getGeneratedFiles(Kind.SOURCE)).containsOnlyKeys(
|
||||
"java/lang/Object__TestFeature.java",
|
||||
"java/lang/Object__Test1Feature.java",
|
||||
"java/lang/Object__Test2Feature.java");
|
||||
"com/example/SampleTarget__TestFeature.java",
|
||||
"com/example/SampleTarget__Test1Feature.java",
|
||||
"com/example/SampleTarget__Test2Feature.java");
|
||||
}
|
||||
|
||||
static class SampleTarget {}
|
||||
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import java.util.function.Consumer;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.aot.generate.GeneratedFiles.Kind;
|
||||
import org.springframework.javapoet.ClassName;
|
||||
import org.springframework.javapoet.TypeSpec;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@@ -42,7 +43,7 @@ class GeneratedClassesTests {
|
||||
private static final Consumer<TypeSpec.Builder> emptyTypeCustomizer = type -> {};
|
||||
|
||||
private final GeneratedClasses generatedClasses = new GeneratedClasses(
|
||||
new ClassNameGenerator(Object.class));
|
||||
new ClassNameGenerator(ClassName.get("com.example", "Test")));
|
||||
|
||||
@Test
|
||||
void createWhenClassNameGeneratorIsNullThrowsException() {
|
||||
@@ -76,7 +77,7 @@ class GeneratedClassesTests {
|
||||
@Test
|
||||
void addForFeatureUsesDefaultTarget() {
|
||||
GeneratedClass generatedClass = this.generatedClasses.addForFeature("Test", emptyTypeCustomizer);
|
||||
assertThat(generatedClass.getName()).hasToString("java.lang.Object__Test");
|
||||
assertThat(generatedClass.getName()).hasToString("com.example.Test__Test");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user