mirror of
https://gitee.com/dcren/initializr.git
synced 2026-06-29 02:21:54 +08:00
Adding field declaration for code generation
See gh-881
This commit is contained in:
committed by
Stephane Nicoll
parent
d8a5be76f5
commit
e7d5f8ffaf
@@ -26,6 +26,7 @@ import java.util.List;
|
||||
import io.spring.initializr.generator.io.IndentingWriterFactory;
|
||||
import io.spring.initializr.generator.language.Annotation;
|
||||
import io.spring.initializr.generator.language.Parameter;
|
||||
import io.spring.initializr.generator.language.java.JavaPrimitives;
|
||||
import io.spring.initializr.generator.test.io.TextTestUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
@@ -114,6 +115,61 @@ class GroovySourceCodeWriterTests {
|
||||
" SpringApplication.run(Test, args)", " }", "", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void field() throws IOException {
|
||||
GroovySourceCode sourceCode = new GroovySourceCode();
|
||||
GroovyCompilationUnit compilationUnit = sourceCode.createCompilationUnit("com.example", "Test");
|
||||
GroovyTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
||||
test.addFieldDeclaration(GroovyFieldDeclaration.field("testString").returning(GroovyString.CLASS_NAME));
|
||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.groovy");
|
||||
assertThat(lines).containsExactly("package com.example", "", "class Test {", "", " String testString", "",
|
||||
"}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void fieldsWithValues() throws IOException {
|
||||
GroovySourceCode sourceCode = new GroovySourceCode();
|
||||
GroovyCompilationUnit compilationUnit = sourceCode.createCompilationUnit("com.example", "Test");
|
||||
GroovyTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
||||
test.addFieldDeclaration(GroovyFieldDeclaration.field("testInteger").value(GroovyPrimitives.integerValue(42))
|
||||
.returning(GroovyPrimitives.GroovyInteger.BOXED_CLASS_NAME));
|
||||
test.addFieldDeclaration(GroovyFieldDeclaration.field("testDouble").modifiers(Modifier.PRIVATE)
|
||||
.value(GroovyPrimitives.doubleValue(1986d)).returning(JavaPrimitives.JavaDouble.TYPE));
|
||||
test.addFieldDeclaration(GroovyFieldDeclaration.field("testLong").value(GroovyPrimitives.longValue(1986L))
|
||||
.returning(GroovyPrimitives.GroovyLong.TYPE));
|
||||
test.addFieldDeclaration(GroovyFieldDeclaration.field("testNullBoolean")
|
||||
.value(GroovyPrimitives.booleanValue(null)).returning(GroovyPrimitives.GroovyBoolean.BOXED_CLASS_NAME));
|
||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.groovy");
|
||||
assertThat(lines).containsExactly("package com.example", "", "class Test {", "", " Integer testInteger = 42",
|
||||
"", " private double testDouble = 1986.0", "", " long testLong = 1986L", "",
|
||||
" Boolean testNullBoolean = null", "", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void privateField() throws IOException {
|
||||
GroovySourceCode sourceCode = new GroovySourceCode();
|
||||
GroovyCompilationUnit compilationUnit = sourceCode.createCompilationUnit("com.example", "Test");
|
||||
GroovyTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
||||
test.addFieldDeclaration(GroovyFieldDeclaration.field("testString").modifiers(Modifier.PRIVATE)
|
||||
.returning(GroovyString.CLASS_NAME));
|
||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.groovy");
|
||||
assertThat(lines).containsExactly("package com.example", "", "class Test {", "",
|
||||
" private String testString", "", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void fieldAnnotation() throws IOException {
|
||||
GroovySourceCode sourceCode = new GroovySourceCode();
|
||||
GroovyCompilationUnit compilationUnit = sourceCode.createCompilationUnit("com.example", "Test");
|
||||
GroovyTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
||||
test.addFieldDeclaration(GroovyFieldDeclaration.field("testString")
|
||||
.withAnnotation(Annotation.name("org.springframework.beans.factory.annotation.Autowired"))
|
||||
.returning(GroovyString.CLASS_NAME));
|
||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.groovy");
|
||||
assertThat(lines).containsExactly("package com.example", "", "class Test {", "", " @Autowired",
|
||||
" String testString", "", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void annotationWithSimpleAttribute() throws IOException {
|
||||
List<String> lines = writeClassAnnotation(Annotation.name("org.springframework.test.TestApplication",
|
||||
|
||||
@@ -36,6 +36,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
* Tests for {@link JavaSourceCodeWriter}.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
* @author Matt Berteaux
|
||||
*/
|
||||
class JavaSourceCodeWriterTests {
|
||||
|
||||
@@ -88,13 +89,70 @@ class JavaSourceCodeWriterTests {
|
||||
JavaCompilationUnit compilationUnit = sourceCode.createCompilationUnit("com.example", "Test");
|
||||
JavaTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
||||
test.addMethodDeclaration(JavaMethodDeclaration.method("trim").returning("java.lang.String")
|
||||
.modifiers(Modifier.PUBLIC).parameters(new Parameter("java.lang.String", "value"))
|
||||
.modifiers(Modifier.PUBLIC).parameters(new Parameter(JavaString.CLASS_NAME, "value"))
|
||||
.body(new JavaReturnStatement(new JavaMethodInvocation("value", "trim"))));
|
||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.java");
|
||||
assertThat(lines).containsExactly("package com.example;", "", "class Test {", "",
|
||||
" public String trim(String value) {", " return value.trim();", " }", "", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void field() throws IOException {
|
||||
JavaSourceCode sourceCode = new JavaSourceCode();
|
||||
JavaCompilationUnit compilationUnit = sourceCode.createCompilationUnit("com.example", "Test");
|
||||
JavaTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
||||
test.modifiers(Modifier.PUBLIC);
|
||||
test.addFieldDeclaration(
|
||||
JavaFieldDeclaration.field("testString").modifiers(Modifier.PRIVATE).returning(JavaString.CLASS_NAME));
|
||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.java");
|
||||
assertThat(lines).containsExactly("package com.example;", "", "public class Test {", "",
|
||||
" private String testString;", "", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void fieldAnnotation() throws IOException {
|
||||
JavaSourceCode sourceCode = new JavaSourceCode();
|
||||
JavaCompilationUnit compilationUnit = sourceCode.createCompilationUnit("com.example", "Test");
|
||||
JavaTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
||||
test.modifiers(Modifier.PUBLIC);
|
||||
JavaFieldDeclaration field = JavaFieldDeclaration.field("testString").modifiers(Modifier.PRIVATE)
|
||||
.returning(JavaString.CLASS_NAME);
|
||||
field.annotate(Annotation.name("org.springframework.beans.factory.annotation.Autowired"));
|
||||
test.addFieldDeclaration(field);
|
||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.java");
|
||||
assertThat(lines).containsExactly("package com.example;", "",
|
||||
"import org.springframework.beans.factory.annotation.Autowired;", "", "public class Test {", "",
|
||||
" @Autowired", " private String testString;", "", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void fields() throws IOException {
|
||||
JavaSourceCode sourceCode = new JavaSourceCode();
|
||||
JavaCompilationUnit compilationUnit = sourceCode.createCompilationUnit("com.example", "Test");
|
||||
JavaTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
||||
test.modifiers(Modifier.PUBLIC);
|
||||
test.addFieldDeclaration(JavaFieldDeclaration.field("testString").modifiers(Modifier.PRIVATE)
|
||||
.value(JavaString.stringValue("Test String")).returning(JavaString.CLASS_NAME));
|
||||
test.addFieldDeclaration(JavaFieldDeclaration.field("testChar").modifiers(Modifier.PRIVATE | Modifier.TRANSIENT)
|
||||
.value(JavaPrimitives.charValue("\\u03a9")).returning(JavaPrimitives.JavaChar.TYPE));
|
||||
test.addFieldDeclaration(JavaFieldDeclaration.field("testInt").modifiers(Modifier.PRIVATE | Modifier.FINAL)
|
||||
.value(JavaPrimitives.integerValue(1337)).returning(JavaPrimitives.JavaInteger.TYPE));
|
||||
test.addFieldDeclaration(JavaFieldDeclaration.field("testDouble").modifiers(Modifier.PRIVATE)
|
||||
.value(JavaPrimitives.doubleValue(3.14)).returning(JavaPrimitives.JavaDouble.BOXED_CLASS_NAME));
|
||||
test.addFieldDeclaration(JavaFieldDeclaration.field("testLong").modifiers(Modifier.PRIVATE)
|
||||
.value(JavaPrimitives.longValue(1986L)).returning(JavaPrimitives.JavaLong.BOXED_CLASS_NAME));
|
||||
test.addFieldDeclaration(JavaFieldDeclaration.field("testFloat").value(JavaPrimitives.floatValue(99.999f))
|
||||
.returning(JavaPrimitives.JavaFloat.TYPE));
|
||||
test.addFieldDeclaration(JavaFieldDeclaration.field("testBool").packagePrivate()
|
||||
.value(JavaPrimitives.booleanValue(true)).returning(JavaPrimitives.JavaBoolean.TYPE));
|
||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.java");
|
||||
assertThat(lines).containsExactly("package com.example;", "", "public class Test {", "",
|
||||
" private String testString = \"Test String\";", "",
|
||||
" private transient char testChar = '\\u03a9';", "", " private final int testInt = 1337;", "",
|
||||
" private Double testDouble = 3.14;", "", " private Long testLong = 1986L;", "",
|
||||
" public float testFloat = 99.999f;", "", " boolean testBool = true;", "", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void springBootApplication() throws IOException {
|
||||
JavaSourceCode sourceCode = new JavaSourceCode();
|
||||
|
||||
@@ -89,7 +89,7 @@ class KotlinSourceCodeWriterTests {
|
||||
KotlinTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
||||
test.addFunctionDeclaration(KotlinFunctionDeclaration.function("reverse").returning("java.lang.String")
|
||||
.parameters(new Parameter("java.lang.String", "echo"))
|
||||
.body(new KotlinReturnStatement(new KotlinFunctionInvocation("echo", "reversed"))));
|
||||
.body(new KotlinReturnStatement(new KotlinMethodInvocation("echo", "reversed"))));
|
||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.kt");
|
||||
assertThat(lines).containsExactly("package com.example", "", "class Test {", "",
|
||||
" fun reverse(echo: String): String {", " return echo.reversed()", " }", "", "}");
|
||||
@@ -103,7 +103,7 @@ class KotlinSourceCodeWriterTests {
|
||||
test.addFunctionDeclaration(KotlinFunctionDeclaration.function("toString")
|
||||
.modifiers(KotlinModifier.OVERRIDE, KotlinModifier.PUBLIC, KotlinModifier.OPEN)
|
||||
.returning("java.lang.String")
|
||||
.body(new KotlinReturnStatement(new KotlinFunctionInvocation("super", "toString"))));
|
||||
.body(new KotlinReturnStatement(new KotlinMethodInvocation("super", "toString"))));
|
||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.kt");
|
||||
assertThat(lines).containsExactly("package com.example", "", "class Test {", "",
|
||||
" open override fun toString(): String {", " return super.toString()", " }", "", "}");
|
||||
@@ -178,6 +178,102 @@ class KotlinSourceCodeWriterTests {
|
||||
"@TestApplication(target = One::class, unit = ChronoUnit.NANOS)", "class Test");
|
||||
}
|
||||
|
||||
@Test
|
||||
void valProperty() throws IOException {
|
||||
KotlinSourceCode sourceCode = new KotlinSourceCode();
|
||||
KotlinCompilationUnit compilationUnit = sourceCode.createCompilationUnit("com.example", "Test");
|
||||
KotlinTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
||||
test.addPropertyDeclaration(
|
||||
KotlinPropertyDeclaration.val("testProp").returning(KotlinString.CLASS_NAME).emptyValue());
|
||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.kt");
|
||||
assertThat(lines).containsExactly("package com.example", "", "class Test {", "", " val testProp: String", "",
|
||||
"}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void valGetterProperty() throws IOException {
|
||||
KotlinSourceCode sourceCode = new KotlinSourceCode();
|
||||
KotlinCompilationUnit compilationUnit = sourceCode.createCompilationUnit("com.example", "Test");
|
||||
KotlinTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
||||
test.addPropertyDeclaration(KotlinPropertyDeclaration.val("testProp").returning(KotlinString.CLASS_NAME)
|
||||
.value(KotlinString.stringValue("This is a TEST")));
|
||||
test.addPropertyDeclaration(KotlinPropertyDeclaration.val("withGetter").returning(KotlinString.CLASS_NAME)
|
||||
.getter().withBody(new KotlinExpressionStatement(new KotlinMethodInvocation("testProp", "toLowerCase")))
|
||||
.buildAccessor().emptyValue());
|
||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.kt");
|
||||
assertThat(lines).containsExactly("package com.example", "", "class Test {", "",
|
||||
" val testProp: String = \"This is a TEST\"", "", " val withGetter: String",
|
||||
" get() = testProp.toLowerCase()", "", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void varProperty() throws IOException {
|
||||
KotlinSourceCode sourceCode = new KotlinSourceCode();
|
||||
KotlinCompilationUnit compilationUnit = sourceCode.createCompilationUnit("com.example", "Test");
|
||||
KotlinTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
||||
test.addPropertyDeclaration(KotlinPropertyDeclaration.var("testProp").returning(KotlinString.CLASS_NAME)
|
||||
.value(KotlinString.stringValue("This is a test")));
|
||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.kt");
|
||||
assertThat(lines).containsExactly("package com.example", "", "class Test {", "",
|
||||
" var testProp: String = \"This is a test\"", "", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void varPrivateSetterProperty() throws IOException {
|
||||
KotlinSourceCode sourceCode = new KotlinSourceCode();
|
||||
KotlinCompilationUnit compilationUnit = sourceCode.createCompilationUnit("com.example", "Test");
|
||||
KotlinTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
||||
test.addPropertyDeclaration(KotlinPropertyDeclaration.var("testProp").returning(KotlinString.CLASS_NAME)
|
||||
.setter().isPrivate().buildAccessor().value(KotlinString.stringValue("This is a test")));
|
||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.kt");
|
||||
assertThat(lines).containsExactly("package com.example", "", "class Test {", "",
|
||||
" var testProp: String = \"This is a test\"", " private set", "", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void varAnnotateSetterProperty() throws IOException {
|
||||
KotlinSourceCode sourceCode = new KotlinSourceCode();
|
||||
KotlinCompilationUnit compilationUnit = sourceCode.createCompilationUnit("com.example", "Test");
|
||||
KotlinTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
||||
test.addPropertyDeclaration(KotlinPropertyDeclaration.var("testProp").returning(KotlinString.CLASS_NAME)
|
||||
.setter().withAnnotation(Annotation.name("org.springframework.beans.factory.annotation.Autowired"))
|
||||
.buildAccessor().value(KotlinString.stringValue("This is a test")));
|
||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.kt");
|
||||
assertThat(lines).containsExactly("package com.example", "", "class Test {", "",
|
||||
" var testProp: String = \"This is a test\"", " @Autowired set", "", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void varProperties() throws IOException {
|
||||
KotlinSourceCode sourceCode = new KotlinSourceCode();
|
||||
KotlinCompilationUnit compilationUnit = sourceCode.createCompilationUnit("com.example", "Test");
|
||||
KotlinTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
||||
test.addPropertyDeclaration(KotlinPropertyDeclaration.var("testProp")
|
||||
.returning(KotlinPrimitives.KotlinInt.BOXED_CLASS_NAME).value(KotlinPrimitives.integerValue(42)));
|
||||
test.addPropertyDeclaration(KotlinPropertyDeclaration.var("testDouble")
|
||||
.returning(KotlinPrimitives.KotlinDouble.BOXED_CLASS_NAME).value(KotlinPrimitives.doubleValue(1986d)));
|
||||
test.addPropertyDeclaration(
|
||||
KotlinPropertyDeclaration.var("testFloat").value(KotlinPrimitives.floatValue(99.999f)));
|
||||
test.addPropertyDeclaration(KotlinPropertyDeclaration.var("testLong")
|
||||
.returning(KotlinPrimitives.KotlinLong.BOXED_CLASS_NAME).value(KotlinPrimitives.longValue(1986L)));
|
||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.kt");
|
||||
assertThat(lines).containsExactly("package com.example", "", "class Test {", "", " var testProp: Int = 42",
|
||||
"", " var testDouble: Double = 1986.0", "", " var testFloat = 99.999f", "",
|
||||
" var testLong: Long = 1986L", "", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void varEmptyProperty() throws IOException {
|
||||
KotlinSourceCode sourceCode = new KotlinSourceCode();
|
||||
KotlinCompilationUnit compilationUnit = sourceCode.createCompilationUnit("com.example", "Test");
|
||||
KotlinTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
||||
test.addPropertyDeclaration(KotlinPropertyDeclaration.var("testProp")
|
||||
.returning(KotlinPrimitives.KotlinInt.BOXED_CLASS_NAME).empty());
|
||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.kt");
|
||||
assertThat(lines).containsExactly("package com.example", "", "class Test {", "", " var testProp: Int", "",
|
||||
"}");
|
||||
}
|
||||
|
||||
private List<String> writeClassAnnotation(Annotation annotation) throws IOException {
|
||||
KotlinSourceCode sourceCode = new KotlinSourceCode();
|
||||
KotlinCompilationUnit compilationUnit = sourceCode.createCompilationUnit("com.example", "Test");
|
||||
|
||||
Reference in New Issue
Block a user