Skip to content

Commit

Permalink
Fix GenerateRobolectricComposePreviewTests to support KMP
Browse files Browse the repository at this point in the history
  • Loading branch information
takahirom committed Jul 15, 2024
1 parent 298b5d1 commit e1ff464
Showing 1 changed file with 29 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import com.android.build.api.variant.Variant
import com.android.build.gradle.TestedExtension
import org.gradle.api.DefaultTask
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.repositories.MavenArtifactRepository
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.logging.Logger
Expand Down Expand Up @@ -75,7 +74,7 @@ fun generateRobolectricPreviewTestsIfNeeded(
"Roborazzi: Please enable unit tests for the variant '${variant.name}' in the 'build.gradle' file."
}
verifyMavenRepository(project)
verifyLibraryDependencies(project.configurations.getByName("testImplementation"))
verifyLibraryDependencies(project)
verifyTestConfig(testTaskProvider, androidExtension, logger)
}
}
Expand Down Expand Up @@ -181,15 +180,38 @@ private fun verifyTestConfig(
}

private fun verifyLibraryDependencies(
runtimeConfiguration: Configuration,
project: Project
) {
val dependencies = runtimeConfiguration.dependencies
.map { dependency -> dependency.group to dependency.name }
val configurations = listOf(
// Android
"testImplementation",
// KMP Android
"androidUnitTestImplementation"
)
fun dependencies(configurations: List<String>): List<Pair<String, List<Pair<String?, String>>>> {
return configurations.map { configuration ->
try {
configuration to project.configurations
.getByName(configuration).dependencies
.map { dependency -> dependency.group to dependency.name }
} catch (e: org.gradle.api.artifacts.UnknownConfigurationException) {
configuration to emptyList()
}
}
}
verifyLibraryDependencies(dependencies(configurations))
}

private fun verifyLibraryDependencies(
configurationToDependencies: List<Pair<String, List<Pair<String?, String>>>>
) {
val allDependencies = configurationToDependencies.flatMap { it.second }
val allConfigurationNames = configurationToDependencies.map { it.first }
fun checkExists(libraryName: String) {
if (!dependencies.contains(libraryName.split(":").let { it[0] to it[1] })) {
if (!allDependencies.contains(libraryName.split(":").let { it[0] to it[1] })) {
val configurationNames = allConfigurationNames.joinToString(" or ") { "'$it'" }
error(
"Roborazzi: Please add the following 'testImplementation' dependency to the 'dependencies' block in the 'build.gradle' file: '$libraryName' for the '${runtimeConfiguration.name}' configuration.\n" +
"Roborazzi: Please add the following $configurationNames dependency to the 'dependencies' block in the 'build.gradle' file: '$libraryName' for the $configurationNames configuration.\n" +
"For your convenience, visit https://www.google.com/search?q=" + URLEncoder.encode(
"$libraryName version",
"UTF-8"
Expand Down

0 comments on commit e1ff464

Please sign in to comment.