Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make paparazzi aware or unit test dependencies #1468

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
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
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package app.cash.paparazzi.gradle

import app.cash.paparazzi.gradle.utils.artifactsFor
import com.android.build.api.variant.Component
import com.android.build.api.variant.Variant
import com.android.build.gradle.internal.publishing.AndroidArtifacts
import org.gradle.api.artifacts.component.ProjectComponentIdentifier
Expand All @@ -12,21 +13,22 @@ import org.gradle.api.provider.Provider
* All the relevant sources for a given Android variant.
*/
internal class AndroidVariantSources(
private val variant: Variant
private val variant: Variant,
private val testVariant: Component
) {
val localResourceDirs: Provider<List<Directory>>? by lazy {
variant.sources.res?.all?.map { layers -> layers.flatten() }?.map { it.asReversed() }
}

// https://android.googlesource.com/platform/tools/base/+/96015063acd3455a76cdf1cc71b23b0828c0907f/build-system/gradle-core/src/main/java/com/android/build/gradle/tasks/MergeResources.kt#875
val moduleResourceDirs: FileCollection by lazy {
variant.runtimeConfiguration
testVariant.runtimeConfiguration
.artifactsFor(AndroidArtifacts.ArtifactType.ANDROID_RES.type) { it is ProjectComponentIdentifier }
.artifactFiles
}

val aarExplodedDirs: FileCollection by lazy {
variant.runtimeConfiguration
testVariant.runtimeConfiguration
.artifactsFor(AndroidArtifacts.ArtifactType.ANDROID_RES.type) { it !is ProjectComponentIdentifier }
.artifactFiles
}
Expand All @@ -37,19 +39,19 @@ internal class AndroidVariantSources(

// https://android.googlesource.com/platform/tools/base/+/96015063acd3455a76cdf1cc71b23b0828c0907f/build-system/gradle-core/src/main/java/com/android/build/gradle/tasks/MergeResources.kt#875
val moduleAssetDirs: FileCollection by lazy {
variant.runtimeConfiguration
testVariant.runtimeConfiguration
.artifactsFor(AndroidArtifacts.ArtifactType.ASSETS.type) { it is ProjectComponentIdentifier }
.artifactFiles
}

val aarAssetDirs: FileCollection by lazy {
variant.runtimeConfiguration
testVariant.runtimeConfiguration
.artifactsFor(AndroidArtifacts.ArtifactType.ASSETS.type) { it !is ProjectComponentIdentifier }
.artifactFiles
}

val packageAwareArtifactFiles: FileCollection by lazy {
variant.runtimeConfiguration
testVariant.runtimeConfiguration
.artifactsFor(AndroidArtifacts.ArtifactType.SYMBOL_LIST_WITH_PACKAGE_NAME.type)
.artifactFiles
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ public class PaparazziPlugin @Inject constructor(
val gradleUserHomeDir = project.gradle.gradleUserHomeDir
val reportOutputDir = project.extensions.getByType(ReportingExtension::class.java).baseDirectory.dir("paparazzi/${variant.name}")

val sources = AndroidVariantSources(variant)
val sources = AndroidVariantSources(variant, testVariant)

val writeResourcesTask = project.tasks.register(
"preparePaparazzi${variantSlug}Resources",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public abstract class PrepareResourcesTask : DefaultTask() {
artifactFiles.files.forEach { file ->
add(file.useLines { lines -> lines.first() })
}
}
}.distinct()
} else {
listOf(mainPackage)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -810,6 +810,7 @@ class PaparazziPluginTest {
"build/generated/res/extra"
)
assertThat(config.moduleResourceDirs).containsExactly(
"build/intermediates/packaged_res/debug/packageDebugResources",
"../module1/build/intermediates/packaged_res/debug/packageDebugResources",
"../module2/build/intermediates/packaged_res/debug/packageDebugResources"
)
Expand Down Expand Up @@ -846,6 +847,7 @@ class PaparazziPluginTest {
"build/generated/res/extra"
)
assertThat(config.moduleResourceDirs).containsExactly(
"build/intermediates/packaged_res/debug/packageDebugResources",
"../module1/build/intermediates/packaged_res/debug/packageDebugResources",
"../module2/build/intermediates/packaged_res/debug/packageDebugResources"
)
Expand All @@ -854,6 +856,40 @@ class PaparazziPluginTest {
.containsExactly("^caches/[0-9]{1,2}.[0-9](.[0-9])?/transforms/[0-9a-f]{32}/transformed/external/res\$")
}

@Test
fun verifyResourcesGeneratedForTestDependencies() {
val fixtureRoot = File("src/test/projects/verify-test-resources")

val result = gradleRunner
.withArguments(":consumer:testDebug", "--stacktrace")
.runFixture(fixtureRoot) { build() }

assertThat(result.task(":consumer:preparePaparazziDebugResources")).isNotNull()

val resourcesFile = File(fixtureRoot, "consumer/build/intermediates/paparazzi/debug/resources.json")
assertThat(resourcesFile.exists()).isTrue()

val config = resourcesFile.loadConfig()
assertThat(config.mainPackage).isEqualTo("app.cash.paparazzi.plugin.test")
assertThat(config.resourcePackageNames).containsExactly(
"app.cash.paparazzi.plugin.test",
"app.cash.paparazzi.plugin.test.testmodule",
"app.cash.paparazzi.plugin.test.runtimetestmodule"
)
assertThat(config.projectResourceDirs).containsExactly(
"src/main/res",
"src/debug/res",
"build/generated/res/resValues/debug",
"build/generated/res/extra"
)
assertThat(config.moduleResourceDirs).containsExactly(
"build/intermediates/packaged_res/debug/packageDebugResources",
"../test-module/build/intermediates/packaged_res/debug/packageDebugResources",
"../runtime-test-module/build/intermediates/packaged_res/debug/packageDebugResources"
)
assertThat(config.aarExplodedDirs).isEmpty()
}

@Test
fun verifyResourcesUpdatedWhenLocalResourceChanges() {
val fixtureRoot = File("src/test/projects/verify-update-local-resources-change")
Expand Down Expand Up @@ -952,7 +988,10 @@ class PaparazziPluginTest {
val resourcesFile = File(consumerModuleRoot, "build/intermediates/paparazzi/debug/resources.json")

var config = resourcesFile.loadConfig()
assertThat(config.moduleResourceDirs).containsExactly("../producer/build/intermediates/packaged_res/debug/packageDebugResources")
assertThat(config.moduleResourceDirs).containsExactly(
"build/intermediates/packaged_res/debug/packageDebugResources",
"../producer/build/intermediates/packaged_res/debug/packageDebugResources"
)

buildDir.deleteRecursively()

Expand All @@ -974,7 +1013,10 @@ class PaparazziPluginTest {
}

config = resourcesFile.loadConfig()
assertThat(config.moduleResourceDirs).containsExactly("../producer/build/intermediates/packaged_res/debug/packageDebugResources")
assertThat(config.moduleResourceDirs).containsExactly(
"build/intermediates/packaged_res/debug/packageDebugResources",
"../producer/build/intermediates/packaged_res/debug/packageDebugResources"
)
}

@Test
Expand Down Expand Up @@ -1064,7 +1106,11 @@ class PaparazziPluginTest {
val resourcesFile = File(fixtureRoot, "build/intermediates/paparazzi/debug/resources.json")

var config = resourcesFile.loadConfig()
assertThat(config.projectAssetDirs).containsExactly("src/main/assets", "src/debug/assets")
assertThat(config.projectAssetDirs).containsExactly(
"src/main/assets",
"src/debug/assets",
"build/intermediates/library_assets/debug/packageDebugAssets/out"
)

buildDir.deleteRecursively()

Expand All @@ -1087,7 +1133,11 @@ class PaparazziPluginTest {
}

config = resourcesFile.loadConfig()
assertThat(config.projectAssetDirs).containsExactly("src/main/assets", "src/debug/assets")
assertThat(config.projectAssetDirs).containsExactly(
"src/main/assets",
"src/debug/assets",
"build/intermediates/library_assets/debug/packageDebugAssets/out"
)
}

@Test
Expand Down Expand Up @@ -1128,6 +1178,7 @@ class PaparazziPluginTest {
assertThat(config.projectAssetDirs).containsExactly(
"src/main/assets",
"src/debug/assets",
"build/intermediates/library_assets/debug/packageDebugAssets/out",
"../producer/build/intermediates/library_assets/debug/packageDebugAssets/out"
)

Expand Down Expand Up @@ -1155,6 +1206,7 @@ class PaparazziPluginTest {
assertThat(config.projectAssetDirs).containsExactly(
"src/main/assets",
"src/debug/assets",
"build/intermediates/library_assets/debug/packageDebugAssets/out",
"../producer/build/intermediates/library_assets/debug/packageDebugAssets/out"
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
kotlin.mpp.androidSourceSetLayoutVersion1.nowarn=true
android.useAndroidX=true
alyssoncs marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
plugins {
id 'com.android.library'
id 'kotlin-android'
id 'app.cash.paparazzi'
}

android {
namespace 'app.cash.paparazzi.plugin.test'
compileSdk libs.versions.compileSdk.get() as int
defaultConfig {
minSdk libs.versions.minSdk.get() as int
}
compileOptions {
sourceCompatibility = libs.versions.javaTarget.get()
targetCompatibility = libs.versions.javaTarget.get()
}
libraryVariants.configureEach {
it.registerGeneratedResFolders(project.layout.buildDirectory.files("generated/res/extra"))
}
}

dependencies {
testImplementation projects.testModule
testRuntimeOnly projects.runtimeTestModule
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
</resources>
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
plugins {
id 'com.android.library'
id 'kotlin-android'
id 'app.cash.paparazzi'
}

android {
namespace 'app.cash.paparazzi.plugin.test.runtimetestmodule'
compileSdk libs.versions.compileSdk.get() as int
defaultConfig {
minSdk libs.versions.minSdk.get() as int
}
compileOptions {
sourceCompatibility = libs.versions.javaTarget.get()
targetCompatibility = libs.versions.javaTarget.get()
}
kotlinOptions {
jvmTarget = libs.versions.javaTarget.get()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
</resources>
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
apply from: '../test.settings.gradle'

include ':consumer'
include ':test-module'
include ':runtime-test-module'
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
plugins {
id 'com.android.library'
id 'kotlin-android'
id 'app.cash.paparazzi'
}

android {
namespace 'app.cash.paparazzi.plugin.test.testmodule'
compileSdk libs.versions.compileSdk.get() as int
defaultConfig {
minSdk libs.versions.minSdk.get() as int
}
compileOptions {
sourceCompatibility = libs.versions.javaTarget.get()
targetCompatibility = libs.versions.javaTarget.get()
}
kotlinOptions {
jvmTarget = libs.versions.javaTarget.get()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
</resources>