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
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
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>