Skip to content

Commit

Permalink
Added tests for NativeLibrariesReportTransform
Browse files Browse the repository at this point in the history
  • Loading branch information
gmazzo committed Feb 26, 2025
1 parent 34fb8bd commit 2856bee
Show file tree
Hide file tree
Showing 3 changed files with 191 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,10 @@ abstract class NativeLibrariesReportTransform : TransformAction<TransformParamet
}
}

outputs.file("${file.name}.jni.yaml").outputStream().use { out ->
yaml.encodeToStream<NativeLibrary?>(libraries.takeUnless { it.isEmpty() }, out)
if (libraries.isNotEmpty()) {
outputs.file("${file.name}.jni.yaml").outputStream().use { out ->
yaml.encodeToStream<NativeLibrary>(libraries, out)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,37 @@ 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
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

Expand Down
Original file line number Diff line number Diff line change
@@ -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<in InternalProblemSpec>): InternalProblem {
TODO("Not yet implemented")
}

override fun create(
problemId: ProblemId,
action: Action<in ProblemSpec>
): Problem {
TODO("Not yet implemented")
}

override fun report(
problemId: ProblemId,
spec: Action<in ProblemSpec>
) {
TODO("Not yet implemented")
}

override fun report(problem: Problem) {
TODO("Not yet implemented")
}

override fun report(problems: Collection<Problem?>) {
TODO("Not yet implemented")
}

override fun throwing(
exception: Throwable,
problemId: ProblemId,
spec: Action<in ProblemSpec>
): RuntimeException {
TODO("Not yet implemented")
}

override fun throwing(
exception: Throwable,
problem: Problem
): RuntimeException {
TODO("Not yet implemented")
}

override fun throwing(
exception: Throwable,
problems: Collection<Problem?>
): 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()

})
}

0 comments on commit 2856bee

Please # to comment.