Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ jobs:
- 'io.github.cdsap.projectgenerator.ProjectGeneratorE2EJdk21Test'
- 'io.github.cdsap.projectgenerator.RoomDiVariantsAssembleE2EValidationTest'
- 'io.github.cdsap.projectgenerator.AndroidKotlinMultiplatformLibraryE2EValidationTest'
- 'io.github.cdsap.projectgenerator.Agp9NewDslDiVariantsE2EValidationTest'
runs-on: ubuntu-latest
timeout-minutes: 60
needs: unit-tests
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/update-gradle-versions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ jobs:
- 'io.github.cdsap.projectgenerator.RoomDiVariantsAssembleE2EValidationTest'
- 'io.github.cdsap.projectgenerator.AndroidKotlinMultiplatformLibraryE2EValidationTest'
- 'io.github.cdsap.projectgenerator.SupportedGradleVersionsE2ETest'
- 'io.github.cdsap.projectgenerator.Agp9NewDslDiVariantsE2EValidationTest'
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package io.github.cdsap.projectgenerator.generator.rootproject

import io.github.cdsap.projectgenerator.generator.extension.isAgp9
import io.github.cdsap.projectgenerator.model.DependencyInjection
import io.github.cdsap.projectgenerator.model.Gradle
import io.github.cdsap.projectgenerator.model.Processor
import io.github.cdsap.projectgenerator.model.Versions
Expand All @@ -17,10 +15,6 @@ class GradleProperties {
// Disable K2 for KSP 2.0
add("ksp.useKSP2=false")
}
if (versions.di == DependencyInjection.HILT && versions.android.agp.isAgp9()) {
// Hilt is not compatible with AGP9 new DSL
add("android.newDsl=false")
}
if (isGradle97(gradle)) {
// Isolated Projects + KSP IP-compatible task wiring (Gradle 9.7 only)
add("org.gradle.unsafe.isolated-projects=true")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package io.github.cdsap.projectgenerator

import io.github.cdsap.projectgenerator.DefaultTestVersions.Companion.LATEST_GRADLE
import io.github.cdsap.projectgenerator.model.ClassesPerModule
import io.github.cdsap.projectgenerator.model.ClassesPerModuleType
import io.github.cdsap.projectgenerator.model.DependencyInjection
import io.github.cdsap.projectgenerator.model.Language
import io.github.cdsap.projectgenerator.model.Project
import io.github.cdsap.projectgenerator.model.Shape
import io.github.cdsap.projectgenerator.model.TypeOfStringResources
import io.github.cdsap.projectgenerator.model.TypeProjectRequested
import io.github.cdsap.projectgenerator.model.Versions
import io.github.cdsap.projectgenerator.writer.GradleWrapper
import org.gradle.testkit.runner.GradleRunner
import org.junit.jupiter.api.Assertions.assertFalse
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.io.TempDir
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.EnumSource
import java.io.File
import java.nio.file.Path

class Agp9NewDslDiVariantsE2EValidationTest {
@TempDir
lateinit var tempDir: Path

@ParameterizedTest
@EnumSource(DependencyInjection::class)
fun `agp9 android project without newDsl opt-out compiles and reuses configuration cache`(
di: DependencyInjection
) {
val projectName = "agp9_newdsl_${di.name.lowercase()}"
ProjectGenerator(
modules = 6,
shape = Shape.FLAT,
language = Language.KTS,
typeOfProjectRequested = TypeProjectRequested.ANDROID,
classesPerModule = ClassesPerModule(ClassesPerModuleType.FIXED, 10),
versions = Versions(
project = Project(jdk = "21"),
di = di
),
typeOfStringResources = TypeOfStringResources.NORMAL,
layers = 2,
generateUnitTest = false,
gradle = GradleWrapper(LATEST_GRADLE),
projectRootPath = "${tempDir.toFile().path}/$projectName/project_kts",
projectName = projectName
).write()

val projectDir = File("$tempDir/$projectName/project_kts")
AndroidSdkTestSupport.writeLocalProperties(projectDir)

val gradleProperties = File(projectDir, "gradle.properties").readText()
assertFalse(
gradleProperties.contains("android.newDsl"),
"Generated gradle.properties must not opt out of AGP 9 new DSL for $di"
)

val first = runWithConfigurationCache(projectDir)
assertTrue(first.output.contains("BUILD SUCCESSFUL"))
assertTrue(
first.output.contains("Configuration cache entry stored") ||
first.output.contains("Calculating task graph"),
"Expected configuration cache to store an entry for $di:\n${first.output}"
)

val second = runWithConfigurationCache(projectDir)
assertTrue(second.output.contains("BUILD SUCCESSFUL"))
assertTrue(
second.output.contains("Reusing configuration cache") ||
second.output.contains("Configuration cache entry reused"),
"Expected configuration cache reuse for $di:\n${second.output}"
)
}

private fun runWithConfigurationCache(projectDir: File) = GradleRunner.create()
.withProjectDir(projectDir)
.withArguments("--configuration-cache", "assembleDebug")
.build()
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,27 +65,32 @@ class GradlePropertiesTest {
}

@Test
fun `includes android newDsl override for hilt on agp9`() {
fun `does not include android newDsl override for hilt on agp9`() {
val versions = Versions(
android = Android(agp = "9.1.0"),
di = DependencyInjection.HILT
)

val gradleProperties = GradleProperties().get(versions, Gradle("9.6.1"))

Assertions.assertTrue(gradleProperties.contains("android.newDsl=false"))
Assertions.assertFalse(gradleProperties.contains("android.newDsl"))
}

@Test
fun `does not include android newDsl override for hilt on agp8`() {
val versions = Versions(
android = Android(agp = "8.10.0"),
di = DependencyInjection.HILT
)
fun `does not include android newDsl override for any di on agp9`() {
DependencyInjection.entries.forEach { di ->
val versions = Versions(
android = Android(agp = "9.4.0"),
di = di
)

val gradleProperties = GradleProperties().get(versions, Gradle("9.6.1"))
val gradleProperties = GradleProperties().get(versions, Gradle("9.6.1"))

Assertions.assertFalse(gradleProperties.contains("android.newDsl=false"))
Assertions.assertFalse(
gradleProperties.contains("android.newDsl"),
"Unexpected android.newDsl property for $di"
)
}
}

@Test
Expand Down
Loading