From 9b4c82b6dbc950c21aad096da2b935db49ff3739 Mon Sep 17 00:00:00 2001 From: Al Kent Date: Fri, 1 Mar 2024 09:05:26 -0600 Subject: [PATCH 1/6] Adding clean/cleanRecord tasks to help eliminate orphaned snapshots --- .../cash/paparazzi/gradle/PaparazziPlugin.kt | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt b/paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt index e854f5bf51..11723ff4a8 100644 --- a/paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt +++ b/paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt @@ -39,6 +39,7 @@ import org.gradle.api.internal.artifacts.transform.UnzipTransform import org.gradle.api.logging.LogLevel.LIFECYCLE import org.gradle.api.plugins.JavaBasePlugin import org.gradle.api.reporting.ReportingExtension +import org.gradle.api.tasks.Delete import org.gradle.api.tasks.PathSensitivity import org.gradle.api.tasks.options.Option import org.gradle.api.tasks.testing.Test @@ -77,6 +78,7 @@ public class PaparazziPlugin : Plugin { private fun setupPaparazzi(project: Project, variants: DomainObjectSet) where T : BaseVariant, T : TestedVariant { project.addTestDependency() val nativePlatformFileCollection = project.setupNativePlatformDependency() + val snapshotOutputDir = project.layout.projectDirectory.dir("src/test/snapshots") // Create anchor tasks for all variants. val verifyVariants = project.tasks.register("verifyPaparazzi") { @@ -87,6 +89,17 @@ public class PaparazziPlugin : Plugin { it.group = VERIFICATION_GROUP it.description = "Record golden images for all variants" } + val cleanRecordVariants = project.tasks.register("cleanRecordPaparazzi") { + it.group = VERIFICATION_GROUP + it.description = "Clean and record golden images for all variants" + } + + // Create a task to delete all snapshots. + val deleteSnapshots = project.tasks.register("deletePaparazziSnapshots", Delete::class.java) { + it.group = VERIFICATION_GROUP + it.description = "Delete all golden images" + it.delete(project.fileTree(snapshotOutputDir)) + } variants.all { variant -> val variantSlug = variant.name.capitalize(Locale.US) @@ -96,7 +109,6 @@ public class PaparazziPlugin : Plugin { val buildDirectory = project.layout.buildDirectory val gradleUserHomeDir = project.gradle.gradleUserHomeDir val reportOutputDir = project.extensions.getByType(ReportingExtension::class.java).baseDirectory.dir("paparazzi/${variant.name}") - val snapshotOutputDir = project.layout.projectDirectory.dir("src/test/snapshots") val localResourceDirs = project .files(variant.sourceSets.flatMap { it.resDirectories }) @@ -179,8 +191,15 @@ public class PaparazziPlugin : Plugin { val recordTaskProvider = project.tasks.register("recordPaparazzi$variantSlug", PaparazziTask::class.java) { it.group = VERIFICATION_GROUP it.description = "Record golden images for variant '${variant.name}'" + it.mustRunAfter(deleteSnapshots) } recordVariants.configure { it.dependsOn(recordTaskProvider) } + val cleanRecordTaskProvider = project.tasks.register("cleanRecordPaparazzi$variantSlug") { + it.group = VERIFICATION_GROUP + it.description = "Clean and record golden images for variant '${variant.name}'" + it.dependsOn(deleteSnapshots, recordTaskProvider) + } + cleanRecordVariants.configure { it.dependsOn(cleanRecordTaskProvider) } val verifyTaskProvider = project.tasks.register("verifyPaparazzi$variantSlug", PaparazziTask::class.java) { it.group = VERIFICATION_GROUP it.description = "Run screenshot tests for variant '${variant.name}'" From 19e8b687d797d650b74e66c2e82aa05a55c25dd3 Mon Sep 17 00:00:00 2001 From: Al Kent Date: Fri, 1 Mar 2024 11:15:58 -0600 Subject: [PATCH 2/6] shifting task graph wiring to inside task --- .../main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt b/paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt index 11723ff4a8..45bd897be3 100644 --- a/paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt +++ b/paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt @@ -93,8 +93,6 @@ public class PaparazziPlugin : Plugin { it.group = VERIFICATION_GROUP it.description = "Clean and record golden images for all variants" } - - // Create a task to delete all snapshots. val deleteSnapshots = project.tasks.register("deletePaparazziSnapshots", Delete::class.java) { it.group = VERIFICATION_GROUP it.description = "Delete all golden images" @@ -191,13 +189,13 @@ public class PaparazziPlugin : Plugin { val recordTaskProvider = project.tasks.register("recordPaparazzi$variantSlug", PaparazziTask::class.java) { it.group = VERIFICATION_GROUP it.description = "Record golden images for variant '${variant.name}'" - it.mustRunAfter(deleteSnapshots) } recordVariants.configure { it.dependsOn(recordTaskProvider) } val cleanRecordTaskProvider = project.tasks.register("cleanRecordPaparazzi$variantSlug") { it.group = VERIFICATION_GROUP it.description = "Clean and record golden images for variant '${variant.name}'" it.dependsOn(deleteSnapshots, recordTaskProvider) + recordTaskProvider.get().mustRunAfter(deleteSnapshots) } cleanRecordVariants.configure { it.dependsOn(cleanRecordTaskProvider) } val verifyTaskProvider = project.tasks.register("verifyPaparazzi$variantSlug", PaparazziTask::class.java) { From c79c145af143be4cd6f400332c20c583c0b04172 Mon Sep 17 00:00:00 2001 From: Al Kent Date: Fri, 1 Mar 2024 15:25:16 -0600 Subject: [PATCH 3/6] adding tests --- .../paparazzi/gradle/PaparazziPluginTest.kt | 37 ++++++++++++++++++ .../projects/delete-snapshots/build.gradle | 22 +++++++++++ .../cash/paparazzi/plugin/test/DeleteTest.kt | 31 +++++++++++++++ ...aparazzi.plugin.test_DeleteTest_delete.png | Bin 0 -> 30618 bytes ...zzi.plugin.test_DeleteTest_delete_keep.png | Bin 0 -> 30618 bytes 5 files changed, 90 insertions(+) create mode 100644 paparazzi-gradle-plugin/src/test/projects/delete-snapshots/build.gradle create mode 100644 paparazzi-gradle-plugin/src/test/projects/delete-snapshots/src/test/java/app/cash/paparazzi/plugin/test/DeleteTest.kt create mode 100644 paparazzi-gradle-plugin/src/test/projects/delete-snapshots/src/test/snapshots/images/app.cash.paparazzi.plugin.test_DeleteTest_delete.png create mode 100644 paparazzi-gradle-plugin/src/test/projects/delete-snapshots/src/test/snapshots/images/app.cash.paparazzi.plugin.test_DeleteTest_delete_keep.png diff --git a/paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt b/paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt index 950824e07a..22dec1dea2 100644 --- a/paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt +++ b/paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt @@ -707,6 +707,43 @@ class PaparazziPluginTest { assertThat(snapshots[2]).isSimilarTo(verticalScroll).withDefaultThreshold() } + @Test + fun deleteSnapshots() { + val fixtureRoot = File("src/test/projects/delete-snapshots") + + gradleRunner + .withArguments("deletePaparazziSnapshots", "--stacktrace") + .runFixture(fixtureRoot) { build() } + + val snapshotsDir = File(fixtureRoot, "src/test/snapshots").registerForDeletionOnExit() + + val snapshot = File(snapshotsDir, "images/app.cash.paparazzi.plugin.test_DeleteTest_delete.png") + assertThat(snapshot.exists()).isFalse() + + val snapshotWithKeep = File(snapshotsDir, "images/app.cash.paparazzi.plugin.test_DeleteTest_delete_keep.png") + assertThat(snapshotWithKeep.exists()).isFalse() + } + + @Test + fun cleanRecord() { + val fixtureRoot = File("src/test/projects/delete-snapshots") + + val result = gradleRunner + .withArguments("cleanRecordPaparazziDebug", "--stacktrace") + .runFixture(fixtureRoot) { build() } + + assertThat(result.task(":deletePaparazziSnapshots")).isNotNull() + assertThat(result.task(":recordPaparazziDebug")).isNotNull() + + val snapshotsDir = File(fixtureRoot, "src/test/snapshots").registerForDeletionOnExit() + + val snapshot = File(snapshotsDir, "images/app.cash.paparazzi.plugin.test_DeleteTest_delete.png") + assertThat(snapshot.exists()).isFalse() + + val snapshotWithKeep = File(snapshotsDir, "images/app.cash.paparazzi.plugin.test_DeleteTest_delete_keep.png") + assertThat(snapshotWithKeep.exists()).isTrue() + } + @Test fun widgets() { val fixtureRoot = File("src/test/projects/widgets") diff --git a/paparazzi-gradle-plugin/src/test/projects/delete-snapshots/build.gradle b/paparazzi-gradle-plugin/src/test/projects/delete-snapshots/build.gradle new file mode 100644 index 0000000000..bf279f74e7 --- /dev/null +++ b/paparazzi-gradle-plugin/src/test/projects/delete-snapshots/build.gradle @@ -0,0 +1,22 @@ +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() + } + kotlinOptions { + jvmTarget = libs.versions.javaTarget.get() + } +} + +apply from: '../guava-fix.gradle' diff --git a/paparazzi-gradle-plugin/src/test/projects/delete-snapshots/src/test/java/app/cash/paparazzi/plugin/test/DeleteTest.kt b/paparazzi-gradle-plugin/src/test/projects/delete-snapshots/src/test/java/app/cash/paparazzi/plugin/test/DeleteTest.kt new file mode 100644 index 0000000000..bd9bdf3308 --- /dev/null +++ b/paparazzi-gradle-plugin/src/test/projects/delete-snapshots/src/test/java/app/cash/paparazzi/plugin/test/DeleteTest.kt @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2020 Square, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package app.cash.paparazzi.plugin.test + +import android.widget.LinearLayout +import app.cash.paparazzi.Paparazzi +import org.junit.Rule +import org.junit.Test + +class DeleteTest { + @get:Rule + val paparazzi = Paparazzi() + + @Test + fun delete() { + paparazzi.snapshot(LinearLayout(paparazzi.context), "keep") + } +} diff --git a/paparazzi-gradle-plugin/src/test/projects/delete-snapshots/src/test/snapshots/images/app.cash.paparazzi.plugin.test_DeleteTest_delete.png b/paparazzi-gradle-plugin/src/test/projects/delete-snapshots/src/test/snapshots/images/app.cash.paparazzi.plugin.test_DeleteTest_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..3634500d220b8d50f05cc0c682ac2525ef277abc GIT binary patch literal 30618 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 Date: Fri, 1 Mar 2024 16:26:10 -0600 Subject: [PATCH 4/6] adding new test project --- .../cash/paparazzi/gradle/PaparazziPlugin.kt | 6 +++- .../paparazzi/gradle/PaparazziPluginTest.kt | 24 +++++++------- .../test/projects/clean-record/build.gradle | 22 +++++++++++++ .../paparazzi/plugin/test/CleanRecordTest.kt | 31 ++++++++++++++++++ ...azzi.plugin.test_CleanRecordTest_clean.png | Bin 0 -> 4462 bytes ...plugin.test_CleanRecordTest_clean_keep.png | Bin 0 -> 4462 bytes .../cash/paparazzi/plugin/test/DeleteTest.kt | 3 +- ...aparazzi.plugin.test_DeleteTest_delete.png | Bin 30618 -> 4462 bytes ...zzi.plugin.test_DeleteTest_delete_keep.png | Bin 30618 -> 0 bytes ...zi.plugin.test_DeleteTest_delete_label.png | Bin 0 -> 4462 bytes 10 files changed, 73 insertions(+), 13 deletions(-) create mode 100644 paparazzi-gradle-plugin/src/test/projects/clean-record/build.gradle create mode 100644 paparazzi-gradle-plugin/src/test/projects/clean-record/src/test/java/app/cash/paparazzi/plugin/test/CleanRecordTest.kt create mode 100644 paparazzi-gradle-plugin/src/test/projects/clean-record/src/test/snapshots/images/app.cash.paparazzi.plugin.test_CleanRecordTest_clean.png create mode 100644 paparazzi-gradle-plugin/src/test/projects/clean-record/src/test/snapshots/images/app.cash.paparazzi.plugin.test_CleanRecordTest_clean_keep.png delete mode 100644 paparazzi-gradle-plugin/src/test/projects/delete-snapshots/src/test/snapshots/images/app.cash.paparazzi.plugin.test_DeleteTest_delete_keep.png create mode 100644 paparazzi-gradle-plugin/src/test/projects/delete-snapshots/src/test/snapshots/images/app.cash.paparazzi.plugin.test_DeleteTest_delete_label.png diff --git a/paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt b/paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt index 45bd897be3..881cfc9e7b 100644 --- a/paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt +++ b/paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt @@ -96,7 +96,11 @@ public class PaparazziPlugin : Plugin { val deleteSnapshots = project.tasks.register("deletePaparazziSnapshots", Delete::class.java) { it.group = VERIFICATION_GROUP it.description = "Delete all golden images" - it.delete(project.fileTree(snapshotOutputDir)) + val files = project.fileTree(snapshotOutputDir) { tree -> + tree.include("**/*.png") + tree.include("**/*.mov") + } + it.delete(files) } variants.all { variant -> diff --git a/paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt b/paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt index 22dec1dea2..9b08d73f4c 100644 --- a/paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt +++ b/paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt @@ -710,23 +710,30 @@ class PaparazziPluginTest { @Test fun deleteSnapshots() { val fixtureRoot = File("src/test/projects/delete-snapshots") + val snapshotsDir = File(fixtureRoot, "src/test/snapshots") + val snapshot = File(snapshotsDir, "images/app.cash.paparazzi.plugin.test_DeleteTest_delete.png") + val snapshotWithKeep = File(snapshotsDir, "images/app.cash.paparazzi.plugin.test_DeleteTest_delete_label.png") + + assertThat(snapshot.exists()).isTrue() + assertThat(snapshotWithKeep.exists()).isTrue() gradleRunner .withArguments("deletePaparazziSnapshots", "--stacktrace") .runFixture(fixtureRoot) { build() } - val snapshotsDir = File(fixtureRoot, "src/test/snapshots").registerForDeletionOnExit() - - val snapshot = File(snapshotsDir, "images/app.cash.paparazzi.plugin.test_DeleteTest_delete.png") assertThat(snapshot.exists()).isFalse() - - val snapshotWithKeep = File(snapshotsDir, "images/app.cash.paparazzi.plugin.test_DeleteTest_delete_keep.png") assertThat(snapshotWithKeep.exists()).isFalse() } @Test fun cleanRecord() { - val fixtureRoot = File("src/test/projects/delete-snapshots") + val fixtureRoot = File("src/test/projects/clean-record") + val snapshotsDir = File(fixtureRoot, "src/test/snapshots") + val snapshot = File(snapshotsDir, "images/app.cash.paparazzi.plugin.test_CleanRecordTest_clean.png") + val snapshotWithKeep = File(snapshotsDir, "images/app.cash.paparazzi.plugin.test_CleanRecordTest_clean_keep.png") + + assertThat(snapshot.exists()).isTrue() + assertThat(snapshotWithKeep.exists()).isTrue() val result = gradleRunner .withArguments("cleanRecordPaparazziDebug", "--stacktrace") @@ -735,12 +742,7 @@ class PaparazziPluginTest { assertThat(result.task(":deletePaparazziSnapshots")).isNotNull() assertThat(result.task(":recordPaparazziDebug")).isNotNull() - val snapshotsDir = File(fixtureRoot, "src/test/snapshots").registerForDeletionOnExit() - - val snapshot = File(snapshotsDir, "images/app.cash.paparazzi.plugin.test_DeleteTest_delete.png") assertThat(snapshot.exists()).isFalse() - - val snapshotWithKeep = File(snapshotsDir, "images/app.cash.paparazzi.plugin.test_DeleteTest_delete_keep.png") assertThat(snapshotWithKeep.exists()).isTrue() } diff --git a/paparazzi-gradle-plugin/src/test/projects/clean-record/build.gradle b/paparazzi-gradle-plugin/src/test/projects/clean-record/build.gradle new file mode 100644 index 0000000000..bf279f74e7 --- /dev/null +++ b/paparazzi-gradle-plugin/src/test/projects/clean-record/build.gradle @@ -0,0 +1,22 @@ +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() + } + kotlinOptions { + jvmTarget = libs.versions.javaTarget.get() + } +} + +apply from: '../guava-fix.gradle' diff --git a/paparazzi-gradle-plugin/src/test/projects/clean-record/src/test/java/app/cash/paparazzi/plugin/test/CleanRecordTest.kt b/paparazzi-gradle-plugin/src/test/projects/clean-record/src/test/java/app/cash/paparazzi/plugin/test/CleanRecordTest.kt new file mode 100644 index 0000000000..bd9508c76e --- /dev/null +++ b/paparazzi-gradle-plugin/src/test/projects/clean-record/src/test/java/app/cash/paparazzi/plugin/test/CleanRecordTest.kt @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2020 Square, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package app.cash.paparazzi.plugin.test + +import android.widget.LinearLayout +import app.cash.paparazzi.Paparazzi +import org.junit.Rule +import org.junit.Test + +class CleanRecordTest { + @get:Rule + val paparazzi = Paparazzi() + + @Test + fun clean() { + paparazzi.snapshot(LinearLayout(paparazzi.context), "keep") + } +} diff --git a/paparazzi-gradle-plugin/src/test/projects/clean-record/src/test/snapshots/images/app.cash.paparazzi.plugin.test_CleanRecordTest_clean.png b/paparazzi-gradle-plugin/src/test/projects/clean-record/src/test/snapshots/images/app.cash.paparazzi.plugin.test_CleanRecordTest_clean.png new file mode 100644 index 0000000000000000000000000000000000000000..8da2be99c2a1b263af6bb67642d14a04cd24beca GIT binary patch literal 4462 zcmeAS@N?(olHy`uVBq!ia0y~yU@~H0V1B{D1{66WC$fZrLD1CG#WAEJ?(H>0UIqi6 z0~?&Q>Wg06vrVk|!P#`?ogG8NqMytR4y_Xz88-FsFic2IVQA1%W@bo{lw?pieS(1@ z(v6Mbgpm=0!?aN)qv0}|7)CS6Xvr{I9FA5KqjlqGgJ86wG}<~GZ8eW}6-N66#S>gTe~DWM4fTta%? literal 0 HcmV?d00001 diff --git a/paparazzi-gradle-plugin/src/test/projects/clean-record/src/test/snapshots/images/app.cash.paparazzi.plugin.test_CleanRecordTest_clean_keep.png b/paparazzi-gradle-plugin/src/test/projects/clean-record/src/test/snapshots/images/app.cash.paparazzi.plugin.test_CleanRecordTest_clean_keep.png new file mode 100644 index 0000000000000000000000000000000000000000..8da2be99c2a1b263af6bb67642d14a04cd24beca GIT binary patch literal 4462 zcmeAS@N?(olHy`uVBq!ia0y~yU@~H0V1B{D1{66WC$fZrLD1CG#WAEJ?(H>0UIqi6 z0~?&Q>Wg06vrVk|!P#`?ogG8NqMytR4y_Xz88-FsFic2IVQA1%W@bo{lw?pieS(1@ z(v6Mbgpm=0!?aN)qv0}|7)CS6Xvr{I9FA5KqjlqGgJ86wG}<~GZ8eW}6-N66#S>gTe~DWM4fTta%? literal 0 HcmV?d00001 diff --git a/paparazzi-gradle-plugin/src/test/projects/delete-snapshots/src/test/java/app/cash/paparazzi/plugin/test/DeleteTest.kt b/paparazzi-gradle-plugin/src/test/projects/delete-snapshots/src/test/java/app/cash/paparazzi/plugin/test/DeleteTest.kt index bd9bdf3308..d65b2ec668 100644 --- a/paparazzi-gradle-plugin/src/test/projects/delete-snapshots/src/test/java/app/cash/paparazzi/plugin/test/DeleteTest.kt +++ b/paparazzi-gradle-plugin/src/test/projects/delete-snapshots/src/test/java/app/cash/paparazzi/plugin/test/DeleteTest.kt @@ -26,6 +26,7 @@ class DeleteTest { @Test fun delete() { - paparazzi.snapshot(LinearLayout(paparazzi.context), "keep") + paparazzi.snapshot(LinearLayout(paparazzi.context)) + paparazzi.snapshot(LinearLayout(paparazzi.context), "label") } } diff --git a/paparazzi-gradle-plugin/src/test/projects/delete-snapshots/src/test/snapshots/images/app.cash.paparazzi.plugin.test_DeleteTest_delete.png b/paparazzi-gradle-plugin/src/test/projects/delete-snapshots/src/test/snapshots/images/app.cash.paparazzi.plugin.test_DeleteTest_delete.png index 3634500d220b8d50f05cc0c682ac2525ef277abc..8da2be99c2a1b263af6bb67642d14a04cd24beca 100644 GIT binary patch literal 4462 zcmeAS@N?(olHy`uVBq!ia0y~yU@~H0V1B{D1{66WC$fZrLD1CG#WAEJ?(H>0UIqi6 z0~?&Q>Wg06vrVk|!P#`?ogG8NqMytR4y_Xz88-FsFic2IVQA1%W@bo{lw?pieS(1@ z(v6Mbgpm=0!?aN)qv0}|7)CS6Xvr{I9FA5KqjlqGgJ86wG}<~GZ8eW}6-N66#S>gTe~DWM4fTta%? literal 30618 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 literal 0 HcmV?d00001 From b73302e0e96ce9b9c2a284b7a65aae9e4cfb0fa6 Mon Sep 17 00:00:00 2001 From: Al Kent Date: Fri, 1 Mar 2024 17:02:01 -0600 Subject: [PATCH 5/6] reverting to previous task graph wiring --- .../src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt b/paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt index 881cfc9e7b..ef1cb87a12 100644 --- a/paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt +++ b/paparazzi-gradle-plugin/src/main/java/app/cash/paparazzi/gradle/PaparazziPlugin.kt @@ -193,13 +193,13 @@ public class PaparazziPlugin : Plugin { val recordTaskProvider = project.tasks.register("recordPaparazzi$variantSlug", PaparazziTask::class.java) { it.group = VERIFICATION_GROUP it.description = "Record golden images for variant '${variant.name}'" + it.mustRunAfter(deleteSnapshots) } recordVariants.configure { it.dependsOn(recordTaskProvider) } val cleanRecordTaskProvider = project.tasks.register("cleanRecordPaparazzi$variantSlug") { it.group = VERIFICATION_GROUP it.description = "Clean and record golden images for variant '${variant.name}'" it.dependsOn(deleteSnapshots, recordTaskProvider) - recordTaskProvider.get().mustRunAfter(deleteSnapshots) } cleanRecordVariants.configure { it.dependsOn(cleanRecordTaskProvider) } val verifyTaskProvider = project.tasks.register("verifyPaparazzi$variantSlug", PaparazziTask::class.java) { From 46516618018435640c786357a34a81c8e65d16c2 Mon Sep 17 00:00:00 2001 From: Al Kent Date: Fri, 1 Mar 2024 17:04:12 -0600 Subject: [PATCH 6/6] nit: val rename --- .../java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt b/paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt index 9b08d73f4c..47bbcf1209 100644 --- a/paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt +++ b/paparazzi-gradle-plugin/src/test/java/app/cash/paparazzi/gradle/PaparazziPluginTest.kt @@ -712,17 +712,17 @@ class PaparazziPluginTest { val fixtureRoot = File("src/test/projects/delete-snapshots") val snapshotsDir = File(fixtureRoot, "src/test/snapshots") val snapshot = File(snapshotsDir, "images/app.cash.paparazzi.plugin.test_DeleteTest_delete.png") - val snapshotWithKeep = File(snapshotsDir, "images/app.cash.paparazzi.plugin.test_DeleteTest_delete_label.png") + val snapshotWithLabel = File(snapshotsDir, "images/app.cash.paparazzi.plugin.test_DeleteTest_delete_label.png") assertThat(snapshot.exists()).isTrue() - assertThat(snapshotWithKeep.exists()).isTrue() + assertThat(snapshotWithLabel.exists()).isTrue() gradleRunner .withArguments("deletePaparazziSnapshots", "--stacktrace") .runFixture(fixtureRoot) { build() } assertThat(snapshot.exists()).isFalse() - assertThat(snapshotWithKeep.exists()).isFalse() + assertThat(snapshotWithLabel.exists()).isFalse() } @Test