From c12b642ceb93b9e61cdd0b3fe5c5eaa85b672678 Mon Sep 17 00:00:00 2001 From: sijun-yang Date: Fri, 15 Aug 2025 23:43:55 +0900 Subject: [PATCH] Add GradleSettingsComplianceTests Signed-off-by: sijun-yang --- .../gradle/GradleSettingsComplianceTests.java | 103 ++++++++++++++++++ .../custom-artifact-id-settings.gradle.gen | 1 + ...custom-artifact-id-settings.gradle.kts.gen | 1 + .../gradle/plugin-mapping-settings.gradle.gen | 10 ++ .../plugin-mapping-settings.gradle.kts.gen | 10 ++ .../plugin-repository-settings.gradle.gen | 7 ++ .../plugin-repository-settings.gradle.kts.gen | 7 ++ .../project/gradle/settings.gradle.gen | 1 + .../project/gradle/settings.gradle.kts.gen | 1 + 9 files changed, 141 insertions(+) create mode 100755 initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/gradle/GradleSettingsComplianceTests.java create mode 100644 initializr-generator-spring/src/test/resources/project/gradle/custom-artifact-id-settings.gradle.gen create mode 100644 initializr-generator-spring/src/test/resources/project/gradle/custom-artifact-id-settings.gradle.kts.gen create mode 100644 initializr-generator-spring/src/test/resources/project/gradle/plugin-mapping-settings.gradle.gen create mode 100644 initializr-generator-spring/src/test/resources/project/gradle/plugin-mapping-settings.gradle.kts.gen create mode 100644 initializr-generator-spring/src/test/resources/project/gradle/plugin-repository-settings.gradle.gen create mode 100644 initializr-generator-spring/src/test/resources/project/gradle/plugin-repository-settings.gradle.kts.gen create mode 100644 initializr-generator-spring/src/test/resources/project/gradle/settings.gradle.gen create mode 100644 initializr-generator-spring/src/test/resources/project/gradle/settings.gradle.kts.gen diff --git a/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/gradle/GradleSettingsComplianceTests.java b/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/gradle/GradleSettingsComplianceTests.java new file mode 100755 index 0000000000..d631b6baa5 --- /dev/null +++ b/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/gradle/GradleSettingsComplianceTests.java @@ -0,0 +1,103 @@ +/* + * Copyright 2012 - present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.initializr.generator.spring.build.gradle; + +import java.util.stream.Stream; + +import io.spring.initializr.generator.buildsystem.BuildSystem; +import io.spring.initializr.generator.buildsystem.Dependency; +import io.spring.initializr.generator.buildsystem.MavenRepository; +import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSettings; +import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSystem; +import io.spring.initializr.generator.language.Language; +import io.spring.initializr.generator.language.groovy.GroovyLanguage; +import io.spring.initializr.generator.language.java.JavaLanguage; +import io.spring.initializr.generator.language.kotlin.KotlinLanguage; +import io.spring.initializr.generator.spring.AbstractComplianceTests; +import io.spring.initializr.generator.spring.build.BuildCustomizer; +import io.spring.initializr.generator.test.project.ProjectStructure; +import io.spring.initializr.generator.version.VersionReference; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import org.springframework.core.io.ClassPathResource; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Gradle settings compliance tests. + * + * @author Sijun Yang + */ +class GradleSettingsComplianceTests extends AbstractComplianceTests { + + static Stream parameters() { + return Stream.of(new JavaLanguage(), new GroovyLanguage(), new KotlinLanguage()) + .flatMap((language) -> Stream.of( + Arguments.of(language, BuildSystem.forId(GradleBuildSystem.ID), "settings.gradle"), + Arguments.of(language, + BuildSystem.forIdAndDialect(GradleBuildSystem.ID, GradleBuildSystem.DIALECT_KOTLIN), + "settings.gradle.kts"))); + } + + @ParameterizedTest + @MethodSource("parameters") + void defaultProjectSettings(Language language, BuildSystem build, String fileName) { + ProjectStructure project = generateProject(language, build, "2.7.0"); + String path = "project/gradle/" + getAssertFileName(fileName); + assertThat(project).textFile(fileName).as("Resource " + path).hasSameContentAs(new ClassPathResource(path)); + } + + @ParameterizedTest + @MethodSource("parameters") + void customArtifactId(Language language, BuildSystem build, String fileName) { + ProjectStructure project = generateProject(language, build, "2.7.0", + (description) -> description.setArtifactId("my-project")); + String path = "project/gradle/custom-artifact-id-" + getAssertFileName(fileName); + assertThat(project).textFile(fileName).as("Resource " + path).hasSameContentAs(new ClassPathResource(path)); + } + + @ParameterizedTest + @MethodSource("parameters") + void pluginRepository(Language language, BuildSystem build, String fileName) { + ProjectStructure project = generateProject(language, build, "2.7.0", (description) -> { + }, (context) -> context.registerBean(BuildCustomizer.class, + () -> (gradleBuild) -> gradleBuild.pluginRepositories() + .add(MavenRepository.withIdAndUrl("spring-milestones", "https://repo.spring.io/milestone")))); + String path = "project/gradle/plugin-repository-" + getAssertFileName(fileName); + assertThat(project).textFile(fileName).as("Resource " + path).hasSameContentAs(new ClassPathResource(path)); + } + + @ParameterizedTest + @MethodSource("parameters") + void pluginMapping(Language language, BuildSystem build, String fileName) { + ProjectStructure project = generateProject(language, build, "2.7.0", (description) -> { + }, (context) -> context.registerBean(BuildCustomizer.class, + () -> (gradleBuild) -> ((GradleBuildSettings.Builder) gradleBuild.settings()).mapPlugin("com.example", + Dependency.withCoordinates("com.example", "gradle-plugin") + .version(VersionReference.ofValue("1.0.0")) + .build()))); + String path = "project/gradle/plugin-mapping-" + getAssertFileName(fileName); + assertThat(project).textFile(fileName).as("Resource " + path).hasSameContentAs(new ClassPathResource(path)); + } + + private String getAssertFileName(String fileName) { + return fileName + ".gen"; + } + +} diff --git a/initializr-generator-spring/src/test/resources/project/gradle/custom-artifact-id-settings.gradle.gen b/initializr-generator-spring/src/test/resources/project/gradle/custom-artifact-id-settings.gradle.gen new file mode 100644 index 0000000000..111cb6e7b8 --- /dev/null +++ b/initializr-generator-spring/src/test/resources/project/gradle/custom-artifact-id-settings.gradle.gen @@ -0,0 +1 @@ +rootProject.name = 'my-project' diff --git a/initializr-generator-spring/src/test/resources/project/gradle/custom-artifact-id-settings.gradle.kts.gen b/initializr-generator-spring/src/test/resources/project/gradle/custom-artifact-id-settings.gradle.kts.gen new file mode 100644 index 0000000000..fe9794dcfb --- /dev/null +++ b/initializr-generator-spring/src/test/resources/project/gradle/custom-artifact-id-settings.gradle.kts.gen @@ -0,0 +1 @@ +rootProject.name = "my-project" diff --git a/initializr-generator-spring/src/test/resources/project/gradle/plugin-mapping-settings.gradle.gen b/initializr-generator-spring/src/test/resources/project/gradle/plugin-mapping-settings.gradle.gen new file mode 100644 index 0000000000..f73b82d7c7 --- /dev/null +++ b/initializr-generator-spring/src/test/resources/project/gradle/plugin-mapping-settings.gradle.gen @@ -0,0 +1,10 @@ +pluginManagement { + resolutionStrategy { + eachPlugin { + if (requested.id.id == 'com.example') { + useModule('com.example:gradle-plugin:1.0.0') + } + } + } +} +rootProject.name = 'demo' diff --git a/initializr-generator-spring/src/test/resources/project/gradle/plugin-mapping-settings.gradle.kts.gen b/initializr-generator-spring/src/test/resources/project/gradle/plugin-mapping-settings.gradle.kts.gen new file mode 100644 index 0000000000..6f312801e3 --- /dev/null +++ b/initializr-generator-spring/src/test/resources/project/gradle/plugin-mapping-settings.gradle.kts.gen @@ -0,0 +1,10 @@ +pluginManagement { + resolutionStrategy { + eachPlugin { + if (requested.id.id == "com.example") { + useModule("com.example:gradle-plugin:1.0.0") + } + } + } +} +rootProject.name = "demo" diff --git a/initializr-generator-spring/src/test/resources/project/gradle/plugin-repository-settings.gradle.gen b/initializr-generator-spring/src/test/resources/project/gradle/plugin-repository-settings.gradle.gen new file mode 100644 index 0000000000..af706c5b9c --- /dev/null +++ b/initializr-generator-spring/src/test/resources/project/gradle/plugin-repository-settings.gradle.gen @@ -0,0 +1,7 @@ +pluginManagement { + repositories { + maven { url = 'https://repo.spring.io/milestone' } + gradlePluginPortal() + } +} +rootProject.name = 'demo' diff --git a/initializr-generator-spring/src/test/resources/project/gradle/plugin-repository-settings.gradle.kts.gen b/initializr-generator-spring/src/test/resources/project/gradle/plugin-repository-settings.gradle.kts.gen new file mode 100644 index 0000000000..66431f0f1e --- /dev/null +++ b/initializr-generator-spring/src/test/resources/project/gradle/plugin-repository-settings.gradle.kts.gen @@ -0,0 +1,7 @@ +pluginManagement { + repositories { + maven { url = uri("https://repo.spring.io/milestone") } + gradlePluginPortal() + } +} +rootProject.name = "demo" diff --git a/initializr-generator-spring/src/test/resources/project/gradle/settings.gradle.gen b/initializr-generator-spring/src/test/resources/project/gradle/settings.gradle.gen new file mode 100644 index 0000000000..0a383dd840 --- /dev/null +++ b/initializr-generator-spring/src/test/resources/project/gradle/settings.gradle.gen @@ -0,0 +1 @@ +rootProject.name = 'demo' diff --git a/initializr-generator-spring/src/test/resources/project/gradle/settings.gradle.kts.gen b/initializr-generator-spring/src/test/resources/project/gradle/settings.gradle.kts.gen new file mode 100644 index 0000000000..dae155f339 --- /dev/null +++ b/initializr-generator-spring/src/test/resources/project/gradle/settings.gradle.kts.gen @@ -0,0 +1 @@ +rootProject.name = "demo"