Skip to content

Commit

Permalink
Add plugin tests for annotation
Browse files Browse the repository at this point in the history
  • Loading branch information
geoff-powell committed May 15, 2024
1 parent c114f38 commit 7bf0b3a
Show file tree
Hide file tree
Showing 9 changed files with 236 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ import okio.buffer
import okio.source
import org.gradle.testkit.runner.BuildResult
import org.gradle.testkit.runner.GradleRunner
import org.gradle.testkit.runner.TaskOutcome
import org.gradle.testkit.runner.TaskOutcome.FROM_CACHE
import org.gradle.testkit.runner.TaskOutcome.SUCCESS
import org.jetbrains.kotlin.gradle.report.TaskExecutionState
import org.junit.After
import org.junit.Before
import org.junit.Ignore
Expand Down Expand Up @@ -1699,6 +1701,75 @@ class PaparazziPluginTest {
assertThat(darkModeSnapshotImage).isSimilarTo(darkModeGoldenImage).withDefaultThreshold()
}

@Test
fun previewAnnotationEmptyTestSuite() {
val fixtureRoot = File("src/test/projects/preview-annotation-empty-test-suite")

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

val snapshotsDir = File(fixtureRoot, "build/reports/paparazzi/debug/images")
val snapshots = snapshotsDir.listFilesSorted()
assertThat(snapshots!!).hasSize(1)

val goldenImage = File(fixtureRoot, "src/test/resources/hello_paparazzi.png")
assertThat(snapshots.get(0)).isSimilarTo(goldenImage).withDefaultThreshold()

assertThat(result.task(":paparazziGeneratePreviewDebugUnitTestKotlin")).isNotNull()

val generatedPreviewsDir = File(fixtureRoot, "build/generated/ksp/debug/kotlin/app/cash/paparazzi/plugin/test/")
assertThat(generatedPreviewsDir.listFiles()?.any {
it.name == "paparazziPreviews.kt"
}).isTrue()

val generatedPreviewTestDir = File(fixtureRoot, "build/generated/source/paparazzi/debugUnitTest/app/cash/paparazzi/plugin/test/")
assertThat(generatedPreviewTestDir.listFiles()?.any {
it.name == "PreviewTests.kt"
}).isTrue()
}

@Test
fun previewAnnotationErrorPrivatePreview() {
val fixtureRoot = File("src/test/projects/preview-annotation-private-preview")

val result = gradleRunner
.withArguments("testDebug", "--stacktrace")
.forwardOutput()
.runFixture(fixtureRoot) { buildAndFail() }

assertThat(result.task(":testDebugUnitTest")?.outcome).isEqualTo(TaskOutcome.FAILED)
assertThat(result.output).contains("java.lang.Exception at PreviewTests.kt:30")
}

@Test
fun previewAnnotationPreviewParameters() {
val fixtureRoot = File("src/test/projects/preview-annotation-preview-parameters")

val result = gradleRunner
.withArguments("testDebug", "--stacktrace")
.forwardOutput()
.runFixture(fixtureRoot) { buildAndFail() }

assertThat(result.task(":testDebugUnitTest")?.outcome).isEqualTo(TaskOutcome.FAILED)
assertThat(result.output).contains("java.lang.Exception at PreviewTests.kt:30")
}

@Test
fun previewAnnotationDslDisable() {
val fixtureRoot = File("src/test/projects/preview-annotation-dsl-disable")

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

assertThat(result.task(":paparazziGeneratePreviewDebugUnitTestKotlin")).isNull()

val generatedPreviewTestDir = File(fixtureRoot, "build/generated/source/paparazzi/debugUnitTest/app/cash/paparazzi/plugin/test/")
assertThat(generatedPreviewTestDir.exists()).isFalse()
}

@Test
fun disabledUnitTestVariant() {
val fixtureRoot = File("src/test/projects/disabled-unit-test-variant")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
plugins {
id 'com.android.library'
id 'kotlin-android'
id 'app.cash.paparazzi'
}

paparazzi {
generatePreviewTestClass = false
}

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()
}
buildFeatures {
compose true
}
composeOptions {
kotlinCompilerExtensionVersion libs.versions.composeCompiler.get()
}
}

dependencies {
implementation libs.composeUi.material
implementation libs.composeUi.uiTooling
}

apply from: '../guava-fix.gradle'
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package app.cash.paparazzi.plugin.test

import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview
import app.cash.paparazzi.annotations.Paparazzi

@Paparazzi
@Preview
@Composable
fun HelloPaparazzi() = Unit
Original file line number Diff line number Diff line change
@@ -1,52 +1,16 @@
package app.cash.paparazzi.plugin.test

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.tooling.preview.Preview
import app.cash.paparazzi.annotations.Paparazzi

@Paparazzi
@Preview
@Composable
fun HelloPaparazzi() {
val text = "Hello, Paparazzi"
Column(
Modifier
.background(Color.White)
.fillMaxSize()
.wrapContentSize()
) {
Text(text)
Text(text, style = TextStyle(fontFamily = FontFamily.Cursive))
Text(
text = text,
style = TextStyle(textDecoration = TextDecoration.LineThrough)
)
Text(
text = text,
style = TextStyle(textDecoration = TextDecoration.Underline)
)
Text(
text = text,
style = TextStyle(
textDecoration = TextDecoration.combine(
listOf(
TextDecoration.Underline,
TextDecoration.LineThrough
)
),
fontWeight = FontWeight.Bold
)
)
}
Text("Hello, Paparazzi", style = TextStyle(fontFamily = FontFamily.Cursive), color = Color.White)
}
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
plugins {
id 'com.android.library'
id 'kotlin-android'
id 'app.cash.paparazzi'
}

paparazzi {
generatePreviewTestClass = true
}

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()
}
buildFeatures {
compose true
}
composeOptions {
kotlinCompilerExtensionVersion libs.versions.composeCompiler.get()
}
}

dependencies {
implementation libs.composeUi.material
implementation libs.composeUi.uiTooling
}

apply from: '../guava-fix.gradle'
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package app.cash.paparazzi.plugin.test

import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import app.cash.paparazzi.annotations.Paparazzi

@Paparazzi
@Preview
@Composable
fun HelloPaparazzi(
@PreviewParameter(NameProvider::class) name: String,
) {
Text(text = name)
}

class NameProvider: PreviewParameterProvider<String> {
override val values: Sequence<String>
get() = sequenceOf("Papa", "Razzi")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
plugins {
id 'com.android.library'
id 'kotlin-android'
id 'app.cash.paparazzi'
}

paparazzi {
generatePreviewTestClass = true
}

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()
}
buildFeatures {
compose true
}
composeOptions {
kotlinCompilerExtensionVersion libs.versions.composeCompiler.get()
}
}

dependencies {
implementation libs.composeUi.material
implementation libs.composeUi.uiTooling
}

apply from: '../guava-fix.gradle'
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package app.cash.paparazzi.plugin.test

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.tooling.preview.Preview
import app.cash.paparazzi.annotations.Paparazzi

@Paparazzi
@Preview
@Composable
private fun HelloPaparazzi() = Unit

0 comments on commit 7bf0b3a

Please sign in to comment.