diff --git a/project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/model/Versions.kt b/project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/model/Versions.kt index 249e9a6..35af859 100644 --- a/project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/model/Versions.kt +++ b/project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/model/Versions.kt @@ -15,6 +15,10 @@ data class Versions( ) ), val additionalSettingsPlugins: List = listOf( + AdditionalPlugin( + "org.gradle.toolchains.foojay-resolver-convention", + "1.0.0" + ), AdditionalPlugin( "com.fueledbycaffeine.spotlight", "1.4.1" diff --git a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/rootproject/SettingsGradleTest.kt b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/rootproject/SettingsGradleTest.kt index 62f34d4..8ea0117 100644 --- a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/rootproject/SettingsGradleTest.kt +++ b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/rootproject/SettingsGradleTest.kt @@ -9,17 +9,20 @@ import org.junit.jupiter.api.Test class SettingsGradleTest { @Test - fun `does not include plugins block when additionalSettingsPlugins is empty and develocity is false`() { - val versions = Versions(additionalSettingsPlugins = emptyList()) - val result = SettingsGradle().get(versions, develocity = false, projectName = "testProject") + fun `includes default settings plugins when using default versions`() { + val result = SettingsGradle().get(Versions(), develocity = false, projectName = "testProject") - assertFalse( + assertTrue( result.contains("plugins {"), - "settings.gradle.kts should not contain plugins block when additionalSettingsPlugins is empty and develocity is false" + "settings.gradle.kts should contain a plugins block when default settings plugins are configured" ) - assertFalse( - result.contains("spotlight") || result.contains("com.fueledbycaffeine.spotlight"), - "settings.gradle.kts should not contain Spotlight when additionalSettingsPlugins is empty" + assertTrue( + result.contains("org.gradle.toolchains.foojay-resolver-convention"), + "settings.gradle.kts should include the Foojay toolchain resolver plugin by default" + ) + assertTrue( + result.contains("com.fueledbycaffeine.spotlight"), + "settings.gradle.kts should include Spotlight by default" ) } @@ -27,13 +30,31 @@ class SettingsGradleTest { fun `includes settings plugins when additionalSettingsPlugins is provided`() { val versions = Versions( additionalSettingsPlugins = listOf( + AdditionalPlugin("org.gradle.toolchains.foojay-resolver-convention", "1.0.0"), AdditionalPlugin("com.fueledbycaffeine.spotlight", "1.4.1") ) ) val result = SettingsGradle().get(versions, develocity = false, projectName = "testProject") assertTrue(result.contains("plugins {")) + assertTrue(result.contains("org.gradle.toolchains.foojay-resolver-convention")) assertTrue(result.contains("com.fueledbycaffeine.spotlight")) assertTrue(result.contains("1.4.1")) } + + @Test + fun `does not include foojay or spotlight when additionalSettingsPlugins is empty`() { + val versions = Versions(additionalSettingsPlugins = emptyList()) + + val result = SettingsGradle().get(versions, develocity = false, projectName = "testProject") + + assertFalse( + result.contains("org.gradle.toolchains.foojay-resolver-convention"), + "settings.gradle.kts should not contain Foojay when additionalSettingsPlugins is empty" + ) + assertFalse( + result.contains("spotlight") || result.contains("com.fueledbycaffeine.spotlight"), + "settings.gradle.kts should not contain Spotlight when additionalSettingsPlugins is empty" + ) + } } diff --git a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/writer/ConventionPluginWriterTest.kt b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/writer/ConventionPluginWriterTest.kt index 55a30ef..14b4029 100644 --- a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/writer/ConventionPluginWriterTest.kt +++ b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/writer/ConventionPluginWriterTest.kt @@ -8,6 +8,7 @@ import io.github.cdsap.projectgenerator.generator.plugins.android.CompositeBuild import io.github.cdsap.projectgenerator.generator.plugins.jvm.CompositeBuildJvmLib import io.github.cdsap.projectgenerator.model.Android import io.github.cdsap.projectgenerator.model.LanguageAttributes +import io.github.cdsap.projectgenerator.model.Project import io.github.cdsap.projectgenerator.model.TypeProjectRequested import io.github.cdsap.projectgenerator.model.Versions import org.junit.jupiter.api.Assertions.assertEquals @@ -74,6 +75,50 @@ class ConventionPluginWriterTest { } } + + @Test + fun `android convention plugins configure kotlin and java toolchains for requested jdk`() { + val versions = Versions(project = Project(jdk = "23")) + val projectName = "androidJdk23" + val language = LanguageAttributes(projectName = "${tempDir.path}/$projectName", extension = "gradle.kts") + val writer = ConventionPluginWriter( + languages = listOf(language), + versions = versions, + requested = TypeProjectRequested.ANDROID + ) + + writer.write() + + val appPluginFile = File("${language.projectName}/build-logic/convention/src/main/kotlin/com/logic/CompositeBuildPluginAndroidApp.kt") + val libPluginFile = File("${language.projectName}/build-logic/convention/src/main/kotlin/com/logic/CompositeBuildPluginAndroidLib.kt") + + val appContent = appPluginFile.readText() + assertTrue(appContent.contains("jvmToolchain(23)")) + assertTrue(appContent.contains("JavaLanguageVersion.of(23)")) + + val libContent = libPluginFile.readText() + assertTrue(libContent.contains("jvmToolchain(23)")) + assertTrue(libContent.contains("JavaLanguageVersion.of(23)")) + } + + @Test + fun `jvm convention plugin configures kotlin and java toolchains for requested jdk`() { + val versions = Versions(project = Project(jdk = "23")) + val projectName = "jvmJdk23" + val language = LanguageAttributes(projectName = "${tempDir.path}/$projectName", extension = "gradle.kts") + val writer = ConventionPluginWriter( + languages = listOf(language), + versions = versions, + requested = TypeProjectRequested.JVM + ) + + writer.write() + + val jvmLibPluginFile = File("${language.projectName}/build-logic/convention/src/main/kotlin/com/logic/PluginJvmLib.kt") + val jvmContent = jvmLibPluginFile.readText() + assertTrue(jvmContent.contains("jvmToolchain(23)")) + assertTrue(jvmContent.contains("JavaLanguageVersion.of(23)")) + } @Test fun `write should create convention plugins for multiple JVM projects`() { val projectNames = listOf("multiJvm1", "multiJvm2") diff --git a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/writer/ProjectWriterTest.kt b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/writer/ProjectWriterTest.kt index 3ddb10f..7ef8ec3 100644 --- a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/writer/ProjectWriterTest.kt +++ b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/writer/ProjectWriterTest.kt @@ -197,6 +197,39 @@ class ProjectWriterTest { } } + @Test + fun `includes default settings plugins in generated project`() { + val nodes = listOf( + ProjectGraph("module_1_1", 1, emptyList(), TypeProject.ANDROID_APP, 10), + ) + val language = LanguageAttributes("gradle.kts", "${tempDir}/project_default_settings_plugins") + val projectWriter = ProjectWriter( + nodes, + listOf(language), + Versions(), + TypeProjectRequested.ANDROID, + TypeOfStringResources.NORMAL, + false, + GradleWrapper(LATEST_GRADLE), + false, + "default_settings_plugins_project" + ) + + projectWriter.write() + + val settingsFile = File("${language.projectName}/settings.gradle.kts") + assertTrue(settingsFile.exists(), "Expected settings.gradle.kts to exist") + val settingsContent = settingsFile.readText() + assertTrue( + settingsContent.contains("org.gradle.toolchains.foojay-resolver-convention"), + "settings.gradle.kts should contain the Foojay toolchain resolver plugin by default, but contained: $settingsContent" + ) + assertTrue( + settingsContent.contains("com.fueledbycaffeine.spotlight"), + "settings.gradle.kts should contain Spotlight by default, but contained: $settingsContent" + ) + } + @Test fun `does not include settings or build plugins when additionalSettingsPlugins and additionalBuildGradleRootPlugins are empty`() { val nodes = listOf( @@ -228,6 +261,10 @@ class ProjectWriterTest { !settingsContent.contains("spotlight") && !settingsContent.contains("com.fueledbycaffeine.spotlight"), "settings.gradle.kts should not contain Spotlight plugin when additionalSettingsPlugins is empty, but contained: $settingsContent" ) + assertTrue( + !settingsContent.contains("org.gradle.toolchains.foojay-resolver-convention"), + "settings.gradle.kts should not contain the Foojay toolchain resolver plugin when additionalSettingsPlugins is empty, but contained: $settingsContent" + ) val buildFile = File("${language.projectName}/build.gradle.kts") assertTrue(buildFile.exists(), "Expected build.gradle.kts to exist")