From 2856bee780d2b946f1ab91a55ae36981419f86ec Mon Sep 17 00:00:00 2001 From: Guillermo Mazzola Date: Tue, 25 Feb 2025 23:40:11 -0300 Subject: [PATCH] Added tests for `NativeLibrariesReportTransform` --- .../lock/NativeLibrariesReportTransform.kt | 6 +- .../lock/AndroidManifestLockTaskTest.kt | 25 ++- .../NativeLibrariesReportTransformTest.kt | 171 ++++++++++++++++++ 3 files changed, 191 insertions(+), 11 deletions(-) create mode 100644 plugin/src/test/kotlin/io/github/gmazzo/android/manifest/lock/NativeLibrariesReportTransformTest.kt diff --git a/plugin/src/main/kotlin/io/github/gmazzo/android/manifest/lock/NativeLibrariesReportTransform.kt b/plugin/src/main/kotlin/io/github/gmazzo/android/manifest/lock/NativeLibrariesReportTransform.kt index 0b9119b..81de782 100644 --- a/plugin/src/main/kotlin/io/github/gmazzo/android/manifest/lock/NativeLibrariesReportTransform.kt +++ b/plugin/src/main/kotlin/io/github/gmazzo/android/manifest/lock/NativeLibrariesReportTransform.kt @@ -37,8 +37,10 @@ abstract class NativeLibrariesReportTransform : TransformAction - yaml.encodeToStream(libraries.takeUnless { it.isEmpty() }, out) + if (libraries.isNotEmpty()) { + outputs.file("${file.name}.jni.yaml").outputStream().use { out -> + yaml.encodeToStream(libraries, out) + } } } diff --git a/plugin/src/test/kotlin/io/github/gmazzo/android/manifest/lock/AndroidManifestLockTaskTest.kt b/plugin/src/test/kotlin/io/github/gmazzo/android/manifest/lock/AndroidManifestLockTaskTest.kt index b86af72..2123916 100644 --- a/plugin/src/test/kotlin/io/github/gmazzo/android/manifest/lock/AndroidManifestLockTaskTest.kt +++ b/plugin/src/test/kotlin/io/github/gmazzo/android/manifest/lock/AndroidManifestLockTaskTest.kt @@ -5,7 +5,6 @@ import org.gradle.kotlin.dsl.dependencies import org.gradle.kotlin.dsl.getValue import org.gradle.kotlin.dsl.newInstance import org.gradle.kotlin.dsl.register -import org.gradle.kotlin.dsl.repositories import org.gradle.testfixtures.ProjectBuilder import java.io.File import kotlin.test.Test @@ -13,22 +12,30 @@ import kotlin.test.assertEquals class AndroidManifestLockTaskTest { - private val tempDir = File(System.getenv("TEMP_DIR")!!).apply { deleteRecursively(); mkdirs() } + private val tempDir = File(System.getenv("TEMP_DIR")!!, "taskTest").apply { + deleteRecursively() + mkdirs() + } private val manifestFile = tempDir.resolve("AndroidManifest.xml").also { it.outputStream().use(javaClass.getResource("/AndroidManifest.xml")!!.openStream()::copyTo) } - private val manifestDependencyFile = tempDir.resolve("AndroidManifest.dependecy.jni.yaml").also { - it.outputStream().use(javaClass.getResource("/AndroidManifest.dependecy.jni.yaml")!!.openStream()::copyTo) - } + private val manifestDependencyFile = + tempDir.resolve("AndroidManifest.dependecy.jni.yaml").also { + it.outputStream().use( + javaClass.getResource("/AndroidManifest.dependecy.jni.yaml")!!.openStream()::copyTo + ) + } private val manifestLockFile = tempDir.resolve("AndroidManifest.lock.yaml") - private val task = with(ProjectBuilder.builder() - .withProjectDir(tempDir) - .withGradleUserHomeDir(tempDir.resolve(".home")) - .build()) { + private val task = with( + ProjectBuilder.builder() + .withProjectDir(tempDir) + .withGradleUserHomeDir(tempDir.resolve(".home")) + .build() + ) { val debugDependencies by configurations.creating diff --git a/plugin/src/test/kotlin/io/github/gmazzo/android/manifest/lock/NativeLibrariesReportTransformTest.kt b/plugin/src/test/kotlin/io/github/gmazzo/android/manifest/lock/NativeLibrariesReportTransformTest.kt new file mode 100644 index 0000000..c28b7ca --- /dev/null +++ b/plugin/src/test/kotlin/io/github/gmazzo/android/manifest/lock/NativeLibrariesReportTransformTest.kt @@ -0,0 +1,171 @@ +package io.github.gmazzo.android.manifest.lock + +import com.android.build.gradle.internal.publishing.AndroidArtifacts.ArtifactType +import io.github.gmazzo.android.manifest.lock.AndroidManifestLockPlugin.Companion.JNI_REPORT_ARTIFACT_TYPE +import org.gradle.api.Action +import org.gradle.api.artifacts.type.ArtifactTypeDefinition.ARTIFACT_TYPE_ATTRIBUTE +import org.gradle.api.problems.Problem +import org.gradle.api.problems.ProblemId +import org.gradle.api.problems.ProblemSpec +import org.gradle.api.problems.internal.AdditionalDataBuilderFactory +import org.gradle.api.problems.internal.InternalProblem +import org.gradle.api.problems.internal.InternalProblemBuilder +import org.gradle.api.problems.internal.InternalProblemReporter +import org.gradle.api.problems.internal.InternalProblemSpec +import org.gradle.api.problems.internal.InternalProblems +import org.gradle.api.problems.internal.ProblemsProgressEventEmitterHolder +import org.gradle.internal.operations.OperationIdentifier +import org.gradle.internal.reflect.Instantiator +import org.gradle.kotlin.dsl.creating +import org.gradle.kotlin.dsl.dependencies +import org.gradle.kotlin.dsl.getValue +import org.gradle.kotlin.dsl.registerTransform +import org.gradle.kotlin.dsl.repositories +import org.gradle.testfixtures.ProjectBuilder +import java.io.File +import java.lang.RuntimeException +import kotlin.test.Test +import kotlin.test.assertEquals + +class NativeLibrariesReportTransformTest { + + private val tempDir = File(System.getenv("TEMP_DIR")!!, "transformTest").apply { + deleteRecursively() + mkdirs() + } + + private val configuration = with( + ProjectBuilder.builder() + .withProjectDir(tempDir) + .withGradleUserHomeDir(tempDir.resolve(".home")) + .build() + ) { + gradleIssue31862Workaround() + + val debugDependencies by configurations.creating + + dependencies { + registerTransform(NativeLibrariesReportTransform::class) { + from.attribute(ARTIFACT_TYPE_ATTRIBUTE, ArtifactType.AAR.type) + to.attribute(ARTIFACT_TYPE_ATTRIBUTE, JNI_REPORT_ARTIFACT_TYPE) + } + + debugDependencies("androidx.camera:camera-core:1.4.1") + } + + repositories { + mavenCentral() + google() + } + + debugDependencies.incoming + .artifactView { + attributes.attribute( + ARTIFACT_TYPE_ATTRIBUTE, + JNI_REPORT_ARTIFACT_TYPE + ) + } + } + + @Test + fun `transform produces a yaml file`() { + val files = configuration.files.associate { it.name to it.readText().trim() } + + assertEquals( + mapOf( + "camera-core-1.4.1.aar.jni.yaml" to """ + libimage_processing_util_jni: + - arm64-v8a + - armeabi-v7a + - x86 + - x86_64 + libsurface_util_jni: + - arm64-v8a + - armeabi-v7a + - x86 + - x86_64 + """.trimIndent().trim(), + ), + files, + ) + } + + // TODO workaround for + private fun gradleIssue31862Workaround() = + ProblemsProgressEventEmitterHolder.init(object : InternalProblems { + + override fun getInternalReporter() = object : InternalProblemReporter { + + override fun report( + problem: Problem, + id: OperationIdentifier + ) { + TODO("Not yet implemented") + } + + override fun internalCreate(action: Action): InternalProblem { + TODO("Not yet implemented") + } + + override fun create( + problemId: ProblemId, + action: Action + ): Problem { + TODO("Not yet implemented") + } + + override fun report( + problemId: ProblemId, + spec: Action + ) { + TODO("Not yet implemented") + } + + override fun report(problem: Problem) { + TODO("Not yet implemented") + } + + override fun report(problems: Collection) { + TODO("Not yet implemented") + } + + override fun throwing( + exception: Throwable, + problemId: ProblemId, + spec: Action + ): RuntimeException { + TODO("Not yet implemented") + } + + override fun throwing( + exception: Throwable, + problem: Problem + ): RuntimeException { + TODO("Not yet implemented") + } + + override fun throwing( + exception: Throwable, + problems: Collection + ): RuntimeException { + TODO("Not yet implemented") + } + + } + + override fun getAdditionalDataBuilderFactory(): AdditionalDataBuilderFactory { + TODO("Not yet implemented") + } + + override fun getInstantiator(): Instantiator { + TODO("Not yet implemented") + } + + override fun getProblemBuilder(): InternalProblemBuilder { + TODO("Not yet implemented") + } + + override fun getReporter() = getInternalReporter() + + }) +}